diff options
| author | Yan He <yanhe@codeaurora.org> | 2015-12-21 16:57:07 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:15:58 -0700 |
| commit | f42f84ecb32b09da424dd125bc7e916db4277654 (patch) | |
| tree | d89dfe52b651d363d4fdaf5c98966d9789fad82f /drivers/platform/msm | |
| parent | 8df2feee092a1d6fa3c7a7f815dcaee8470b55b8 (diff) | |
msm: ep_pcie: update PCIe PHY sequence to support L1ss
Update the PHY sequence of PCIe Endpoint mode to support L1ss.
Change-Id: Ib80a2fab167e232540240183387a441d246463a5
Signed-off-by: Yan He <yanhe@codeaurora.org>
Diffstat (limited to 'drivers/platform/msm')
| -rw-r--r-- | drivers/platform/msm/ep_pcie/ep_pcie_phy.c | 107 |
1 files changed, 58 insertions, 49 deletions
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_phy.c b/drivers/platform/msm/ep_pcie/ep_pcie_phy.c index 633daf1860f4..83e74f2c7ba7 100644 --- a/drivers/platform/msm/ep_pcie/ep_pcie_phy.c +++ b/drivers/platform/msm/ep_pcie/ep_pcie_phy.c @@ -26,71 +26,80 @@ void ep_pcie_phy_init(struct ep_pcie_dev_t *dev) ep_pcie_write_reg(dev->phy, PCIE_PHY_SW_RESET, 0x01); ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_DOWN_CONTROL, 0x01); - ep_pcie_write_reg(dev->phy, QSERDES_COM_SYSCLK_EN_SEL, 0x00); + /* Common block settings */ ep_pcie_write_reg(dev->phy, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x18); - ep_pcie_write_reg(dev->phy, QSERDES_COM_CLK_SELECT, 0x30); - ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL, 0x20); + ep_pcie_write_reg(dev->phy, QSERDES_COM_CLK_ENABLE1, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_BG_TRIM, 0x0F); + ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP_EN, 0x01); + ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_MAP, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_TIMER1, 0xFF); + ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_TIMER2, 0x1F); ep_pcie_write_reg(dev->phy, QSERDES_COM_CMN_CONFIG, 0x06); + ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IVCO, 0x0F); + ep_pcie_write_reg(dev->phy, QSERDES_COM_HSCLK_SEL, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_SVS_MODE_CLK_SEL, 0x01); + ep_pcie_write_reg(dev->phy, QSERDES_COM_CORE_CLK_EN, 0x20); + ep_pcie_write_reg(dev->phy, QSERDES_COM_CORECLK_DIV, 0x0A); + ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL, 0x20); + ep_pcie_write_reg(dev->phy, QSERDES_COM_BG_TIMER, 0x01); + + /* PLL Config Settings */ + ep_pcie_write_reg(dev->phy, QSERDES_COM_SYSCLK_EN_SEL, 0x00); ep_pcie_write_reg(dev->phy, QSERDES_COM_DEC_START_MODE0, 0x19); + ep_pcie_write_reg(dev->phy, QSERDES_COM_DIV_FRAC_START3_MODE0, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_DIV_FRAC_START2_MODE0, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_DIV_FRAC_START1_MODE0, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP3_MODE0, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP2_MODE0, 0x02); + ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP1_MODE0, 0x7F); + ep_pcie_write_reg(dev->phy, QSERDES_COM_CLK_SELECT, 0x30); + ep_pcie_write_reg(dev->phy, QSERDES_COM_SYS_CLK_CTRL, 0x06); + ep_pcie_write_reg(dev->phy, QSERDES_COM_SYSCLK_BUF_ENABLE, 0x1E); ep_pcie_write_reg(dev->phy, QSERDES_COM_CP_CTRL_MODE0, 0x3F); ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_RCTRL_MODE0, 0x1A); ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CCTRL_MODE0, 0x00); - ep_pcie_write_reg(dev->phy, QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x00); + ep_pcie_write_reg(dev->phy, QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x03); ep_pcie_write_reg(dev->phy, QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0xFF); - ep_pcie_write_reg(dev->phy, QSERDES_COM_SVS_MODE_CLK_SEL, 0x01); - ep_pcie_write_reg(dev->phy, QSERDES_COM_CORE_CLK_EN, 0x00); - ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP2_MODE0, 0x04); - ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP1_MODE0, 0xFF); - ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP_EN, 0x42); - ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_MAP, 0x00); - ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_TIMER2, 0x3F); - ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_TIMER1, 0xFF); - ep_pcie_write_reg(dev->phy, QSERDES_COM_BG_TIMER, 0x01); - ep_pcie_write_reg(dev->phy, QSERDES_COM_BG_TRIM, 0x0F); - ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IVCO, 0x0F); - ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, - 0x4B); - ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_FO_GAIN, 0x0A); - ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_FO_GAIN_HALF, 0x0A); - ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN, 0x04); - ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN_HALF, 0x04); + /* TX settings */ + ep_pcie_write_reg(dev->phy, QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, + 0x45); + ep_pcie_write_reg(dev->phy, QSERDES_TX_LANE_MODE, 0x06); + ep_pcie_write_reg(dev->phy, QSERDES_TX_RES_CODE_LANE_OFFSET, 0x02); + ep_pcie_write_reg(dev->phy, QSERDES_TX_RCV_DETECT_LVL_2, 0x12); + + /* RX settings */ + ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_ENABLES, 0x1C); + ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x01); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x00); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xDB); - ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, - 0x77); - ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80); - ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_ENABLES, 0x1C); - ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_CNTRL, 0x03); - ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14); + ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, + 0x4B); + ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN, 0x04); + ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN_HALF, 0x04); - ep_pcie_write_reg(dev->phy, QSERDES_TX_RES_CODE_LANE_OFFSET, 0x02); - ep_pcie_write_reg(dev->phy, QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, - 0x45); - ep_pcie_write_reg(dev->phy, QSERDES_TX_RCV_DETECT_LVL_2, 0x12); - ep_pcie_write_reg(dev->phy, QSERDES_TX_LANE_MODE, 0x06); + /* EP_REF_CLK settings */ + ep_pcie_write_reg(dev->phy, QSERDES_COM_CLK_EP_DIV, 0x19); + ep_pcie_write_reg(dev->phy, PCIE_PHY_ENDPOINT_REFCLK_DRIVE, 0x00); - ep_pcie_write_reg(dev->phy, PCIE_PHY_OSC_DTCT_ACTIONS, 0x0A); - ep_pcie_write_reg(dev->phy, PCIE_PHY_RX_IDLE_DTCT_CNTRL, 0x4C); - ep_pcie_write_reg(dev->phy, PCIE_PHY_TXDEEMPH_M3P5DB_V0, 0x0F); - ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_STATE_CONFIG1, 0xA3); - ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_STATE_CONFIG2, 0x1B); - ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_STATE_CONFIG4, 0x00); - ep_pcie_write_reg(dev->phy, PCIE_PHY_RCVR_DTCT_DLY_P1U2_L, 0xF1); - ep_pcie_write_reg(dev->phy, PCIE_PHY_RCVR_DTCT_DLY_P1U2_H, 0x01); - ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG1, 0x80); - ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG2, 0x02); - ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG3, 0x40); - ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG4, 0x07); + /* PCIE L1SS settings */ ep_pcie_write_reg(dev->phy, PCIE_PHY_PWRUP_RESET_DLY_TIME_AUXCLK, 0x40); - ep_pcie_write_reg(dev->phy, PCIE_PHY_LP_WAKEUP_DLY_TIME_AUXCLK, 0x40); + ep_pcie_write_reg(dev->phy, PCIE_PHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, + 0x00); ep_pcie_write_reg(dev->phy, PCIE_PHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, - 0x40); + 0x40); + ep_pcie_write_reg(dev->phy, PCIE_PHY_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, + 0x00); + ep_pcie_write_reg(dev->phy, PCIE_PHY_LP_WAKEUP_DLY_TIME_AUXCLK, 0x40); ep_pcie_write_reg(dev->phy, PCIE_PHY_PLL_LOCK_CHK_DLY_TIME, 0x73); - ep_pcie_write_reg(dev->phy, PCIE_PHY_ELECIDLE_DLY_SEL, 0x01); - ep_pcie_write_reg(dev->phy, PCIE_PHY_SIGDET_CNTRL, 0x0F); - ep_pcie_write_reg(dev->phy, PCIE_PHY_RX_SIGDET_LVL, 0x77); + + /* PCS settings */ + ep_pcie_write_reg(dev->phy, PCIE_PHY_SIGDET_CNTRL, 0x07); + ep_pcie_write_reg(dev->phy, PCIE_PHY_RX_SIGDET_LVL, 0x99); + ep_pcie_write_reg(dev->phy, PCIE_PHY_TXDEEMPH_M6DB_V0, 0x15); + ep_pcie_write_reg(dev->phy, PCIE_PHY_TXDEEMPH_M3P5DB_V0, 0x0E); + ep_pcie_write_reg(dev->phy, PCIE_PHY_SW_RESET, 0x00); ep_pcie_write_reg(dev->phy, PCIE_PHY_START_CONTROL, 0x03); } |
