Lines Matching refs:cdns_phy

113 static void cdns_dp_phy_run(struct cdns_dp_phy *cdns_phy);
114 static void cdns_dp_phy_wait_pma_cmn_ready(struct cdns_dp_phy *cdns_phy);
115 static void cdns_dp_phy_pma_cfg(struct cdns_dp_phy *cdns_phy);
116 static void cdns_dp_phy_pma_cmn_cfg_25mhz(struct cdns_dp_phy *cdns_phy);
117 static void cdns_dp_phy_pma_lane_cfg(struct cdns_dp_phy *cdns_phy,
119 static void cdns_dp_phy_pma_cmn_vco_cfg_25mhz(struct cdns_dp_phy *cdns_phy);
120 static void cdns_dp_phy_pma_cmn_rate(struct cdns_dp_phy *cdns_phy);
121 static void cdns_dp_phy_write_field(struct cdns_dp_phy *cdns_phy,
136 struct cdns_dp_phy *cdns_phy = phy_get_drvdata(phy); in cdns_dp_phy_init() local
138 writel(0x0003, cdns_phy->base + PHY_AUX_CTRL); /* enable AUX */ in cdns_dp_phy_init()
141 cdns_dp_phy_pma_cfg(cdns_phy); in cdns_dp_phy_init()
148 cdns_dp_phy_write_field(cdns_phy, PHY_PMA_XCVR_POWER_STATE_REQ, in cdns_dp_phy_init()
151 if (cdns_phy->num_lanes >= 2) { in cdns_dp_phy_init()
152 cdns_dp_phy_write_field(cdns_phy, in cdns_dp_phy_init()
156 if (cdns_phy->num_lanes == 4) { in cdns_dp_phy_init()
157 cdns_dp_phy_write_field(cdns_phy, in cdns_dp_phy_init()
160 cdns_dp_phy_write_field(cdns_phy, in cdns_dp_phy_init()
166 cdns_dp_phy_write_field(cdns_phy, PHY_PMA_XCVR_PLLCLK_EN, in cdns_dp_phy_init()
169 if (cdns_phy->num_lanes >= 2) { in cdns_dp_phy_init()
170 cdns_dp_phy_write_field(cdns_phy, PHY_PMA_XCVR_PLLCLK_EN, in cdns_dp_phy_init()
172 if (cdns_phy->num_lanes == 4) { in cdns_dp_phy_init()
173 cdns_dp_phy_write_field(cdns_phy, in cdns_dp_phy_init()
176 cdns_dp_phy_write_field(cdns_phy, in cdns_dp_phy_init()
186 lane_bits = (1 << cdns_phy->num_lanes) - 1; in cdns_dp_phy_init()
188 cdns_phy->base + PHY_RESET); in cdns_dp_phy_init()
191 writel(0x0001, cdns_phy->base + PHY_PMA_XCVR_PLLCLK_EN); in cdns_dp_phy_init()
194 cdns_dp_phy_pma_cmn_vco_cfg_25mhz(cdns_phy); in cdns_dp_phy_init()
195 cdns_dp_phy_pma_cmn_rate(cdns_phy); in cdns_dp_phy_init()
198 cdns_dp_phy_write_field(cdns_phy, PHY_RESET, 8, 1, 1); in cdns_dp_phy_init()
199 cdns_dp_phy_wait_pma_cmn_ready(cdns_phy); in cdns_dp_phy_init()
200 cdns_dp_phy_run(cdns_phy); in cdns_dp_phy_init()
205 static void cdns_dp_phy_wait_pma_cmn_ready(struct cdns_dp_phy *cdns_phy) in cdns_dp_phy_wait_pma_cmn_ready() argument
210 ret = readl_poll_timeout(cdns_phy->base + PHY_PMA_CMN_READY, reg, in cdns_dp_phy_wait_pma_cmn_ready()
213 dev_err(cdns_phy->dev, in cdns_dp_phy_wait_pma_cmn_ready()
217 static void cdns_dp_phy_pma_cfg(struct cdns_dp_phy *cdns_phy) in cdns_dp_phy_pma_cfg() argument
222 cdns_dp_phy_pma_cmn_cfg_25mhz(cdns_phy); in cdns_dp_phy_pma_cfg()
225 for (i = 0; i < cdns_phy->num_lanes; i++) in cdns_dp_phy_pma_cfg()
226 cdns_dp_phy_pma_lane_cfg(cdns_phy, i); in cdns_dp_phy_pma_cfg()
229 static void cdns_dp_phy_pma_cmn_cfg_25mhz(struct cdns_dp_phy *cdns_phy) in cdns_dp_phy_pma_cmn_cfg_25mhz() argument
232 writel(0x0019, cdns_phy->sd_base + CMN_SSM_BIAS_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
233 writel(0x0032, cdns_phy->sd_base + CMN_PLLSM0_PLLPRE_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
234 writel(0x00D1, cdns_phy->sd_base + CMN_PLLSM0_PLLLOCK_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
235 writel(0x0032, cdns_phy->sd_base + CMN_PLLSM1_PLLPRE_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
236 writel(0x00D1, cdns_phy->sd_base + CMN_PLLSM1_PLLLOCK_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
237 writel(0x007D, cdns_phy->sd_base + CMN_BGCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
238 writel(0x007D, cdns_phy->sd_base + CMN_BGCAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
239 writel(0x0019, cdns_phy->sd_base + CMN_IBCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
240 writel(0x001E, cdns_phy->sd_base + CMN_TXPUCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
241 writel(0x0006, cdns_phy->sd_base + CMN_TXPUCAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
242 writel(0x001E, cdns_phy->sd_base + CMN_TXPDCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
243 writel(0x0006, cdns_phy->sd_base + CMN_TXPDCAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
244 writel(0x02EE, cdns_phy->sd_base + CMN_RXCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
245 writel(0x0006, cdns_phy->sd_base + CMN_RXCAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
246 writel(0x0002, cdns_phy->sd_base + CMN_SD_CAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
247 writel(0x0002, cdns_phy->sd_base + CMN_SD_CAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
248 writel(0x000E, cdns_phy->sd_base + CMN_SD_CAL_REFTIM_START); in cdns_dp_phy_pma_cmn_cfg_25mhz()
249 writel(0x012B, cdns_phy->sd_base + CMN_SD_CAL_PLLCNT_START); in cdns_dp_phy_pma_cmn_cfg_25mhz()
251 writel(0x0409, cdns_phy->sd_base + CMN_PDIAG_PLL0_CP_PADJ_M0); in cdns_dp_phy_pma_cmn_cfg_25mhz()
252 writel(0x1001, cdns_phy->sd_base + CMN_PDIAG_PLL0_CP_IADJ_M0); in cdns_dp_phy_pma_cmn_cfg_25mhz()
253 writel(0x0F08, cdns_phy->sd_base + CMN_PDIAG_PLL0_FILT_PADJ_M0); in cdns_dp_phy_pma_cmn_cfg_25mhz()
254 writel(0x0004, cdns_phy->sd_base + CMN_PLL0_DSM_DIAG_M0); in cdns_dp_phy_pma_cmn_cfg_25mhz()
255 writel(0x00FA, cdns_phy->sd_base + CMN_PLL0_VCOCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
256 writel(0x0004, cdns_phy->sd_base + CMN_PLL0_VCOCAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
257 writel(0x00FA, cdns_phy->sd_base + CMN_PLL1_VCOCAL_INIT_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
258 writel(0x0004, cdns_phy->sd_base + CMN_PLL1_VCOCAL_ITER_TMR); in cdns_dp_phy_pma_cmn_cfg_25mhz()
259 writel(0x0318, cdns_phy->sd_base + CMN_PLL0_VCOCAL_REFTIM_START); in cdns_dp_phy_pma_cmn_cfg_25mhz()
262 static void cdns_dp_phy_pma_cmn_vco_cfg_25mhz(struct cdns_dp_phy *cdns_phy) in cdns_dp_phy_pma_cmn_vco_cfg_25mhz() argument
265 switch (cdns_phy->max_bit_rate) { in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
269 writel(0x01B0, cdns_phy->sd_base + CMN_PLL0_INTDIV_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
270 writel(0x0000, cdns_phy->sd_base + CMN_PLL0_FRACDIVL_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
271 writel(0x0002, cdns_phy->sd_base + CMN_PLL0_FRACDIVH_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
272 writel(0x0120, cdns_phy->sd_base + CMN_PLL0_HIGH_THR_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
277 writel(0x0184, cdns_phy->sd_base + CMN_PLL0_INTDIV_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
278 writel(0xCCCD, cdns_phy->sd_base + CMN_PLL0_FRACDIVL_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
279 writel(0x0002, cdns_phy->sd_base + CMN_PLL0_FRACDIVH_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
280 writel(0x0104, cdns_phy->sd_base + CMN_PLL0_HIGH_THR_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
285 writel(0x0159, cdns_phy->sd_base + CMN_PLL0_INTDIV_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
286 writel(0x999A, cdns_phy->sd_base + CMN_PLL0_FRACDIVL_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
287 writel(0x0002, cdns_phy->sd_base + CMN_PLL0_FRACDIVH_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
288 writel(0x00E7, cdns_phy->sd_base + CMN_PLL0_HIGH_THR_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
292 writel(0x0144, cdns_phy->sd_base + CMN_PLL0_INTDIV_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
293 writel(0x0000, cdns_phy->sd_base + CMN_PLL0_FRACDIVL_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
294 writel(0x0002, cdns_phy->sd_base + CMN_PLL0_FRACDIVH_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
295 writel(0x00D8, cdns_phy->sd_base + CMN_PLL0_HIGH_THR_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
299 writel(0x0002, cdns_phy->sd_base + CMN_PDIAG_PLL0_CTRL_M0); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
300 writel(0x0318, cdns_phy->sd_base + CMN_PLL0_VCOCAL_PLLCNT_START); in cdns_dp_phy_pma_cmn_vco_cfg_25mhz()
303 static void cdns_dp_phy_pma_cmn_rate(struct cdns_dp_phy *cdns_phy) in cdns_dp_phy_pma_cmn_rate() argument
310 writel(0x0000, cdns_phy->sd_base + PHY_PLL_CFG); in cdns_dp_phy_pma_cmn_rate()
312 switch (cdns_phy->max_bit_rate) { in cdns_dp_phy_pma_cmn_rate()
338 writel(clk_sel_val, cdns_phy->sd_base + CMN_PDIAG_PLL0_CLK_SEL_M0); in cdns_dp_phy_pma_cmn_rate()
341 for (i = 0; i < cdns_phy->num_lanes; i++) { in cdns_dp_phy_pma_cmn_rate()
343 cdns_phy->sd_base + (XCVR_DIAG_HSCLK_DIV | (i<<11))); in cdns_dp_phy_pma_cmn_rate()
347 static void cdns_dp_phy_pma_lane_cfg(struct cdns_dp_phy *cdns_phy, in cdns_dp_phy_pma_lane_cfg() argument
353 writel(0x00FB, cdns_phy->sd_base + (TX_PSC_A0 | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
354 writel(0x04AA, cdns_phy->sd_base + (TX_PSC_A2 | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
355 writel(0x04AA, cdns_phy->sd_base + (TX_PSC_A3 | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
356 writel(0x0000, cdns_phy->sd_base + (RX_PSC_A0 | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
357 writel(0x0000, cdns_phy->sd_base + (RX_PSC_A2 | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
358 writel(0x0000, cdns_phy->sd_base + (RX_PSC_A3 | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
360 writel(0x0001, cdns_phy->sd_base + (XCVR_DIAG_PLLDRC_CTRL | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
361 writel(0x0000, cdns_phy->sd_base + (XCVR_DIAG_HSCLK_SEL | lane_bits)); in cdns_dp_phy_pma_lane_cfg()
364 static void cdns_dp_phy_run(struct cdns_dp_phy *cdns_phy) in cdns_dp_phy_run() argument
376 ret = readl_poll_timeout(cdns_phy->base + PHY_PMA_XCVR_PLLCLK_EN_ACK, in cdns_dp_phy_run()
379 dev_err(cdns_phy->dev, in cdns_dp_phy_run()
384 switch (cdns_phy->num_lanes) { in cdns_dp_phy_run()
403 writel(write_val1, cdns_phy->base + PHY_PMA_XCVR_POWER_STATE_REQ); in cdns_dp_phy_run()
405 ret = readl_poll_timeout(cdns_phy->base + PHY_PMA_XCVR_POWER_STATE_ACK, in cdns_dp_phy_run()
409 dev_err(cdns_phy->dev, in cdns_dp_phy_run()
412 writel(0, cdns_phy->base + PHY_PMA_XCVR_POWER_STATE_REQ); in cdns_dp_phy_run()
415 writel(write_val2, cdns_phy->base + PHY_PMA_XCVR_POWER_STATE_REQ); in cdns_dp_phy_run()
417 ret = readl_poll_timeout(cdns_phy->base + PHY_PMA_XCVR_POWER_STATE_ACK, in cdns_dp_phy_run()
421 dev_err(cdns_phy->dev, in cdns_dp_phy_run()
424 writel(0, cdns_phy->base + PHY_PMA_XCVR_POWER_STATE_REQ); in cdns_dp_phy_run()
428 static void cdns_dp_phy_write_field(struct cdns_dp_phy *cdns_phy, in cdns_dp_phy_write_field() argument
436 read_val = readl(cdns_phy->base + offset); in cdns_dp_phy_write_field()
438 start_bit))), cdns_phy->base + offset); in cdns_dp_phy_write_field()
444 struct cdns_dp_phy *cdns_phy; in cdns_dp_phy_probe() local
450 cdns_phy = devm_kzalloc(dev, sizeof(*cdns_phy), GFP_KERNEL); in cdns_dp_phy_probe()
451 if (!cdns_phy) in cdns_dp_phy_probe()
454 cdns_phy->dev = &pdev->dev; in cdns_dp_phy_probe()
463 cdns_phy->base = devm_ioremap_resource(&pdev->dev, regs); in cdns_dp_phy_probe()
464 if (IS_ERR(cdns_phy->base)) in cdns_dp_phy_probe()
465 return PTR_ERR(cdns_phy->base); in cdns_dp_phy_probe()
468 cdns_phy->sd_base = devm_ioremap_resource(&pdev->dev, regs); in cdns_dp_phy_probe()
469 if (IS_ERR(cdns_phy->sd_base)) in cdns_dp_phy_probe()
470 return PTR_ERR(cdns_phy->sd_base); in cdns_dp_phy_probe()
473 &(cdns_phy->num_lanes)); in cdns_dp_phy_probe()
475 cdns_phy->num_lanes = DEFAULT_NUM_LANES; in cdns_dp_phy_probe()
477 switch (cdns_phy->num_lanes) { in cdns_dp_phy_probe()
485 cdns_phy->num_lanes); in cdns_dp_phy_probe()
490 &(cdns_phy->max_bit_rate)); in cdns_dp_phy_probe()
492 cdns_phy->max_bit_rate = DEFAULT_MAX_BIT_RATE; in cdns_dp_phy_probe()
494 switch (cdns_phy->max_bit_rate) { in cdns_dp_phy_probe()
506 cdns_phy->max_bit_rate); in cdns_dp_phy_probe()
510 phy_set_drvdata(phy, cdns_phy); in cdns_dp_phy_probe()
515 cdns_phy->num_lanes, in cdns_dp_phy_probe()
516 cdns_phy->max_bit_rate / 1000, in cdns_dp_phy_probe()
517 cdns_phy->max_bit_rate % 1000); in cdns_dp_phy_probe()