diff options
| author | Yan He <yanhe@codeaurora.org> | 2015-06-04 16:00:32 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 11:16:15 -0700 |
| commit | 4f927fe01bc49c8e6f92086f1def833cf866d4a1 (patch) | |
| tree | 7867d377e4ab8c8ee42d7dae7c150757acc679f5 | |
| parent | 7adcccb4d1a7591ff5045f484fcb10f5e2e77483 (diff) | |
msm: ep_pcie: update PCIe PHY configuration
Update the configuration of PCIe PHY based on the version of PHY.
Change-Id: I1faf65c2cc1215cd6ad679d0c4558a17f43db3fc
Signed-off-by: Yan He <yanhe@codeaurora.org>
| -rw-r--r-- | drivers/platform/msm/ep_pcie/ep_pcie_phy.c | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_phy.c b/drivers/platform/msm/ep_pcie/ep_pcie_phy.c index e0ea00165c89..015617aaa1c2 100644 --- a/drivers/platform/msm/ep_pcie/ep_pcie_phy.c +++ b/drivers/platform/msm/ep_pcie/ep_pcie_phy.c @@ -17,12 +17,22 @@ #include "ep_pcie_com.h" #include "ep_pcie_phy.h" +static u32 qserdes_com_oft; + void ep_pcie_phy_init(struct ep_pcie_dev_t *dev) { EP_PCIE_DBG(dev, "PCIe V%d: PHY V%d: Initializing 20nm QMP phy - 100MHz\n", dev->rev, dev->phy_rev); + switch (dev->phy_rev) { + case 3: + qserdes_com_oft = 8; + break; + default: + qserdes_com_oft = 0; + } + ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_DOWN_CONTROL, 0x01); ep_pcie_write_reg(dev->phy, QSERDES_COM_SYS_CLK_CTRL, 0x1E); ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CP_SETI, 0x11); @@ -31,8 +41,10 @@ void ep_pcie_phy_init(struct ep_pcie_dev_t *dev) ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IP_SETI, 0x3F); ep_pcie_write_reg(dev->phy, QSERDES_COM_IP_TRIM, 0x0F); ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL, 0x90); - ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_CAL_CSR, 0x77); - ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_TRIM_CONTROL, 0x15); + ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_CAL_CSR + + qserdes_com_oft, 0x77); + ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_TRIM_CONTROL + + qserdes_com_oft, 0x15); ep_pcie_write_reg(dev->phy, QSERDES_TX_RCV_DETECT_LVL, 0x03); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN1_LSB, 0xFF); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN2_LSB, 0xFF); @@ -47,12 +59,16 @@ void ep_pcie_phy_init(struct ep_pcie_dev_t *dev) ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL2, 0x07); ep_pcie_write_reg(dev->phy, QSERDES_COM_IE_TRIM, 0x3F); ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CNTRL, 0x46); - ep_pcie_write_reg(dev->phy, QSERDES_COM_PLLLOCK_CMP2, 0x05); - ep_pcie_write_reg(dev->phy, QSERDES_COM_PLLLOCK_CMP_EN, 0x03); - ep_pcie_write_reg(dev->phy, QSERDES_COM_DEC_START1, 0x99); + ep_pcie_write_reg(dev->phy, QSERDES_COM_PLLLOCK_CMP2 + + qserdes_com_oft, 0x05); + ep_pcie_write_reg(dev->phy, QSERDES_COM_PLLLOCK_CMP_EN + + qserdes_com_oft, 0x03); + ep_pcie_write_reg(dev->phy, QSERDES_COM_DEC_START1 + + qserdes_com_oft, 0x99); ep_pcie_write_reg(dev->phy, QSERDES_RX_CDR_CONTROL1, 0xF5); ep_pcie_write_reg(dev->phy, QSERDES_RX_CDR_CONTROL_HALF, 0x2C); - ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_START_SEG1, 0x24); + ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_START_SEG1 + + qserdes_com_oft, 0x24); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN1_MSB, 0x07); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x1E); ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, @@ -66,6 +82,26 @@ void ep_pcie_phy_init(struct ep_pcie_dev_t *dev) ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_RCVR_IQ_EN, 0x31); ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL2, 0x5); ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_VCOTAIL_EN, 0x1); + } else if (dev->phy_rev == 3) { + ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_START_SEG1 + + qserdes_com_oft, 0x20); + + ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CP_SETI, 0x3F); + ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IP_SETP, 0x34); + ep_pcie_write_reg(dev->phy, QSERDES_COM_IE_TRIM, 0x0F); + ep_pcie_write_reg(dev->phy, QSERDES_RX_CDR_CONTROL1, 0xF4); + ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN1_MSB, 0x1F); + ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_CNTRL, 0x90); + ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_DEGLITCH_CNTRL, + 0x06); + + ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CRCTRL + + qserdes_com_oft, 0x09); + + ep_pcie_write_reg(dev->phy, + QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x49); + ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_FO_GAIN, 0x09); + ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN, 0x04); } ep_pcie_write_reg(dev->phy, PCIE_PHY_SW_RESET, 0x00); |
