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