Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae6093ed authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ep_pcie: update PCIe PHY configuration"

parents df6a1cc6 9c9e4169
Loading
Loading
Loading
Loading
+42 −6
Original line number Diff line number Diff line
@@ -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);