summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan He <yanhe@codeaurora.org>2015-06-04 16:00:32 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:16:15 -0700
commit4f927fe01bc49c8e6f92086f1def833cf866d4a1 (patch)
tree7867d377e4ab8c8ee42d7dae7c150757acc679f5
parent7adcccb4d1a7591ff5045f484fcb10f5e2e77483 (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.c48
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);