194a407ccSDmitry Baryshkov // SPDX-License-Identifier: GPL-2.0 294a407ccSDmitry Baryshkov /* 394a407ccSDmitry Baryshkov * Copyright (c) 2017, The Linux Foundation. All rights reserved. 494a407ccSDmitry Baryshkov */ 594a407ccSDmitry Baryshkov 694a407ccSDmitry Baryshkov #include <linux/clk.h> 794a407ccSDmitry Baryshkov #include <linux/clk-provider.h> 894a407ccSDmitry Baryshkov #include <linux/delay.h> 994a407ccSDmitry Baryshkov #include <linux/err.h> 1094a407ccSDmitry Baryshkov #include <linux/io.h> 1194a407ccSDmitry Baryshkov #include <linux/iopoll.h> 1294a407ccSDmitry Baryshkov #include <linux/kernel.h> 136c37a02bSJohan Hovold #include <linux/mfd/syscon.h> 1494a407ccSDmitry Baryshkov #include <linux/module.h> 1594a407ccSDmitry Baryshkov #include <linux/of.h> 1694a407ccSDmitry Baryshkov #include <linux/of_device.h> 1794a407ccSDmitry Baryshkov #include <linux/of_address.h> 1811bf53a3SDmitry Baryshkov #include <linux/phy/pcie.h> 1994a407ccSDmitry Baryshkov #include <linux/phy/phy.h> 2094a407ccSDmitry Baryshkov #include <linux/platform_device.h> 216c37a02bSJohan Hovold #include <linux/regmap.h> 2294a407ccSDmitry Baryshkov #include <linux/regulator/consumer.h> 2394a407ccSDmitry Baryshkov #include <linux/reset.h> 2494a407ccSDmitry Baryshkov #include <linux/slab.h> 2594a407ccSDmitry Baryshkov 2694a407ccSDmitry Baryshkov #include "phy-qcom-qmp.h" 27eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-misc-v3.h" 28eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v4.h" 29eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v4_20.h" 30eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v5.h" 31eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v5_20.h" 32354fc6c5SAbel Vesa #include "phy-qcom-qmp-pcs-pcie-v6.h" 33baf172ccSAbel Vesa #include "phy-qcom-qmp-pcs-pcie-v6_20.h" 34eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcie-qhp.h" 3594a407ccSDmitry Baryshkov 3694a407ccSDmitry Baryshkov /* QPHY_SW_RESET bit */ 3794a407ccSDmitry Baryshkov #define SW_RESET BIT(0) 3894a407ccSDmitry Baryshkov /* QPHY_POWER_DOWN_CONTROL */ 3994a407ccSDmitry Baryshkov #define SW_PWRDN BIT(0) 4094a407ccSDmitry Baryshkov #define REFCLK_DRV_DSBL BIT(1) 4194a407ccSDmitry Baryshkov /* QPHY_START_CONTROL bits */ 4294a407ccSDmitry Baryshkov #define SERDES_START BIT(0) 4394a407ccSDmitry Baryshkov #define PCS_START BIT(1) 4494a407ccSDmitry Baryshkov /* QPHY_PCS_STATUS bit */ 4594a407ccSDmitry Baryshkov #define PHYSTATUS BIT(6) 4694a407ccSDmitry Baryshkov #define PHYSTATUS_4_20 BIT(7) 4794a407ccSDmitry Baryshkov 4894a407ccSDmitry Baryshkov #define PHY_INIT_COMPLETE_TIMEOUT 10000 4994a407ccSDmitry Baryshkov 5094a407ccSDmitry Baryshkov struct qmp_phy_init_tbl { 5194a407ccSDmitry Baryshkov unsigned int offset; 5294a407ccSDmitry Baryshkov unsigned int val; 5394a407ccSDmitry Baryshkov /* 5494a407ccSDmitry Baryshkov * mask of lanes for which this register is written 5594a407ccSDmitry Baryshkov * for cases when second lane needs different values 5694a407ccSDmitry Baryshkov */ 5794a407ccSDmitry Baryshkov u8 lane_mask; 5894a407ccSDmitry Baryshkov }; 5994a407ccSDmitry Baryshkov 6094a407ccSDmitry Baryshkov #define QMP_PHY_INIT_CFG(o, v) \ 6194a407ccSDmitry Baryshkov { \ 6294a407ccSDmitry Baryshkov .offset = o, \ 6394a407ccSDmitry Baryshkov .val = v, \ 6494a407ccSDmitry Baryshkov .lane_mask = 0xff, \ 6594a407ccSDmitry Baryshkov } 6694a407ccSDmitry Baryshkov 6794a407ccSDmitry Baryshkov #define QMP_PHY_INIT_CFG_LANE(o, v, l) \ 6894a407ccSDmitry Baryshkov { \ 6994a407ccSDmitry Baryshkov .offset = o, \ 7094a407ccSDmitry Baryshkov .val = v, \ 7194a407ccSDmitry Baryshkov .lane_mask = l, \ 7294a407ccSDmitry Baryshkov } 7394a407ccSDmitry Baryshkov 7494a407ccSDmitry Baryshkov /* set of registers with offsets different per-PHY */ 7594a407ccSDmitry Baryshkov enum qphy_reg_layout { 7694a407ccSDmitry Baryshkov /* PCS registers */ 7794a407ccSDmitry Baryshkov QPHY_SW_RESET, 7894a407ccSDmitry Baryshkov QPHY_START_CTRL, 7994a407ccSDmitry Baryshkov QPHY_PCS_STATUS, 8094a407ccSDmitry Baryshkov QPHY_PCS_POWER_DOWN_CONTROL, 8194a407ccSDmitry Baryshkov /* Keep last to ensure regs_layout arrays are properly initialized */ 8294a407ccSDmitry Baryshkov QPHY_LAYOUT_SIZE 8394a407ccSDmitry Baryshkov }; 8494a407ccSDmitry Baryshkov 85bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v2_regs_layout[QPHY_LAYOUT_SIZE] = { 86027d16b5SDmitry Baryshkov [QPHY_SW_RESET] = QPHY_V2_PCS_SW_RESET, 87027d16b5SDmitry Baryshkov [QPHY_START_CTRL] = QPHY_V2_PCS_START_CONTROL, 88027d16b5SDmitry Baryshkov [QPHY_PCS_STATUS] = QPHY_V2_PCS_PCI_PCS_STATUS, 89027d16b5SDmitry Baryshkov [QPHY_PCS_POWER_DOWN_CONTROL] = QPHY_V2_PCS_POWER_DOWN_CONTROL, 9094a407ccSDmitry Baryshkov }; 9194a407ccSDmitry Baryshkov 92bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v3_regs_layout[QPHY_LAYOUT_SIZE] = { 93027d16b5SDmitry Baryshkov [QPHY_SW_RESET] = QPHY_V3_PCS_SW_RESET, 94027d16b5SDmitry Baryshkov [QPHY_START_CTRL] = QPHY_V3_PCS_START_CONTROL, 95027d16b5SDmitry Baryshkov [QPHY_PCS_STATUS] = QPHY_V3_PCS_PCS_STATUS, 96027d16b5SDmitry Baryshkov [QPHY_PCS_POWER_DOWN_CONTROL] = QPHY_V3_PCS_POWER_DOWN_CONTROL, 9794a407ccSDmitry Baryshkov }; 9894a407ccSDmitry Baryshkov 9994a407ccSDmitry Baryshkov static const unsigned int sdm845_qhp_pciephy_regs_layout[QPHY_LAYOUT_SIZE] = { 10094a407ccSDmitry Baryshkov [QPHY_SW_RESET] = 0x00, 10194a407ccSDmitry Baryshkov [QPHY_START_CTRL] = 0x08, 10294a407ccSDmitry Baryshkov [QPHY_PCS_STATUS] = 0x2ac, 1036d5b1e20SJohan Hovold [QPHY_PCS_POWER_DOWN_CONTROL] = 0x04, 10494a407ccSDmitry Baryshkov }; 10594a407ccSDmitry Baryshkov 106bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v4_regs_layout[QPHY_LAYOUT_SIZE] = { 107027d16b5SDmitry Baryshkov [QPHY_SW_RESET] = QPHY_V4_PCS_SW_RESET, 108027d16b5SDmitry Baryshkov [QPHY_START_CTRL] = QPHY_V4_PCS_START_CONTROL, 109027d16b5SDmitry Baryshkov [QPHY_PCS_STATUS] = QPHY_V4_PCS_PCS_STATUS1, 110027d16b5SDmitry Baryshkov [QPHY_PCS_POWER_DOWN_CONTROL] = QPHY_V4_PCS_POWER_DOWN_CONTROL, 11194a407ccSDmitry Baryshkov }; 11294a407ccSDmitry Baryshkov 113bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v5_regs_layout[QPHY_LAYOUT_SIZE] = { 114bbe207a1SDmitry Baryshkov [QPHY_SW_RESET] = QPHY_V5_PCS_SW_RESET, 115bbe207a1SDmitry Baryshkov [QPHY_START_CTRL] = QPHY_V5_PCS_START_CONTROL, 116bbe207a1SDmitry Baryshkov [QPHY_PCS_STATUS] = QPHY_V5_PCS_PCS_STATUS1, 117bbe207a1SDmitry Baryshkov [QPHY_PCS_POWER_DOWN_CONTROL] = QPHY_V5_PCS_POWER_DOWN_CONTROL, 118bbe207a1SDmitry Baryshkov }; 119bbe207a1SDmitry Baryshkov 12094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_serdes_tbl[] = { 12194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14), 12294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30), 12394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x0f), 12494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06), 12594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01), 12694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20), 12794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00), 12894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01), 12994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9), 13094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff), 13194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f), 13294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01), 13394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00), 13494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a), 13594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19), 13694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90), 13794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82), 13894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x03), 13994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x55), 14094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0x55), 14194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00), 14294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d), 14394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04), 14494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00), 14594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x08), 14694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16), 14794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x34), 14894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06), 14994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33), 15094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02), 15194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x07), 15294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04), 15394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00), 15494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f), 15594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09), 15694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01), 15794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40), 15894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01), 15994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02), 16094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00), 16194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e), 16294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15), 16394a407ccSDmitry Baryshkov }; 16494a407ccSDmitry Baryshkov 16594a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_tx_tbl[] = { 16694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02), 16794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12), 16894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10), 16994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06), 17094a407ccSDmitry Baryshkov }; 17194a407ccSDmitry Baryshkov 17294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_rx_tbl[] = { 17394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03), 17494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x1c), 17594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 17694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0a), 17794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04), 17894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a), 17994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b), 18094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04), 18194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04), 18294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x00), 18394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80), 18494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40), 18594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71), 18694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40), 18794a407ccSDmitry Baryshkov }; 18894a407ccSDmitry Baryshkov 18994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_pcs_tbl[] = { 19094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04), 19194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00), 19294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01), 19394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00), 19494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20), 19594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00), 19694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01), 19794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73), 19894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0x99), 19994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03), 20094a407ccSDmitry Baryshkov }; 20194a407ccSDmitry Baryshkov 20294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_serdes_tbl[] = { 20394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_PER1, 0x7d), 20494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_PER2, 0x01), 20594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE1_MODE0, 0x0a), 20694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE2_MODE0, 0x05), 20794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE1_MODE1, 0x08), 20894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE2_MODE1, 0x04), 20994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CLKBUFLR_EN, 0x18), 21094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90), 21194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SYS_CLK_CTRL, 0x02), 21294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_BUF_ENABLE, 0x07), 21394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_IVCO, 0x0f), 21494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE0, 0xd4), 21594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE0, 0x14), 21694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE1, 0xaa), 21794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE1, 0x29), 21894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TRIM, 0x0f), 21994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE0, 0x09), 22094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE1, 0x09), 22194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE0, 0x16), 22294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE1, 0x16), 22394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE0, 0x28), 22494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE1, 0x28), 22594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CTRL_BY_PSM, 0x01), 22694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_EN_SEL, 0x08), 22794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_RESETSM_CNTRL, 0x20), 22894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP_EN, 0x42), 22994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE0, 0x68), 23094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE1, 0x53), 23194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE0, 0xab), 23294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE0, 0xaa), 23394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE0, 0x02), 23494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE1, 0x55), 23594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE1, 0x55), 23694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE1, 0x05), 23794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE0, 0xa0), 23894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE1, 0xa0), 23994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE0, 0x24), 24094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE0, 0x02), 24194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE1, 0xb4), 24294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE1, 0x03), 24394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x32), 24494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x01), 24594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x00), 24694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CMN_CONFIG, 0x06), 24794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05), 24894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV_MODE1, 0x08), 24994a407ccSDmitry Baryshkov }; 25094a407ccSDmitry Baryshkov 25194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_tx_tbl[] = { 252079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x02), 253079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x06), 254079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12), 25594a407ccSDmitry Baryshkov }; 25694a407ccSDmitry Baryshkov 25794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_rx_tbl[] = { 258079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c), 259079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x02), 260079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f), 261079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70), 262079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x61), 263079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04), 264079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1e), 265079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0), 266079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00), 267079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x73), 268079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80), 269079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c), 270079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03), 271079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 272079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xf0), 273079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x01), 274079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x2f), 275079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xd3), 276079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x40), 277079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x01), 278079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0x02), 279079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xc8), 280079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x09), 281079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb1), 282079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0x00), 283079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x02), 284079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8), 285079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x09), 286079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1), 287079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04), 28894a407ccSDmitry Baryshkov }; 28994a407ccSDmitry Baryshkov 29094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_pcs_tbl[] = { 29160f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNTRL1, 0x01), 29260f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d), 29360f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_G12S1_TXDEEMPH_M3P5DB, 0x10), 29460f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa), 29560f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 29660f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_DCC_CAL_CONFIG, 0x01), 29760f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x01), 298af664324SDmitry Baryshkov }; 299af664324SDmitry Baryshkov 300af664324SDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_pcs_misc_tbl[] = { 30160f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG2, 0x0d), 30260f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07), 30360f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 30460f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 30560f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 30660f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 30760f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG1, 0x11), 30860f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00), 30960f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58), 31094a407ccSDmitry Baryshkov }; 31194a407ccSDmitry Baryshkov 31294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = { 31394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x18), 31494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CLK_ENABLE1, 0x10), 31594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0xf), 31694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x1), 31794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x0), 31894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff), 31994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x1f), 32094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x6), 32194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0xf), 32294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0), 32394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x1), 32494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x20), 32594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV, 0xa), 32694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_RESETSM_CNTRL, 0x20), 32794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0xa), 32894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0xa), 32994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82), 33094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x3), 33194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x55), 33294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x55), 33394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x0), 33494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0xD), 33594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0xD04), 33694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x33), 33794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x2), 33894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_BUF_ENABLE, 0x1f), 33994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0xb), 34094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16), 34194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28), 34294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x0), 34394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80), 34494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CTRL_BY_PSM, 0x1), 34594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x1), 34694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31), 34794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1), 34894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER1, 0x2), 34994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER2, 0x0), 35094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0x2f), 35194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x19), 35294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19), 35394a407ccSDmitry Baryshkov }; 35494a407ccSDmitry Baryshkov 35594a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = { 35694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45), 35794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x6), 35894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_TX_RES_CODE_LANE_OFFSET, 0x2), 35994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_TX_RCV_DETECT_LVL_2, 0x12), 360f7c5cedbSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_TX_TX_EMP_POST1_LVL, 0x36), 36194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_TX_SLEW_CNTL, 0x0a), 36294a407ccSDmitry Baryshkov }; 36394a407ccSDmitry Baryshkov 36494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = { 36594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_ENABLES, 0x1c), 36694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 36794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x1), 36894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x0), 36994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xdb), 37094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b), 37194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4), 37294a407ccSDmitry Baryshkov }; 37394a407ccSDmitry Baryshkov 37494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = { 3756cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_ENDPOINT_REFCLK_DRIVE, 0x4), 3766cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_OSC_DTCT_ACTIONS, 0x0), 3776cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x40), 3786cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x0), 3796cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x40), 3806cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_PLL_LOCK_CHK_DLY_TIME_AUXCLK_LSB, 0x0), 3816cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x40), 382c1ab64aaSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73), 3836cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_RX_SIGDET_LVL, 0x99), 3846cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_TXDEEMPH_M6DB_V0, 0x15), 3856cad2983SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V2_PCS_TXDEEMPH_M3P5DB_V0, 0xe), 38694a407ccSDmitry Baryshkov }; 38794a407ccSDmitry Baryshkov 388334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_serdes_tbl[] = { 389334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CLKBUFLR_EN, 0x18), 390334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CTRL_BY_PSM, 0x01), 391334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x31), 392334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_IVCO, 0x0f), 393334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TRIM, 0x0f), 394334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CMN_CONFIG, 0x06), 395334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP_EN, 0x42), 396334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_RESETSM_CNTRL, 0x20), 397334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x01), 398334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE_MAP, 0x04), 399334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05), 400334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE_TIMER1, 0xff), 401334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE_TIMER2, 0x3f), 402334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x30), 403334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x21), 404334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE0, 0x82), 405334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE0, 0x03), 406334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE0, 0x355), 407334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE0, 0x35555), 408334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE0, 0x1a), 409334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE0, 0x1a0a), 410334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE0, 0xb), 411334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE0, 0x16), 412334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE0, 0x28), 413334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN1_MODE0, 0x0), 414334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE0, 0x40), 415334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE0, 0x02), 416334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE0, 0x24), 417334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05), 418334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x20), 419334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV, 0xa), 420334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x32), 421334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SYS_CLK_CTRL, 0x02), 422334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_BUF_ENABLE, 0x07), 423334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_EN_SEL, 0x08), 424334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TIMER, 0xa), 425334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x1), 426334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE1, 0x68), 427334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE1, 0x2), 428334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE1, 0x2aa), 429334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE1, 0x2aaab), 430334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90), 431334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE1, 0x34), 432334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE1, 0x3414), 433334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE1, 0x0b), 434334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE1, 0x16), 435334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE1, 0x28), 436334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN1_MODE1, 0x0), 437334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE1, 0x40), 438334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE1, 0x03), 439334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE1, 0xb4), 440334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05), 441334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x0), 442334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV_MODE1, 0x08), 443334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_EP_DIV_MODE0, 0x19), 444334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_EP_DIV_MODE1, 0x28), 445334fad18SRobert Marko QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90), 446334fad18SRobert Marko }; 447334fad18SRobert Marko 448334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_tx_tbl[] = { 449079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x02), 450079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12), 451079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_HIGHZ_DRVR_EN, 0x10), 452079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x06), 453334fad18SRobert Marko }; 454334fad18SRobert Marko 455334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_rx_tbl[] = { 456079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03), 457079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c), 458079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 459079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0xe), 460079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4), 461079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1b), 462079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04), 463079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f), 464079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70), 465079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x73), 466079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80), 467079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0x00), 468079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x02), 469079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8), 470079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x09), 471079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1), 472079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x01), 473079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0x02), 474079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xc8), 475079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x09), 476079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb1), 477079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xf0), 478079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x2), 479079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x2f), 480079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xd3), 481079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x40), 482079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00), 483079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0), 484079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c), 485079328a9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x02), 486334fad18SRobert Marko }; 487334fad18SRobert Marko 488334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_pcs_tbl[] = { 48960f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNTRL2, 0x83), 49060f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNT_VAL_L, 0x9), 49160f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNT_VAL_H_TOL, 0x42), 49260f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_MAN_CODE, 0x40), 49360f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNTRL1, 0x01), 49460f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_H, 0x0), 49560f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x1), 4962584068aSChristian Marangi QMP_PHY_INIT_CFG(QPHY_V4_PCS_G12S1_TXDEEMPH_M3P5DB, 0x10), 4972584068aSChristian Marangi QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_DCC_CAL_CONFIG, 0x01), 4982584068aSChristian Marangi QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa), 4992584068aSChristian Marangi QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d), 5002584068aSChristian Marangi }; 5012584068aSChristian Marangi 5022584068aSChristian Marangi static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_pcs_misc_tbl[] = { 50360f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x0), 50460f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_H, 0x00), 50560f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 50660f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_H, 0x00), 50760f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 50860f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG1, 0x11), 50960f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG2, 0xb), 51060f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07), 51160f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_CONFIG2, 0x52), 51260f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_MODE2_CONFIG2, 0x50), 51360f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_MODE2_CONFIG4, 0x1a), 51460f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_MODE2_CONFIG5, 0x6), 51560f23414SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 516334fad18SRobert Marko }; 517334fad18SRobert Marko 51894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_serdes_tbl[] = { 51994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14), 52094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30), 52194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x007), 52294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06), 52394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01), 52494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20), 52594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00), 52694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01), 52794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9), 52894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff), 52994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f), 53094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01), 53194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00), 53294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a), 53394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19), 53494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90), 53594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82), 53694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02), 53794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea), 53894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab), 53994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00), 54094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d), 54194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04), 54294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00), 54394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06), 54494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16), 54594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36), 54694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_MODE, 0x01), 54794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33), 54894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02), 54994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x06), 55094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04), 55194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00), 55294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f), 55394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09), 55494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01), 55594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40), 55694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01), 55794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02), 55894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00), 55994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e), 56094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15), 56194a407ccSDmitry Baryshkov }; 56294a407ccSDmitry Baryshkov 56394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_tx_tbl[] = { 56494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02), 56594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12), 56694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10), 56794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06), 56894a407ccSDmitry Baryshkov }; 56994a407ccSDmitry Baryshkov 57094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_rx_tbl[] = { 57194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03), 57294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x10), 57394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 57494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e), 57594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04), 57694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a), 57794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b), 57894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04), 57994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04), 58094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x71), 58194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x59), 58294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_01, 0x59), 58394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80), 58494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40), 58594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71), 58694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40), 58794a407ccSDmitry Baryshkov }; 58894a407ccSDmitry Baryshkov 58994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_tbl[] = { 59094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04), 59194a407ccSDmitry Baryshkov 59294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83), 59394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09), 59494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2), 59594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40), 59694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02), 59794a407ccSDmitry Baryshkov 59894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00), 59994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01), 60094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00), 60194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20), 60294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00), 60394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01), 60494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73), 60594a407ccSDmitry Baryshkov 60694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xbb), 60794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03), 60894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG1, 0x0d), 60994a407ccSDmitry Baryshkov 61094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG4, 0x00), 61194a407ccSDmitry Baryshkov }; 61294a407ccSDmitry Baryshkov 61394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_misc_tbl[] = { 61494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_CONFIG2, 0x52), 61594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG2, 0x10), 61694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4, 0x1a), 61794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5, 0x06), 61894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_PCIE_INT_AUX_CLK_CONFIG1, 0x00), 61994a407ccSDmitry Baryshkov }; 62094a407ccSDmitry Baryshkov 62194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_serdes_tbl[] = { 62294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SYSCLK_EN_SEL, 0x27), 62394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_EN_CENTER, 0x01), 62494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_PER1, 0x31), 62594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_PER2, 0x01), 62694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE1, 0xde), 62794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE2, 0x07), 62894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE1_MODE1, 0x4c), 62994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE2_MODE1, 0x06), 63094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BIAS_EN_CKBUFLR_EN, 0x18), 63194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CLK_ENABLE1, 0xb0), 63294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP1_MODE0, 0x8c), 63394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP2_MODE0, 0x20), 63494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP1_MODE1, 0x14), 63594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP2_MODE1, 0x34), 63694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CP_CTRL_MODE0, 0x06), 63794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CP_CTRL_MODE1, 0x06), 63894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_RCTRL_MODE0, 0x16), 63994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_RCTRL_MODE1, 0x16), 64094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_CCTRL_MODE0, 0x36), 64194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_CCTRL_MODE1, 0x36), 64294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_RESTRIM_CTRL2, 0x05), 64394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP_EN, 0x42), 64494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DEC_START_MODE0, 0x82), 64594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DEC_START_MODE1, 0x68), 64694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START1_MODE0, 0x55), 64794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START2_MODE0, 0x55), 64894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START3_MODE0, 0x03), 64994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START1_MODE1, 0xab), 65094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START2_MODE1, 0xaa), 65194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START3_MODE1, 0x02), 65294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_INTEGLOOP_GAIN0_MODE0, 0x3f), 65394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_INTEGLOOP_GAIN0_MODE1, 0x3f), 65494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VCO_TUNE_MAP, 0x10), 65594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CLK_SELECT, 0x04), 65694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_HSCLK_SEL1, 0x30), 65794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORECLK_DIV, 0x04), 65894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORE_CLK_EN, 0x73), 65994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CMN_CONFIG, 0x0c), 66094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SVS_MODE_CLK_SEL, 0x15), 66194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORECLK_DIV_MODE1, 0x04), 66294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CMN_MODE, 0x01), 66394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VREGCLK_DIV1, 0x22), 66494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VREGCLK_DIV2, 0x00), 66594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BGV_TRIM, 0x20), 66694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BG_CTRL, 0x07), 66794a407ccSDmitry Baryshkov }; 66894a407ccSDmitry Baryshkov 66994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_tx_tbl[] = { 67094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL0, 0x00), 67194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_TAP_EN, 0x0d), 67294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_TX_BAND_MODE, 0x01), 67394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_LANE_MODE, 0x1a), 67494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PARALLEL_RATE, 0x2f), 67594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE0, 0x09), 67694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE1, 0x09), 67794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE2, 0x1b), 67894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PREAMP_CTRL_MODE1, 0x01), 67994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PREAMP_CTRL_MODE2, 0x07), 68094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE0, 0x31), 68194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE1, 0x31), 68294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE2, 0x03), 68394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_THRESH_DFE, 0x02), 68494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CGA_THRESH_DFE, 0x00), 68594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXENGINE_EN0, 0x12), 68694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_TRAIN_TIME, 0x25), 68794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_DFE_OVRLP_TIME, 0x00), 68894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_REFRESH_TIME, 0x05), 68994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_ENABLE_TIME, 0x01), 69094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_VGA_GAIN, 0x26), 69194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_GAIN, 0x12), 69294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EQ_GAIN, 0x04), 69394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_OFFSET_GAIN, 0x04), 69494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PRE_GAIN, 0x09), 69594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EQ_INTVAL, 0x15), 69694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EDAC_INITVAL, 0x28), 69794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_INITB0, 0x7f), 69894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_INITB1, 0x07), 69994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RCVRDONE_THRESH1, 0x04), 70094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_CTRL, 0x70), 70194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE0, 0x8b), 70294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE1, 0x08), 70394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE2, 0x0a), 70494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE0, 0x03), 70594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE1, 0x04), 70694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE2, 0x04), 70794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_CONFIG, 0x0c), 70894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_BAND, 0x02), 70994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE0, 0x5c), 71094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE1, 0x3e), 71194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE2, 0x3f), 71294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_ENABLES, 0x01), 71394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_CNTRL, 0xa0), 71494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_DEGLITCH_CNTRL, 0x08), 71594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DCC_GAIN, 0x01), 71694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_EN_SIGNAL, 0xc3), 71794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PSM_RX_EN_CAL, 0x00), 71894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_MISC_CNTRL0, 0xbc), 71994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_TS0_TIMER, 0x7f), 72094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DLL_HIGHDATARATE, 0x15), 72194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL1, 0x0c), 72294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL2, 0x0f), 72394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RESETCODE_OFFSET, 0x04), 72494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_VGA_INITVAL, 0x20), 72594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RSM_START, 0x01), 72694a407ccSDmitry Baryshkov }; 72794a407ccSDmitry Baryshkov 72894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_rx_tbl[] = { 72994a407ccSDmitry Baryshkov }; 73094a407ccSDmitry Baryshkov 73194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_pcs_tbl[] = { 73294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_POWER_STATE_CONFIG, 0x3f), 73394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_PCS_TX_RX_CONFIG, 0x50), 73494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_MAIN_V0_M3P5DB, 0x19), 73594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_POST_V0_M3P5DB, 0x07), 73694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_MAIN_V0_M6DB, 0x17), 73794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_POST_V0_M6DB, 0x09), 73894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_POWER_STATE_CONFIG5, 0x9f), 73994a407ccSDmitry Baryshkov }; 74094a407ccSDmitry Baryshkov 74194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_serdes_tbl[] = { 74294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08), 74394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34), 74494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08), 74594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f), 74694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x42), 74794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24), 74894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x03), 74994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0xb4), 75094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02), 75194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11), 75294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82), 75394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x03), 75494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x55), 75594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x55), 75694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1a), 75794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0a), 75894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x68), 75994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02), 76094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xaa), 76194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab), 76294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x34), 76394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x14), 76494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01), 76594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06), 76694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16), 76794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36), 76894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06), 76994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16), 77094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36), 77194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e), 77294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca), 77394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18), 77494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2), 77594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x07), 77694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01), 77794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31), 77894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01), 77994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde), 78094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07), 78194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x4c), 78294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x06), 78394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90), 78494a407ccSDmitry Baryshkov }; 78594a407ccSDmitry Baryshkov 78694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_tx_tbl[] = { 78794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12), 78894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x5), 78994a407ccSDmitry Baryshkov }; 79094a407ccSDmitry Baryshkov 79194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_rx_tbl[] = { 79294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03), 79394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c), 79494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 79594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x07), 79694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x6e), 79794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x6e), 79894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x4a), 79994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04), 80094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f), 80194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70), 80294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17), 80394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54), 80494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x37), 80594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xd4), 80694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x54), 80794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xdb), 80894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x39), 80994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0x31), 81094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x24), 81194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xe4), 81294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xec), 81394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x39), 81494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x36), 81594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x7f), 81694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0xff), 81794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff), 81894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xdb), 81994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x75), 82094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00), 82194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0), 82294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0xa0), 82394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RCLK_AUXDATA_SEL, 0xc0), 82494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c), 82594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x05), 82694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c), 82794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x03), 82894a407ccSDmitry Baryshkov }; 82994a407ccSDmitry Baryshkov 83094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_pcs_tbl[] = { 83194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 83294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa), 83394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_RATE_SLEW_CNTRL1, 0x0b), 83494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d), 83594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x01), 83694a407ccSDmitry Baryshkov }; 83794a407ccSDmitry Baryshkov 83894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_pcs_misc_tbl[] = { 83994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 84094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 84194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 84294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00), 84394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00), 84494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58), 84594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 84694a407ccSDmitry Baryshkov }; 84794a407ccSDmitry Baryshkov 848d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_pcie_serdes_tbl[] = { 849d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_EN_CENTER, 0x00), 850d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31), 851d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01), 852d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde), 853d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07), 854d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x4c), 855d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x06), 856d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90), 857d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f), 858d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06), 859d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06), 860d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16), 861d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16), 862d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36), 863d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36), 864d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08), 865d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x42), 866d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a), 867d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a), 868d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14), 869d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34), 870d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82), 871d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x68), 872d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55), 873d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55), 874d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03), 875d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0xab), 876d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0xaa), 877d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x02), 878d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02), 879d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE0, 0x24), 880d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE1, 0xb4), 881d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE2_MODE1, 0x03), 882d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34), 883d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x01), 884d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x08), 885d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xb9), 886d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e), 887d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0x94), 888d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18), 889d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_HSCLK_SEL, 0x11), 890d0a846baSJohan Hovold }; 891d0a846baSJohan Hovold 892d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_rc_serdes_tbl[] = { 893d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_BUF_ENABLE, 0x07), 894d0a846baSJohan Hovold }; 895d0a846baSJohan Hovold 896d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl[] = { 897d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14), 898d0a846baSJohan Hovold }; 899d0a846baSJohan Hovold 9006c37a02bSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x4_pcie_serdes_4ln_tbl[] = { 9016c37a02bSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x1c), 9026c37a02bSJohan Hovold }; 9036c37a02bSJohan Hovold 904d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_tx_tbl[] = { 905d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x20), 906d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x75), 907d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f), 908d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x1d), 909d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c), 910d0a846baSJohan Hovold }; 911d0a846baSJohan Hovold 912d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_rx_tbl[] = { 913d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x7f), 914d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0xff), 915d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbf), 916d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3f), 917d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xd8), 918d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xdc), 919d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xdc), 920d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0x5c), 921d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x34), 922d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa6), 923d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_TX_ADAPT_POST_THRESH, 0xf0), 924d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x34), 925d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x07), 926d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00), 927d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08), 928d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08), 929d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0), 930d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 931d0a846baSJohan Hovold }; 932d0a846baSJohan Hovold 933d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_pcs_tbl[] = { 934d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x05), 935d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0x77), 936d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_RATE_SLEW_CNTRL1, 0x0b), 937d0a846baSJohan Hovold }; 938d0a846baSJohan Hovold 939d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_pcs_misc_tbl[] = { 940d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 941d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00), 942d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_EQ_CONFIG2, 0x0f), 943d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 944d0a846baSJohan Hovold }; 945d0a846baSJohan Hovold 946d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_tx_tbl[] = { 947d0a846baSJohan Hovold QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x02, 1), 948d0a846baSJohan Hovold QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x04, 2), 949d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xd5), 950d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f), 951d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x11), 952d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c), 953d0a846baSJohan Hovold }; 954d0a846baSJohan Hovold 955d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_rx_tbl[] = { 956d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x7f), 957d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0xff), 958d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0x7f), 959d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x34), 960d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xd8), 961d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xdc), 962d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xdc), 963d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0x5c), 964d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x34), 965d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa6), 966d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x34), 967d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f), 968d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00), 969d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08), 970d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08), 971d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0), 972d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 973d0a846baSJohan Hovold }; 974d0a846baSJohan Hovold 975d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_pcs_tbl[] = { 976d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x05), 977d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0x88), 978d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_RATE_SLEW_CNTRL1, 0x0b), 979d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_EQ_CONFIG3, 0x0f), 980d0a846baSJohan Hovold }; 981d0a846baSJohan Hovold 982d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl[] = { 983d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_POWER_STATE_CONFIG2, 0x1d), 984d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_POWER_STATE_CONFIG4, 0x07), 985d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 986d0a846baSJohan Hovold QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 987d0a846baSJohan Hovold }; 988d0a846baSJohan Hovold 98994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_serdes_tbl[] = { 99094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08), 99194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34), 99294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08), 99394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f), 99494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x42), 99594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24), 99694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x03), 99794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0xb4), 99894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02), 99994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11), 100094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82), 100194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x03), 100294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x55), 100394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x55), 100494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1a), 100594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0a), 100694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x68), 100794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02), 100894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xaa), 100994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab), 101094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x34), 101194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x14), 101294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01), 101394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06), 101494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16), 101594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36), 101694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06), 101794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16), 101894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36), 101994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e), 102094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca), 102194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18), 102294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2), 102394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01), 102494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31), 102594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01), 102694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde), 102794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07), 102894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x4c), 102994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x06), 103094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90), 103194a407ccSDmitry Baryshkov }; 103294a407ccSDmitry Baryshkov 103394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_serdes_tbl[] = { 103494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x07), 103594a407ccSDmitry Baryshkov }; 103694a407ccSDmitry Baryshkov 103794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_tx_tbl[] = { 103894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12), 103994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x35), 104094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x11), 104194a407ccSDmitry Baryshkov }; 104294a407ccSDmitry Baryshkov 104394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_rx_tbl[] = { 104494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c), 104594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x03), 104694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1b), 104794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00), 104894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0), 104994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0x30), 105094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x04), 105194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x07), 105294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f), 105394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70), 105494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e), 105594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a), 105694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0f), 105794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03), 105894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c), 105994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x1e), 106094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17), 106194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xd4), 106294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x54), 106394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xdb), 106494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x3b), 106594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0x31), 106694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x24), 106794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff), 106894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f), 106994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c), 107094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xe4), 107194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xec), 107294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x3b), 107394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x36), 107494a407ccSDmitry Baryshkov }; 107594a407ccSDmitry Baryshkov 107694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_rx_tbl[] = { 107794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RCLK_AUXDATA_SEL, 0x00), 107894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x00), 107994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04), 108094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x3f), 108194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x14), 108294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x30), 108394a407ccSDmitry Baryshkov }; 108494a407ccSDmitry Baryshkov 108594a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_pcs_tbl[] = { 108694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 108794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0x77), 108894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_RATE_SLEW_CNTRL1, 0x0b), 108994a407ccSDmitry Baryshkov }; 109094a407ccSDmitry Baryshkov 109194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_pcs_tbl[] = { 109294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d), 109394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x12), 109494a407ccSDmitry Baryshkov }; 109594a407ccSDmitry Baryshkov 109694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_pcs_misc_tbl[] = { 109794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 109894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 109994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01), 110094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P6_P7_PRE, 0x33), 110194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00), 110294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58), 110394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 110494a407ccSDmitry Baryshkov }; 110594a407ccSDmitry Baryshkov 110694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_pcs_misc_tbl[] = { 110794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00), 110894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG2, 0x0f), 110994a407ccSDmitry Baryshkov }; 111094a407ccSDmitry Baryshkov 111194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_tx_tbl[] = { 111294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x20), 111394a407ccSDmitry Baryshkov }; 111494a407ccSDmitry Baryshkov 111594a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_rx_tbl[] = { 111694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x04), 111794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xbf), 111894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x15), 111994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 112094a407ccSDmitry Baryshkov }; 112194a407ccSDmitry Baryshkov 112294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_pcs_tbl[] = { 112394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x05), 112494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG2, 0x0f), 112594a407ccSDmitry Baryshkov }; 112694a407ccSDmitry Baryshkov 112794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_pcs_misc_tbl[] = { 112894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG2, 0x0d), 112994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07), 113094a407ccSDmitry Baryshkov }; 113194a407ccSDmitry Baryshkov 113294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_serdes_tbl[] = { 113394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN, 0x18), 113494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f), 1135458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x46), 1136458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_CFG, 0x04), 1137458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02), 1138458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x12), 1139458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_HS_SWITCH_SEL, 0x00), 1140458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE0, 0x05), 1141458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x04), 1142458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MISC1, 0x88), 1143458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MISC2, 0x03), 1144458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MODE, 0x17), 1145458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_DC_LEVEL_CTRL, 0x0b), 1146458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x22), 1147458aa820SManivannan Sadhasivam }; 1148458aa820SManivannan Sadhasivam 1149364c748dSManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rc_serdes_tbl[] = { 1150364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01), 1151364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31), 1152364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01), 1153364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xce), 1154364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x0b), 1155364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x97), 1156364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x0c), 1157364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90), 1158364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_EP_DIV_MODE0, 0x0a), 1159364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_EP_DIV_MODE1, 0x10), 1160364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06), 1161364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06), 1162364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16), 1163364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16), 1164364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36), 1165364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36), 1166364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08), 1167364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x04), 1168364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x0d), 1169364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x0a), 1170364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x1a), 1171364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0xc3), 1172364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0xd0), 1173364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x05), 1174364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0x55), 1175364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0x55), 1176364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x05), 1177364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34), 1178364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca), 1179364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e), 1180364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xd8), 1181364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x20), 1182364c748dSManivannan Sadhasivam }; 1183364c748dSManivannan Sadhasivam 1184458aa820SManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_ep_serdes_tbl[] = { 1185458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_BG_TIMER, 0x02), 1186458aa820SManivannan Sadhasivam QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYS_CLK_CTRL, 0x07), 118794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x0a), 118894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x0a), 118994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x19), 119094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x19), 119194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x03), 119294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x03), 119394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x00), 119494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x7f), 119594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x02), 119694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0xff), 119794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x04), 119894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x4b), 119994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x50), 120094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x00), 120194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE0, 0xfb), 120294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE0, 0x01), 120394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE1, 0xfb), 120494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE1, 0x01), 120594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_CONFIG, 0x04), 120694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0x56), 120794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1d), 120894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0x4b), 120994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x1f), 121094a407ccSDmitry Baryshkov }; 121194a407ccSDmitry Baryshkov 121294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_tx_tbl[] = { 121394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_1, 0x05), 121494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_2, 0xf6), 121594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_3, 0x13), 121694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_VMODE_CTRL1, 0x00), 121794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_PI_QEC_CTRL, 0x00), 121894a407ccSDmitry Baryshkov }; 121994a407ccSDmitry Baryshkov 122094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rx_tbl[] = { 122194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_FO_GAIN_RATE2, 0x0c), 122294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_UCDR_PI_CONTROLS, 0x16), 122394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_AUX_DATA_TCOARSE_TFINE, 0x7f), 122494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_3, 0x55), 122594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_DAC_ENABLE1, 0x0c), 122694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_DAC_ENABLE2, 0x00), 122794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_VGA_CAL_CNTRL2, 0x08), 122894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x27), 122994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B1, 0x1a), 123094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B2, 0x5a), 123194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B3, 0x09), 123294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B4, 0x37), 123394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B0, 0xbd), 123494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B1, 0xf9), 123594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B2, 0xbf), 123694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B3, 0xce), 123794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B4, 0x62), 123894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B0, 0xbf), 123994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B1, 0x7d), 124094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B2, 0xbf), 124194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B3, 0xcf), 124294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B4, 0xd6), 124394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_PHPRE_CTRL, 0xa0), 124494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 124594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_MARG_COARSE_CTRL2, 0x12), 124694a407ccSDmitry Baryshkov }; 124794a407ccSDmitry Baryshkov 124894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_pcs_tbl[] = { 124994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_RX_SIGDET_LVL, 0x77), 125094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG2, 0x01), 125194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG4, 0x16), 125294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG5, 0x02), 125394a407ccSDmitry Baryshkov }; 125494a407ccSDmitry Baryshkov 125594a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_pcs_misc_tbl[] = { 125694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_EQ_CONFIG1, 0x17), 125794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G3_RXEQEVAL_TIME, 0x13), 125894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_RXEQEVAL_TIME, 0x13), 125994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG2, 0x01), 126094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02), 1261458aa820SManivannan Sadhasivam }; 1262458aa820SManivannan Sadhasivam 1263364c748dSManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rc_pcs_misc_tbl[] = { 1264364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 1265364c748dSManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 1266364c748dSManivannan Sadhasivam }; 1267364c748dSManivannan Sadhasivam 1268458aa820SManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_ep_pcs_misc_tbl[] = { 126994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00), 127094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00), 127194a407ccSDmitry Baryshkov }; 127294a407ccSDmitry Baryshkov 1273*92bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_serdes_tbl[] = { 1274*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_BG_TIMER, 0x02), 1275*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14), 1276*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYS_CLK_CTRL, 0x07), 1277*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f), 1278*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x27), 1279*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x0a), 1280*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x17), 1281*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x19), 1282*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x00), 1283*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x03), 1284*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x00), 1285*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x46), 1286*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_CFG, 0x04), 1287*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0xff), 1288*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x04), 1289*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0xff), 1290*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x09), 1291*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x19), 1292*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x28), 1293*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE0, 0xfb), 1294*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE0, 0x01), 1295*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE1, 0xfb), 1296*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE1, 0x01), 1297*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02), 1298*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x12), 1299*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00), 1300*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE0, 0x0a), 1301*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x04), 1302*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x60), 1303*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MISC1, 0x88), 1304*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_CONFIG, 0x06), 1305*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE, 0x14), 1306*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE_CONTD, 0x00), 1307*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_DC_LEVEL_CTRL, 0x0f), 1308*92bd868fSRohit Agarwal }; 1309*92bd868fSRohit Agarwal 1310*92bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_tx_tbl[] = { 1311*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_1, 0x05), 1312*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_2, 0xf6), 1313*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_3, 0x00), 1314*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_VMODE_CTRL1, 0x00), 1315*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_PI_QEC_CTRL, 0x00), 1316*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1a), 1317*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_RX, 0x0c), 1318*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RCV_DETECT_LVL_2, 0x12), 1319*92bd868fSRohit Agarwal }; 1320*92bd868fSRohit Agarwal 1321*92bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_rx_tbl[] = { 1322*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_0_1, 0x3f), 1323*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_1, 0x06), 1324*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_2, 0x06), 1325*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_PRE_THRESH1, 0x3e), 1326*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_PRE_THRESH2, 0x1e), 1327*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH1, 0x00), 1328*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH2, 0x1f), 1329*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_MAIN_THRESH1, 0x02), 1330*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_MAIN_THRESH2, 0x1d), 1331*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_CNTRL1, 0x44), 1332*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_CNTRL2, 0x00), 1333*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL2, 0x00), 1334*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a), 1335*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x74), 1336*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x00), 1337*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_SIGDET_ENABLES, 0x1c), 1338*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_SIGDET_CNTRL, 0x03), 1339*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_SIGDET_DEGLITCH_CNTRL, 0x14), 1340*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B0, 0x04), 1341*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B1, 0xcc), 1342*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B2, 0x12), 1343*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B3, 0xcc), 1344*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B4, 0x64), 1345*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B5, 0x4a), 1346*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B6, 0x29), 1347*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_PHPRE_CTRL, 0x20), 1348*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DCC_CTRL1, 0x0c), 1349*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE210, 0x1f), 1350*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE3, 0x1f), 1351*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE210, 0x1f), 1352*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE3, 0x1f), 1353*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE210, 0x1f), 1354*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE3, 0x1f), 1355*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH4_RATE3, 0x1f), 1356*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH5_RATE3, 0x1f), 1357*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH6_RATE3, 0x1f), 1358*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE2, 0x0c), 1359*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE3, 0x0a), 1360*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_PI_CONTROLS, 0x16), 1361*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_2_3, 0x37), 1362*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_IDAC_SAOFFSET, 0x10), 1363*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_3, 0x05), 1364*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE1, 0x00), 1365*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE2, 0x00), 1366*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_MAN_VAL, 0x0a), 1367*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_GM_CAL, 0x0f), 1368*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0b), 1369*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B0, 0xc5), 1370*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B1, 0xac), 1371*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B2, 0xb6), 1372*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B3, 0xc0), 1373*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B4, 0x07), 1374*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B5, 0xfb), 1375*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B6, 0x0d), 1376*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B0, 0xc5), 1377*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B1, 0xee), 1378*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B2, 0xbf), 1379*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B3, 0xa0), 1380*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B4, 0x81), 1381*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B5, 0xde), 1382*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B6, 0x7f), 1383*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_EN_TIMER, 0x28), 1384*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 1385*92bd868fSRohit Agarwal }; 1386*92bd868fSRohit Agarwal 1387*92bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_pcs_tbl[] = { 1388*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e), 1389*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0xaa), 1390*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG2, 0x0d), 1391*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16), 1392*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22), 1393*92bd868fSRohit Agarwal }; 1394*92bd868fSRohit Agarwal 1395*92bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_pcs_misc_tbl[] = { 1396*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_EQ_CONFIG1, 0x16), 1397*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_RX_MARGINING_CONFIG3, 0x28), 1398*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_MODE2_CONFIG5, 0x08), 1399*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG2, 0x0d), 1400*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02), 1401*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN, 0x2e), 1402*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00), 1403*92bd868fSRohit Agarwal QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00), 1404*92bd868fSRohit Agarwal }; 1405*92bd868fSRohit Agarwal 1406c99649c3SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3_pcie_serdes_tbl[] = { 140794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08), 140894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34), 140994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x08), 141094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f), 141194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x42), 141294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE0, 0x24), 141394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE2_MODE1, 0x03), 141494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE1, 0xb4), 141594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02), 141694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_HSCLK_SEL, 0x11), 141794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82), 141894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03), 141994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55), 142094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55), 142194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a), 142294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a), 142394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x68), 142494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x02), 142594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0xaa), 142694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0xab), 142794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34), 142894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14), 142994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x01), 143094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06), 143194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16), 143294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36), 143394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06), 143494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16), 143594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36), 143694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e), 143794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca), 143894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18), 143994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2), 144094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_EN_CENTER, 0x01), 144194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31), 144294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01), 144394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde), 144494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07), 144594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x4c), 144694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x06), 144794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90), 144894a407ccSDmitry Baryshkov }; 144994a407ccSDmitry Baryshkov 1450d8de49e9SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_rc_serdes_tbl[] = { 1451d8de49e9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_BUF_ENABLE, 0x07), 1452d8de49e9SDmitry Baryshkov }; 1453d8de49e9SDmitry Baryshkov 145494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_tx_tbl[] = { 145594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x20), 145694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x75), 145794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f), 145894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x16), 145994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x04), 146094a407ccSDmitry Baryshkov }; 146194a407ccSDmitry Baryshkov 1462c99649c3SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3_pcie_rx_tbl[] = { 146394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x7f), 146494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0xff), 146594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xd8), 146694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xdc), 146794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xdc), 146894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0x5c), 146994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x34), 147094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa6), 147194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x34), 147294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00), 147394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08), 147494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08), 147594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 147694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_TX_ADAPT_POST_THRESH, 0xf0), 1477d8de49e9SDmitry Baryshkov }; 1478d8de49e9SDmitry Baryshkov 1479d8de49e9SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_rc_rx_tbl[] = { 1480d8de49e9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbf), 1481d8de49e9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3f), 1482d8de49e9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH4, 0x38), 1483d8de49e9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x07), 1484d8de49e9SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0), 148594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL4, 0x07), 148694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x09), 148794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x05), 148894a407ccSDmitry Baryshkov }; 148994a407ccSDmitry Baryshkov 1490c99649c3SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3_pcie_pcs_tbl[] = { 149194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0x77), 149294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_RATE_SLEW_CNTRL1, 0x0b), 149394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x05), 149494a407ccSDmitry Baryshkov }; 149594a407ccSDmitry Baryshkov 149694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_pcs_misc_tbl[] = { 149794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 149894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00), 149994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_EQ_CONFIG2, 0x0f), 150094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 150194a407ccSDmitry Baryshkov }; 150294a407ccSDmitry Baryshkov 1503c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x1_pcie_tx_tbl[] = { 1504c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x20), 1505c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x75), 1506c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f), 1507c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x1d), 1508c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c), 1509c7005273SDmitry Baryshkov }; 1510c7005273SDmitry Baryshkov 1511c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x1_pcie_rc_rx_tbl[] = { 1512c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbf), 1513c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3f), 1514c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x07), 1515c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0), 1516c7005273SDmitry Baryshkov }; 1517c7005273SDmitry Baryshkov 1518c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x2_pcie_rc_rx_tbl[] = { 1519c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0x7f), 1520c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x34), 1521c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f), 1522c7005273SDmitry Baryshkov }; 1523c7005273SDmitry Baryshkov 1524c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x2_pcie_tx_tbl[] = { 1525c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x02, 1), 1526c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x04, 2), 1527c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xd5), 1528c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f), 1529c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x1d), 1530c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c), 1531c7005273SDmitry Baryshkov }; 1532c7005273SDmitry Baryshkov 1533c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x2_pcie_rc_pcs_tbl[] = { 1534c7005273SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_PCS_EQ_CONFIG2, 0x0f), 1535c7005273SDmitry Baryshkov }; 1536c7005273SDmitry Baryshkov 153794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_serdes_tbl[] = { 1538f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14), 1539f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f), 1540f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x46), 1541f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_CFG, 0x04), 1542f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02), 1543f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x12), 1544f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00), 1545f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE0, 0x0a), 1546f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x04), 1547f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MISC1, 0x88), 1548f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_CONFIG, 0x06), 1549f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE, 0x14), 1550f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_DC_LEVEL_CTRL, 0x0f), 1551f5682f13SDmitry Baryshkov }; 1552f5682f13SDmitry Baryshkov 1553f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_rc_serdes_tbl[] = { 155494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31), 155594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01), 155694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde), 155794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07), 155894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x97), 155994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x0c), 156094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90), 156194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06), 156294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06), 156394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16), 156494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16), 156594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36), 156694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36), 156794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08), 156894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a), 156994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a), 157094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14), 157194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34), 157294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82), 157394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0xd0), 157494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55), 157594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55), 157694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03), 157794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0x55), 157894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0x55), 157994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x05), 158094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34), 158194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x20), 158294a407ccSDmitry Baryshkov }; 158394a407ccSDmitry Baryshkov 158494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_tx_tbl[] = { 158594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_1, 0x05), 158694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_2, 0xf6), 158794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1a), 158894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_RX, 0x0c), 158994a407ccSDmitry Baryshkov }; 159094a407ccSDmitry Baryshkov 159194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_rx_tbl[] = { 159294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_PI_CONTROLS, 0x16), 159394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 159494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B1, 0xcc), 159594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B2, 0x12), 159694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B3, 0xcc), 159794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B5, 0x4a), 159894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B6, 0x29), 159994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B0, 0xc5), 160094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B1, 0xad), 160194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B2, 0xb6), 160294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B3, 0xc0), 160394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B4, 0x1f), 160494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B5, 0xfb), 160594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B6, 0x0f), 160694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B0, 0xc7), 160794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B1, 0xef), 160894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B2, 0xbf), 160994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B3, 0xa0), 161094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B4, 0x81), 161194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B5, 0xde), 161294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B6, 0x7f), 161394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_PHPRE_CTRL, 0x20), 161494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_0_1, 0x3f), 161594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_2_3, 0x37), 161694a407ccSDmitry Baryshkov 161794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_3, 0x05), 161894a407ccSDmitry Baryshkov 161994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE3, 0x1f), 162094a407ccSDmitry Baryshkov 162194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE3, 0x1f), 162294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE3, 0x1f), 162394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH4_RATE3, 0x1f), 162494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH5_RATE3, 0x1f), 162594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH6_RATE3, 0x1f), 162694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE210, 0x1f), 162794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE210, 0x1f), 162894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE210, 0x1f), 162994a407ccSDmitry Baryshkov 163094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE2, 0x0c), 163194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE3, 0x0a), 163294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_MAN_VAL, 0x0a), 163394a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0b), 163494a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_IDAC_SAOFFSET, 0x10), 163594a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE1, 0x00), 163694a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_GM_CAL, 0x0f), 163794a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH1, 0x00), 163894a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH2, 0x1f), 163994a407ccSDmitry Baryshkov }; 164094a407ccSDmitry Baryshkov 164194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_pcs_tbl[] = { 1642883aebf6SManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16), 1643883aebf6SManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22), 1644883aebf6SManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e), 1645883aebf6SManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0x99), 164694a407ccSDmitry Baryshkov }; 164794a407ccSDmitry Baryshkov 164894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_pcs_misc_tbl[] = { 164994a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02), 165094a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_EQ_CONFIG1, 0x16), 165194a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_RX_MARGINING_CONFIG3, 0x28), 165294a407ccSDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN, 0x2e), 165394a407ccSDmitry Baryshkov }; 165494a407ccSDmitry Baryshkov 1655f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_rc_pcs_misc_tbl[] = { 1656f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 1657f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 16589ddcd920SManivannan Sadhasivam QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_PRESET_P10_POST, 0x00), 1659f5682f13SDmitry Baryshkov }; 1660f5682f13SDmitry Baryshkov 1661f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_ep_serdes_tbl[] = { 1662f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_BG_TIMER, 0x02), 1663f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYS_CLK_CTRL, 0x07), 1664f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x27), 1665f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x0a), 1666f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x17), 1667f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x19), 1668f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x00), 1669f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x03), 1670f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x00), 1671f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0xff), 1672f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x04), 1673f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0xff), 1674f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x09), 1675f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x19), 1676f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x28), 1677f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE0, 0xfb), 1678f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE0, 0x01), 1679f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE1, 0xfb), 1680f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE1, 0x01), 1681f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x60), 1682f5682f13SDmitry Baryshkov }; 1683f5682f13SDmitry Baryshkov 1684f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_ep_pcs_misc_tbl[] = { 1685f5682f13SDmitry Baryshkov QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_MODE2_CONFIG5, 0x08), 1686f5682f13SDmitry Baryshkov }; 1687f5682f13SDmitry Baryshkov 1688269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_serdes_tbl[] = { 1689269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_EN_CENTER, 0x01), 1690269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER1, 0x62), 1691269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER2, 0x02), 1692269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE0, 0xf8), 1693269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE0, 0x01), 1694269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE1, 0x93), 1695269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE1, 0x01), 1696269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_ENABLE1, 0x90), 1697269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYS_CLK_CTRL, 0x82), 1698269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x07), 1699269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x02), 1700269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x02), 1701269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x16), 1702269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x16), 1703269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x36), 1704269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x36), 1705269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYSCLK_EN_SEL, 0x08), 1706269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_BG_TIMER, 0x0a), 1707269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x42), 1708269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x04), 1709269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x0d), 1710269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x0a), 1711269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x1a), 1712269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41), 1713269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x34), 1714269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE0, 0xab), 1715269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE0, 0xaa), 1716269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE0, 0x01), 1717269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE1, 0x55), 1718269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE1, 0x55), 1719269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE1, 0x01), 1720269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x14), 1721269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_SELECT, 0x34), 1722269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x01), 1723269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORECLK_DIV_MODE1, 0x04), 1724269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_CONFIG_1, 0x16), 1725269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_ADDITIONAL_MISC_3, 0x0f), 1726269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORE_CLK_EN, 0xa0), 1727269b70e8SAbel Vesa }; 1728269b70e8SAbel Vesa 1729269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_tx_tbl[] = { 1730269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_TX_LANE_MODE_1, 0x15), 1731269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_TX_LANE_MODE_4, 0x3f), 1732269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_TX_PI_QEC_CTRL, 0x02), 1733269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_TX_RES_CODE_LANE_OFFSET_RX, 0x06), 1734269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_TX_RES_CODE_LANE_OFFSET_TX, 0x18), 1735269b70e8SAbel Vesa }; 1736269b70e8SAbel Vesa 1737269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_rx_tbl[] = { 1738269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38), 1739269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_GM_CAL, 0x11), 1740269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH, 0xbf), 1741269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH2, 0xbf), 1742269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH3, 0xb7), 1743269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH4, 0xea), 1744269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_LOW, 0x3f), 1745269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH, 0x5c), 1746269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH2, 0x9c), 1747269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH3, 0x1a), 1748269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH4, 0x89), 1749269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_LOW, 0xdc), 1750269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH, 0x94), 1751269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH2, 0x5b), 1752269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH3, 0x1a), 1753269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH4, 0x89), 1754269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_TX_ADAPT_POST_THRESH, 0xf0), 1755269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_FO_GAIN, 0x09), 1756269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_SO_GAIN, 0x05), 1757269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_SB2_THRESH1, 0x08), 1758269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_SB2_THRESH2, 0x08), 1759269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_VGA_CAL_CNTRL2, 0x0f), 1760269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_SIDGET_ENABLES, 0x1c), 1761269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_IDAC_TSETTLE_LOW, 0x07), 1762269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_RX_SIGDET_CAL_TRIM, 0x08), 1763269b70e8SAbel Vesa }; 1764269b70e8SAbel Vesa 1765269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_pcs_tbl[] = { 1766269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_PCS_REFGEN_REQ_CONFIG1, 0x05), 1767269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_PCS_RX_SIGDET_LVL, 0x77), 1768269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_PCS_RATE_SLEW_CNTRL1, 0x0b), 1769269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_PCS_EQ_CONFIG2, 0x0f), 1770269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_PCS_PCS_TX_RX_CONFIG, 0x8c), 1771269b70e8SAbel Vesa }; 1772269b70e8SAbel Vesa 1773269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_pcs_misc_tbl[] = { 1774269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_POWER_STATE_CONFIG2, 0x1d), 1775269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_POWER_STATE_CONFIG4, 0x07), 1776269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1), 1777269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00), 1778269b70e8SAbel Vesa }; 1779269b70e8SAbel Vesa 1780269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_serdes_tbl[] = { 1781269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE1, 0x26), 1782269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE1, 0x03), 1783269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x06), 1784269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x16), 1785269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x36), 1786269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORECLK_DIV_MODE1, 0x04), 1787269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x0a), 1788269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x1a), 1789269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x68), 1790269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE1, 0xab), 1791269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE1, 0xaa), 1792269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE1, 0x02), 1793269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x12), 1794269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE0, 0xf8), 1795269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE0, 0x01), 1796269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x06), 1797269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x16), 1798269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x36), 1799269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CORE_CLK_DIV_MODE0, 0x0a), 1800269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x04), 1801269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x0d), 1802269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41), 1803269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE0, 0xab), 1804269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE0, 0xaa), 1805269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE0, 0x01), 1806269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_HS_SWITCH_SEL_1, 0x00), 1807269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_BG_TIMER, 0x0a), 1808269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_EN_CENTER, 0x01), 1809269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER1, 0x62), 1810269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER2, 0x02), 1811269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_POST_DIV_MUX, 0x40), 1812269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_BIAS_EN_CLK_BUFLR_EN, 0x14), 1813269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_ENABLE1, 0x90), 1814269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYS_CLK_CTRL, 0x82), 1815269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f), 1816269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYSCLK_EN_SEL, 0x08), 1817269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x46), 1818269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_CFG, 0x04), 1819269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x14), 1820269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_SELECT, 0x34), 1821269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORE_CLK_EN, 0xa0), 1822269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_CONFIG_1, 0x06), 1823269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_MISC_1, 0x88), 1824269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_MODE, 0x14), 1825269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_VCO_DC_LEVEL_CTRL, 0x0f), 1826269b70e8SAbel Vesa }; 1827269b70e8SAbel Vesa 1828269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_ln_shrd_tbl[] = { 1829269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RXCLK_DIV2_CTRL, 0x01), 1830269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_Q_EN_RATES, 0xe), 1831269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_DFE_DAC_ENABLE1, 0x00), 1832269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH1, 0x00), 1833269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH2, 0x1f), 1834269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B0, 0x12), 1835269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B1, 0x12), 1836269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B2, 0xdb), 1837269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B3, 0x9a), 1838269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B4, 0x38), 1839269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B5, 0xb6), 1840269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B6, 0x64), 1841269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH1_RATE210, 0x1f), 1842269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH1_RATE3, 0x1f), 1843269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH2_RATE210, 0x1f), 1844269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH2_RATE3, 0x1f), 1845269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH3_RATE210, 0x1f), 1846269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH3_RATE3, 0x1f), 1847269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH4_RATE3, 0x1f), 1848269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH5_RATE3, 0x1f), 1849269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH6_RATE3, 0x1f), 1850269b70e8SAbel Vesa }; 1851269b70e8SAbel Vesa 1852269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_tx_tbl[] = { 1853269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1d), 1854269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_RES_CODE_LANE_OFFSET_RX, 0x03), 1855269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_1, 0x01), 1856269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_2, 0x00), 1857269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_3, 0x51), 1858269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_TRAN_DRVR_EMP_EN, 0x34), 1859269b70e8SAbel Vesa }; 1860269b70e8SAbel Vesa 1861269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_rx_tbl[] = { 1862269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_FO_GAIN_RATE_2, 0x0a), 1863269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_FO_GAIN_RATE_3, 0x0a), 1864269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_PI_CONTROLS, 0x16), 1865269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_SO_ACC_DEFAULT_VAL_RATE3, 0x00), 1866269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_IVCM_CAL_CTRL2, 0x80), 1867269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_IVCM_POSTCAL_OFFSET, 0x7c), 1868269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_DFE_3, 0x05), 1869269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_VGA_CAL_MAN_VAL, 0x0a), 1870269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_GM_CAL, 0x0d), 1871269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_EQU_ADAPTOR_CNTRL4, 0x0b), 1872269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_SIGDET_ENABLES, 0x1c), 1873269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_PHPRE_CTRL, 0x20), 1874269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x30), 1875269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_Q_PI_INTRINSIC_BIAS_RATE32, 0x09), 1876269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B0, 0x14), 1877269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B1, 0xb3), 1878269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B2, 0x58), 1879269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B3, 0x9a), 1880269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B4, 0x26), 1881269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B5, 0xb6), 1882269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B6, 0xee), 1883269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B0, 0xdb), 1884269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B1, 0xdb), 1885269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B2, 0xa0), 1886269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B3, 0xdf), 1887269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B4, 0x78), 1888269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B5, 0x76), 1889269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B6, 0xff), 1890269b70e8SAbel Vesa }; 1891269b70e8SAbel Vesa 1892269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_pcs_tbl[] = { 1893269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_G3S2_PRE_GAIN, 0x2e), 1894269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_COM_ELECIDLE_DLY_SEL, 0x25), 1895269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_EQ_CONFIG4, 0x00), 1896269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_EQ_CONFIG5, 0x22), 1897269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_TX_RX_CONFIG1, 0x04), 1898269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_TX_RX_CONFIG2, 0x02), 1899269b70e8SAbel Vesa }; 1900269b70e8SAbel Vesa 1901269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_pcs_misc_tbl[] = { 1902269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_ENDPOINT_REFCLK_DRIVE, 0xc1), 1903269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_OSC_DTCT_ATCIONS, 0x00), 1904269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_EQ_CONFIG1, 0x16), 1905269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_EQ_CONFIG5, 0x02), 1906269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_PRE_GAIN, 0x2e), 1907269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG1, 0x03), 1908269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG3, 0x28), 1909269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_TX_RX_CONFIG, 0xc0), 1910269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_POWER_STATE_CONFIG2, 0x1d), 1911269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG5, 0x0f), 1912269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G3_FOM_EQ_CONFIG5, 0xf2), 1913269b70e8SAbel Vesa QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_FOM_EQ_CONFIG5, 0xf2), 1914269b70e8SAbel Vesa }; 1915269b70e8SAbel Vesa 1916d0a846baSJohan Hovold struct qmp_pcie_offsets { 1917d0a846baSJohan Hovold u16 serdes; 1918d0a846baSJohan Hovold u16 pcs; 1919d0a846baSJohan Hovold u16 pcs_misc; 1920d0a846baSJohan Hovold u16 tx; 1921d0a846baSJohan Hovold u16 rx; 1922d0a846baSJohan Hovold u16 tx2; 1923d0a846baSJohan Hovold u16 rx2; 1924269b70e8SAbel Vesa u16 ln_shrd; 1925d0a846baSJohan Hovold }; 1926d0a846baSJohan Hovold 1927d8c9a1e9SJohan Hovold struct qmp_phy_cfg_tbls { 19282566ad8eSDmitry Baryshkov const struct qmp_phy_init_tbl *serdes; 19292566ad8eSDmitry Baryshkov int serdes_num; 19302566ad8eSDmitry Baryshkov const struct qmp_phy_init_tbl *tx; 19312566ad8eSDmitry Baryshkov int tx_num; 19322566ad8eSDmitry Baryshkov const struct qmp_phy_init_tbl *rx; 19332566ad8eSDmitry Baryshkov int rx_num; 19342566ad8eSDmitry Baryshkov const struct qmp_phy_init_tbl *pcs; 19352566ad8eSDmitry Baryshkov int pcs_num; 19362566ad8eSDmitry Baryshkov const struct qmp_phy_init_tbl *pcs_misc; 19372566ad8eSDmitry Baryshkov int pcs_misc_num; 1938269b70e8SAbel Vesa const struct qmp_phy_init_tbl *ln_shrd; 1939269b70e8SAbel Vesa int ln_shrd_num; 19402566ad8eSDmitry Baryshkov }; 19412566ad8eSDmitry Baryshkov 194294a407ccSDmitry Baryshkov /* struct qmp_phy_cfg - per-PHY initialization config */ 194394a407ccSDmitry Baryshkov struct qmp_phy_cfg { 1944f02543faSJohan Hovold int lanes; 194594a407ccSDmitry Baryshkov 1946d0a846baSJohan Hovold const struct qmp_pcie_offsets *offsets; 1947d0a846baSJohan Hovold 19482566ad8eSDmitry Baryshkov /* Main init sequence for PHY blocks - serdes, tx, rx, pcs */ 1949d8c9a1e9SJohan Hovold const struct qmp_phy_cfg_tbls tbls; 19502566ad8eSDmitry Baryshkov /* 195111bf53a3SDmitry Baryshkov * Additional init sequences for PHY blocks, providing additional 195211bf53a3SDmitry Baryshkov * register programming. They are used for providing separate sequences 195311bf53a3SDmitry Baryshkov * for the Root Complex and End Point use cases. 195411bf53a3SDmitry Baryshkov * 195511bf53a3SDmitry Baryshkov * If EP mode is not supported, both tables can be left unset. 19562566ad8eSDmitry Baryshkov */ 1957d8c9a1e9SJohan Hovold const struct qmp_phy_cfg_tbls *tbls_rc; 1958d8c9a1e9SJohan Hovold const struct qmp_phy_cfg_tbls *tbls_ep; 195994a407ccSDmitry Baryshkov 19606c37a02bSJohan Hovold const struct qmp_phy_init_tbl *serdes_4ln_tbl; 19616c37a02bSJohan Hovold int serdes_4ln_num; 19626c37a02bSJohan Hovold 196394a407ccSDmitry Baryshkov /* clock ids to be requested */ 196494a407ccSDmitry Baryshkov const char * const *clk_list; 196594a407ccSDmitry Baryshkov int num_clks; 196694a407ccSDmitry Baryshkov /* resets to be requested */ 196794a407ccSDmitry Baryshkov const char * const *reset_list; 196894a407ccSDmitry Baryshkov int num_resets; 196994a407ccSDmitry Baryshkov /* regulators to be requested */ 197094a407ccSDmitry Baryshkov const char * const *vreg_list; 197194a407ccSDmitry Baryshkov int num_vregs; 197294a407ccSDmitry Baryshkov 197394a407ccSDmitry Baryshkov /* array of registers with different offsets */ 197494a407ccSDmitry Baryshkov const unsigned int *regs; 197594a407ccSDmitry Baryshkov 197694a407ccSDmitry Baryshkov unsigned int pwrdn_ctrl; 197794a407ccSDmitry Baryshkov /* bit offset of PHYSTATUS in QPHY_PCS_STATUS register */ 197894a407ccSDmitry Baryshkov unsigned int phy_status; 197994a407ccSDmitry Baryshkov 198051bd3306SJohan Hovold bool skip_start_delay; 198194a407ccSDmitry Baryshkov 1982269b70e8SAbel Vesa bool has_nocsr_reset; 1983269b70e8SAbel Vesa 19842ec9bc8dSRobert Marko /* QMP PHY pipe clock interface rate */ 19852ec9bc8dSRobert Marko unsigned long pipe_clock_rate; 198694a407ccSDmitry Baryshkov }; 198794a407ccSDmitry Baryshkov 19882fdedef3SJohan Hovold struct qmp_pcie { 198994a407ccSDmitry Baryshkov struct device *dev; 199094a407ccSDmitry Baryshkov 19912fdedef3SJohan Hovold const struct qmp_phy_cfg *cfg; 19926c37a02bSJohan Hovold bool tcsr_4ln_config; 19932fdedef3SJohan Hovold 19942fdedef3SJohan Hovold void __iomem *serdes; 19952fdedef3SJohan Hovold void __iomem *pcs; 19962fdedef3SJohan Hovold void __iomem *pcs_misc; 19972fdedef3SJohan Hovold void __iomem *tx; 19982fdedef3SJohan Hovold void __iomem *rx; 19992fdedef3SJohan Hovold void __iomem *tx2; 20002fdedef3SJohan Hovold void __iomem *rx2; 2001269b70e8SAbel Vesa void __iomem *ln_shrd; 20022fdedef3SJohan Hovold 20036c37a02bSJohan Hovold void __iomem *port_b; 20046c37a02bSJohan Hovold 200594a407ccSDmitry Baryshkov struct clk_bulk_data *clks; 20069e420f1eSJohan Hovold struct clk_bulk_data pipe_clks[2]; 20079e420f1eSJohan Hovold int num_pipe_clks; 20089e420f1eSJohan Hovold 2009189ac6b8SDmitry Baryshkov struct reset_control_bulk_data *resets; 2010269b70e8SAbel Vesa struct reset_control *nocsr_reset; 201194a407ccSDmitry Baryshkov struct regulator_bulk_data *vregs; 201294a407ccSDmitry Baryshkov 20132fdedef3SJohan Hovold struct phy *phy; 20142fdedef3SJohan Hovold int mode; 2015e8511f40SJohan Hovold 2016e8511f40SJohan Hovold struct clk_fixed_rate pipe_clk_fixed; 201794a407ccSDmitry Baryshkov }; 201894a407ccSDmitry Baryshkov 201994a407ccSDmitry Baryshkov static inline void qphy_setbits(void __iomem *base, u32 offset, u32 val) 202094a407ccSDmitry Baryshkov { 202194a407ccSDmitry Baryshkov u32 reg; 202294a407ccSDmitry Baryshkov 202394a407ccSDmitry Baryshkov reg = readl(base + offset); 202494a407ccSDmitry Baryshkov reg |= val; 202594a407ccSDmitry Baryshkov writel(reg, base + offset); 202694a407ccSDmitry Baryshkov 202794a407ccSDmitry Baryshkov /* ensure that above write is through */ 202894a407ccSDmitry Baryshkov readl(base + offset); 202994a407ccSDmitry Baryshkov } 203094a407ccSDmitry Baryshkov 203194a407ccSDmitry Baryshkov static inline void qphy_clrbits(void __iomem *base, u32 offset, u32 val) 203294a407ccSDmitry Baryshkov { 203394a407ccSDmitry Baryshkov u32 reg; 203494a407ccSDmitry Baryshkov 203594a407ccSDmitry Baryshkov reg = readl(base + offset); 203694a407ccSDmitry Baryshkov reg &= ~val; 203794a407ccSDmitry Baryshkov writel(reg, base + offset); 203894a407ccSDmitry Baryshkov 203994a407ccSDmitry Baryshkov /* ensure that above write is through */ 204094a407ccSDmitry Baryshkov readl(base + offset); 204194a407ccSDmitry Baryshkov } 204294a407ccSDmitry Baryshkov 204394a407ccSDmitry Baryshkov /* list of clocks required by phy */ 20445b76f5ecSJohan Hovold static const char * const ipq8074_pciephy_clk_l[] = { 20455b76f5ecSJohan Hovold "aux", "cfg_ahb", 20465b76f5ecSJohan Hovold }; 20475b76f5ecSJohan Hovold 204894a407ccSDmitry Baryshkov static const char * const msm8996_phy_clk_l[] = { 204994a407ccSDmitry Baryshkov "aux", "cfg_ahb", "ref", 205094a407ccSDmitry Baryshkov }; 205194a407ccSDmitry Baryshkov 2052d0a846baSJohan Hovold static const char * const sc8280xp_pciephy_clk_l[] = { 2053d0a846baSJohan Hovold "aux", "cfg_ahb", "ref", "rchng", 2054d0a846baSJohan Hovold }; 205594a407ccSDmitry Baryshkov 205694a407ccSDmitry Baryshkov static const char * const sdm845_pciephy_clk_l[] = { 205794a407ccSDmitry Baryshkov "aux", "cfg_ahb", "ref", "refgen", 205894a407ccSDmitry Baryshkov }; 205994a407ccSDmitry Baryshkov 206094a407ccSDmitry Baryshkov /* list of regulators */ 206194a407ccSDmitry Baryshkov static const char * const qmp_phy_vreg_l[] = { 206294a407ccSDmitry Baryshkov "vdda-phy", "vdda-pll", 206394a407ccSDmitry Baryshkov }; 206494a407ccSDmitry Baryshkov 2065269b70e8SAbel Vesa static const char * const sm8550_qmp_phy_vreg_l[] = { 2066269b70e8SAbel Vesa "vdda-phy", "vdda-pll", "vdda-qref", 2067269b70e8SAbel Vesa }; 2068269b70e8SAbel Vesa 206994a407ccSDmitry Baryshkov /* list of resets */ 207094a407ccSDmitry Baryshkov static const char * const ipq8074_pciephy_reset_l[] = { 207194a407ccSDmitry Baryshkov "phy", "common", 207294a407ccSDmitry Baryshkov }; 207394a407ccSDmitry Baryshkov 2074b35a5311SDmitry Baryshkov static const char * const sdm845_pciephy_reset_l[] = { 2075b35a5311SDmitry Baryshkov "phy", 2076b35a5311SDmitry Baryshkov }; 2077b35a5311SDmitry Baryshkov 2078d0a846baSJohan Hovold static const struct qmp_pcie_offsets qmp_pcie_offsets_v5 = { 2079d0a846baSJohan Hovold .serdes = 0, 2080d0a846baSJohan Hovold .pcs = 0x0200, 2081d0a846baSJohan Hovold .pcs_misc = 0x0600, 2082d0a846baSJohan Hovold .tx = 0x0e00, 2083d0a846baSJohan Hovold .rx = 0x1000, 2084d0a846baSJohan Hovold .tx2 = 0x1600, 2085d0a846baSJohan Hovold .rx2 = 0x1800, 2086d0a846baSJohan Hovold }; 2087d0a846baSJohan Hovold 2088269b70e8SAbel Vesa static const struct qmp_pcie_offsets qmp_pcie_offsets_v6_20 = { 2089269b70e8SAbel Vesa .serdes = 0x1000, 2090269b70e8SAbel Vesa .pcs = 0x1200, 2091269b70e8SAbel Vesa .pcs_misc = 0x1400, 2092269b70e8SAbel Vesa .tx = 0x0000, 2093269b70e8SAbel Vesa .rx = 0x0200, 2094269b70e8SAbel Vesa .tx2 = 0x0800, 2095269b70e8SAbel Vesa .rx2 = 0x0a00, 2096269b70e8SAbel Vesa .ln_shrd = 0x0e00, 2097269b70e8SAbel Vesa }; 2098269b70e8SAbel Vesa 209994a407ccSDmitry Baryshkov static const struct qmp_phy_cfg ipq8074_pciephy_cfg = { 2100f02543faSJohan Hovold .lanes = 1, 210194a407ccSDmitry Baryshkov 2102d8c9a1e9SJohan Hovold .tbls = { 21032566ad8eSDmitry Baryshkov .serdes = ipq8074_pcie_serdes_tbl, 21042566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(ipq8074_pcie_serdes_tbl), 21052566ad8eSDmitry Baryshkov .tx = ipq8074_pcie_tx_tbl, 21062566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(ipq8074_pcie_tx_tbl), 21072566ad8eSDmitry Baryshkov .rx = ipq8074_pcie_rx_tbl, 21082566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(ipq8074_pcie_rx_tbl), 21092566ad8eSDmitry Baryshkov .pcs = ipq8074_pcie_pcs_tbl, 21102566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(ipq8074_pcie_pcs_tbl), 21112566ad8eSDmitry Baryshkov }, 211294a407ccSDmitry Baryshkov .clk_list = ipq8074_pciephy_clk_l, 211394a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l), 211494a407ccSDmitry Baryshkov .reset_list = ipq8074_pciephy_reset_l, 211594a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), 211694a407ccSDmitry Baryshkov .vreg_list = NULL, 211794a407ccSDmitry Baryshkov .num_vregs = 0, 2118bbe207a1SDmitry Baryshkov .regs = pciephy_v2_regs_layout, 211994a407ccSDmitry Baryshkov 212094a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 212194a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 212294a407ccSDmitry Baryshkov }; 212394a407ccSDmitry Baryshkov 2124334fad18SRobert Marko static const struct qmp_phy_cfg ipq8074_pciephy_gen3_cfg = { 2125f02543faSJohan Hovold .lanes = 1, 2126334fad18SRobert Marko 2127d8c9a1e9SJohan Hovold .tbls = { 21282566ad8eSDmitry Baryshkov .serdes = ipq8074_pcie_gen3_serdes_tbl, 21292566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(ipq8074_pcie_gen3_serdes_tbl), 21302566ad8eSDmitry Baryshkov .tx = ipq8074_pcie_gen3_tx_tbl, 21312566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(ipq8074_pcie_gen3_tx_tbl), 21322566ad8eSDmitry Baryshkov .rx = ipq8074_pcie_gen3_rx_tbl, 21332566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(ipq8074_pcie_gen3_rx_tbl), 21342566ad8eSDmitry Baryshkov .pcs = ipq8074_pcie_gen3_pcs_tbl, 21352566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(ipq8074_pcie_gen3_pcs_tbl), 21362584068aSChristian Marangi .pcs_misc = ipq8074_pcie_gen3_pcs_misc_tbl, 21372584068aSChristian Marangi .pcs_misc_num = ARRAY_SIZE(ipq8074_pcie_gen3_pcs_misc_tbl), 21382566ad8eSDmitry Baryshkov }, 2139334fad18SRobert Marko .clk_list = ipq8074_pciephy_clk_l, 2140334fad18SRobert Marko .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l), 2141334fad18SRobert Marko .reset_list = ipq8074_pciephy_reset_l, 2142334fad18SRobert Marko .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), 2143334fad18SRobert Marko .vreg_list = NULL, 2144334fad18SRobert Marko .num_vregs = 0, 2145bbe207a1SDmitry Baryshkov .regs = pciephy_v4_regs_layout, 2146334fad18SRobert Marko 2147334fad18SRobert Marko .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 214894b7288eSJohan Hovold .phy_status = PHYSTATUS, 2149334fad18SRobert Marko 2150334fad18SRobert Marko .pipe_clock_rate = 250000000, 2151334fad18SRobert Marko }; 2152334fad18SRobert Marko 215394a407ccSDmitry Baryshkov static const struct qmp_phy_cfg ipq6018_pciephy_cfg = { 2154f02543faSJohan Hovold .lanes = 1, 215594a407ccSDmitry Baryshkov 2156d8c9a1e9SJohan Hovold .tbls = { 21572566ad8eSDmitry Baryshkov .serdes = ipq6018_pcie_serdes_tbl, 21582566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(ipq6018_pcie_serdes_tbl), 21592566ad8eSDmitry Baryshkov .tx = ipq6018_pcie_tx_tbl, 21602566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(ipq6018_pcie_tx_tbl), 21612566ad8eSDmitry Baryshkov .rx = ipq6018_pcie_rx_tbl, 21622566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(ipq6018_pcie_rx_tbl), 21632566ad8eSDmitry Baryshkov .pcs = ipq6018_pcie_pcs_tbl, 21642566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(ipq6018_pcie_pcs_tbl), 21652566ad8eSDmitry Baryshkov .pcs_misc = ipq6018_pcie_pcs_misc_tbl, 21662566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(ipq6018_pcie_pcs_misc_tbl), 21672566ad8eSDmitry Baryshkov }, 216894a407ccSDmitry Baryshkov .clk_list = ipq8074_pciephy_clk_l, 216994a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(ipq8074_pciephy_clk_l), 217094a407ccSDmitry Baryshkov .reset_list = ipq8074_pciephy_reset_l, 217194a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), 217294a407ccSDmitry Baryshkov .vreg_list = NULL, 217394a407ccSDmitry Baryshkov .num_vregs = 0, 2174bbe207a1SDmitry Baryshkov .regs = pciephy_v4_regs_layout, 217594a407ccSDmitry Baryshkov 217694a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 217730518b19SJohan Hovold .phy_status = PHYSTATUS, 217894a407ccSDmitry Baryshkov }; 217994a407ccSDmitry Baryshkov 218094a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sdm845_qmp_pciephy_cfg = { 2181f02543faSJohan Hovold .lanes = 1, 218294a407ccSDmitry Baryshkov 2183d8c9a1e9SJohan Hovold .tbls = { 21842566ad8eSDmitry Baryshkov .serdes = sdm845_qmp_pcie_serdes_tbl, 21852566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sdm845_qmp_pcie_serdes_tbl), 21862566ad8eSDmitry Baryshkov .tx = sdm845_qmp_pcie_tx_tbl, 21872566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sdm845_qmp_pcie_tx_tbl), 21882566ad8eSDmitry Baryshkov .rx = sdm845_qmp_pcie_rx_tbl, 21892566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sdm845_qmp_pcie_rx_tbl), 21902566ad8eSDmitry Baryshkov .pcs = sdm845_qmp_pcie_pcs_tbl, 21912566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sdm845_qmp_pcie_pcs_tbl), 21922566ad8eSDmitry Baryshkov .pcs_misc = sdm845_qmp_pcie_pcs_misc_tbl, 21932566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sdm845_qmp_pcie_pcs_misc_tbl), 21942566ad8eSDmitry Baryshkov }, 219594a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 219694a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 219794a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 219894a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 219994a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 220094a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2201bbe207a1SDmitry Baryshkov .regs = pciephy_v3_regs_layout, 220294a407ccSDmitry Baryshkov 220394a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 220494a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 220594a407ccSDmitry Baryshkov }; 220694a407ccSDmitry Baryshkov 220794a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sdm845_qhp_pciephy_cfg = { 2208f02543faSJohan Hovold .lanes = 1, 220994a407ccSDmitry Baryshkov 2210d8c9a1e9SJohan Hovold .tbls = { 22112566ad8eSDmitry Baryshkov .serdes = sdm845_qhp_pcie_serdes_tbl, 22122566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sdm845_qhp_pcie_serdes_tbl), 22132566ad8eSDmitry Baryshkov .tx = sdm845_qhp_pcie_tx_tbl, 22142566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sdm845_qhp_pcie_tx_tbl), 22152566ad8eSDmitry Baryshkov .rx = sdm845_qhp_pcie_rx_tbl, 22162566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sdm845_qhp_pcie_rx_tbl), 22172566ad8eSDmitry Baryshkov .pcs = sdm845_qhp_pcie_pcs_tbl, 22182566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sdm845_qhp_pcie_pcs_tbl), 22192566ad8eSDmitry Baryshkov }, 222094a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 222194a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 222294a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 222394a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 222494a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 222594a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 222694a407ccSDmitry Baryshkov .regs = sdm845_qhp_pciephy_regs_layout, 222794a407ccSDmitry Baryshkov 222894a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 222994a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 223094a407ccSDmitry Baryshkov }; 223194a407ccSDmitry Baryshkov 223294a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8250_qmp_gen3x1_pciephy_cfg = { 2233f02543faSJohan Hovold .lanes = 1, 223494a407ccSDmitry Baryshkov 2235d8c9a1e9SJohan Hovold .tbls = { 22362566ad8eSDmitry Baryshkov .serdes = sm8250_qmp_pcie_serdes_tbl, 22372566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl), 22382566ad8eSDmitry Baryshkov .tx = sm8250_qmp_pcie_tx_tbl, 22392566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8250_qmp_pcie_tx_tbl), 22402566ad8eSDmitry Baryshkov .rx = sm8250_qmp_pcie_rx_tbl, 22412566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8250_qmp_pcie_rx_tbl), 22422566ad8eSDmitry Baryshkov .pcs = sm8250_qmp_pcie_pcs_tbl, 22432566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_tbl), 22442566ad8eSDmitry Baryshkov .pcs_misc = sm8250_qmp_pcie_pcs_misc_tbl, 22452566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_misc_tbl), 22462566ad8eSDmitry Baryshkov }, 2247d8c9a1e9SJohan Hovold .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 22482566ad8eSDmitry Baryshkov .serdes = sm8250_qmp_gen3x1_pcie_serdes_tbl, 22492566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_serdes_tbl), 22502566ad8eSDmitry Baryshkov .rx = sm8250_qmp_gen3x1_pcie_rx_tbl, 22512566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_rx_tbl), 22522566ad8eSDmitry Baryshkov .pcs = sm8250_qmp_gen3x1_pcie_pcs_tbl, 22532566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_pcs_tbl), 22542566ad8eSDmitry Baryshkov .pcs_misc = sm8250_qmp_gen3x1_pcie_pcs_misc_tbl, 22552566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_pcs_misc_tbl), 22562566ad8eSDmitry Baryshkov }, 225794a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 225894a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 225994a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 226094a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 226194a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 226294a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2263bbe207a1SDmitry Baryshkov .regs = pciephy_v4_regs_layout, 226494a407ccSDmitry Baryshkov 226594a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 226694a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 226794a407ccSDmitry Baryshkov }; 226894a407ccSDmitry Baryshkov 226994a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8250_qmp_gen3x2_pciephy_cfg = { 2270f02543faSJohan Hovold .lanes = 2, 227194a407ccSDmitry Baryshkov 2272d8c9a1e9SJohan Hovold .tbls = { 22732566ad8eSDmitry Baryshkov .serdes = sm8250_qmp_pcie_serdes_tbl, 22742566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl), 22752566ad8eSDmitry Baryshkov .tx = sm8250_qmp_pcie_tx_tbl, 22762566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8250_qmp_pcie_tx_tbl), 22772566ad8eSDmitry Baryshkov .rx = sm8250_qmp_pcie_rx_tbl, 22782566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8250_qmp_pcie_rx_tbl), 22792566ad8eSDmitry Baryshkov .pcs = sm8250_qmp_pcie_pcs_tbl, 22802566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_tbl), 22812566ad8eSDmitry Baryshkov .pcs_misc = sm8250_qmp_pcie_pcs_misc_tbl, 22822566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8250_qmp_pcie_pcs_misc_tbl), 22832566ad8eSDmitry Baryshkov }, 2284d8c9a1e9SJohan Hovold .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 22852566ad8eSDmitry Baryshkov .tx = sm8250_qmp_gen3x2_pcie_tx_tbl, 22862566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_tx_tbl), 22872566ad8eSDmitry Baryshkov .rx = sm8250_qmp_gen3x2_pcie_rx_tbl, 22882566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_rx_tbl), 22892566ad8eSDmitry Baryshkov .pcs = sm8250_qmp_gen3x2_pcie_pcs_tbl, 22902566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_pcs_tbl), 22912566ad8eSDmitry Baryshkov .pcs_misc = sm8250_qmp_gen3x2_pcie_pcs_misc_tbl, 22922566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_pcs_misc_tbl), 22932566ad8eSDmitry Baryshkov }, 229494a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 229594a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 229694a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 229794a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 229894a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 229994a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2300bbe207a1SDmitry Baryshkov .regs = pciephy_v4_regs_layout, 230194a407ccSDmitry Baryshkov 230294a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 230394a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 230494a407ccSDmitry Baryshkov }; 230594a407ccSDmitry Baryshkov 230694a407ccSDmitry Baryshkov static const struct qmp_phy_cfg msm8998_pciephy_cfg = { 2307f02543faSJohan Hovold .lanes = 1, 230894a407ccSDmitry Baryshkov 2309d8c9a1e9SJohan Hovold .tbls = { 23102566ad8eSDmitry Baryshkov .serdes = msm8998_pcie_serdes_tbl, 23112566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(msm8998_pcie_serdes_tbl), 23122566ad8eSDmitry Baryshkov .tx = msm8998_pcie_tx_tbl, 23132566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(msm8998_pcie_tx_tbl), 23142566ad8eSDmitry Baryshkov .rx = msm8998_pcie_rx_tbl, 23152566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(msm8998_pcie_rx_tbl), 23162566ad8eSDmitry Baryshkov .pcs = msm8998_pcie_pcs_tbl, 23172566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(msm8998_pcie_pcs_tbl), 23182566ad8eSDmitry Baryshkov }, 231994a407ccSDmitry Baryshkov .clk_list = msm8996_phy_clk_l, 232094a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(msm8996_phy_clk_l), 232194a407ccSDmitry Baryshkov .reset_list = ipq8074_pciephy_reset_l, 232294a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(ipq8074_pciephy_reset_l), 232394a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 232494a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2325bbe207a1SDmitry Baryshkov .regs = pciephy_v3_regs_layout, 232694a407ccSDmitry Baryshkov 232794a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 232894a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 232951bd3306SJohan Hovold 233051bd3306SJohan Hovold .skip_start_delay = true, 233194a407ccSDmitry Baryshkov }; 233294a407ccSDmitry Baryshkov 233394a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sc8180x_pciephy_cfg = { 2334f02543faSJohan Hovold .lanes = 1, 233594a407ccSDmitry Baryshkov 2336d8c9a1e9SJohan Hovold .tbls = { 23372566ad8eSDmitry Baryshkov .serdes = sc8180x_qmp_pcie_serdes_tbl, 23382566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sc8180x_qmp_pcie_serdes_tbl), 23392566ad8eSDmitry Baryshkov .tx = sc8180x_qmp_pcie_tx_tbl, 23402566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sc8180x_qmp_pcie_tx_tbl), 23412566ad8eSDmitry Baryshkov .rx = sc8180x_qmp_pcie_rx_tbl, 23422566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sc8180x_qmp_pcie_rx_tbl), 23432566ad8eSDmitry Baryshkov .pcs = sc8180x_qmp_pcie_pcs_tbl, 23442566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sc8180x_qmp_pcie_pcs_tbl), 23452566ad8eSDmitry Baryshkov .pcs_misc = sc8180x_qmp_pcie_pcs_misc_tbl, 23462566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sc8180x_qmp_pcie_pcs_misc_tbl), 23472566ad8eSDmitry Baryshkov }, 234894a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 234994a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 235094a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 235194a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 235294a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 235394a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2354bbe207a1SDmitry Baryshkov .regs = pciephy_v4_regs_layout, 235594a407ccSDmitry Baryshkov 235694a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 23574a9eac5aSJohan Hovold .phy_status = PHYSTATUS, 235894a407ccSDmitry Baryshkov }; 235994a407ccSDmitry Baryshkov 2360d0a846baSJohan Hovold static const struct qmp_phy_cfg sc8280xp_qmp_gen3x1_pciephy_cfg = { 2361d0a846baSJohan Hovold .lanes = 1, 2362d0a846baSJohan Hovold 2363d0a846baSJohan Hovold .offsets = &qmp_pcie_offsets_v5, 2364d0a846baSJohan Hovold 2365d0a846baSJohan Hovold .tbls = { 2366d0a846baSJohan Hovold .serdes = sc8280xp_qmp_pcie_serdes_tbl, 2367d0a846baSJohan Hovold .serdes_num = ARRAY_SIZE(sc8280xp_qmp_pcie_serdes_tbl), 2368d0a846baSJohan Hovold .tx = sc8280xp_qmp_gen3x1_pcie_tx_tbl, 2369d0a846baSJohan Hovold .tx_num = ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_tx_tbl), 2370d0a846baSJohan Hovold .rx = sc8280xp_qmp_gen3x1_pcie_rx_tbl, 2371d0a846baSJohan Hovold .rx_num = ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_rx_tbl), 2372d0a846baSJohan Hovold .pcs = sc8280xp_qmp_gen3x1_pcie_pcs_tbl, 2373d0a846baSJohan Hovold .pcs_num = ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_pcs_tbl), 2374d0a846baSJohan Hovold .pcs_misc = sc8280xp_qmp_gen3x1_pcie_pcs_misc_tbl, 2375d0a846baSJohan Hovold .pcs_misc_num = ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_pcs_misc_tbl), 2376d0a846baSJohan Hovold }, 2377d0a846baSJohan Hovold 2378d0a846baSJohan Hovold .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2379d0a846baSJohan Hovold .serdes = sc8280xp_qmp_gen3x1_pcie_rc_serdes_tbl, 2380d0a846baSJohan Hovold .serdes_num = ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_rc_serdes_tbl), 2381d0a846baSJohan Hovold }, 2382d0a846baSJohan Hovold 2383d0a846baSJohan Hovold .clk_list = sc8280xp_pciephy_clk_l, 2384d0a846baSJohan Hovold .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 2385d0a846baSJohan Hovold .reset_list = sdm845_pciephy_reset_l, 2386d0a846baSJohan Hovold .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2387d0a846baSJohan Hovold .vreg_list = qmp_phy_vreg_l, 2388d0a846baSJohan Hovold .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2389bbe207a1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 2390d0a846baSJohan Hovold 2391d0a846baSJohan Hovold .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 2392d0a846baSJohan Hovold .phy_status = PHYSTATUS, 2393d0a846baSJohan Hovold }; 2394d0a846baSJohan Hovold 2395d0a846baSJohan Hovold static const struct qmp_phy_cfg sc8280xp_qmp_gen3x2_pciephy_cfg = { 2396d0a846baSJohan Hovold .lanes = 2, 2397d0a846baSJohan Hovold 2398d0a846baSJohan Hovold .offsets = &qmp_pcie_offsets_v5, 2399d0a846baSJohan Hovold 2400d0a846baSJohan Hovold .tbls = { 2401d0a846baSJohan Hovold .serdes = sc8280xp_qmp_pcie_serdes_tbl, 2402d0a846baSJohan Hovold .serdes_num = ARRAY_SIZE(sc8280xp_qmp_pcie_serdes_tbl), 2403d0a846baSJohan Hovold .tx = sc8280xp_qmp_gen3x2_pcie_tx_tbl, 2404d0a846baSJohan Hovold .tx_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_tx_tbl), 2405d0a846baSJohan Hovold .rx = sc8280xp_qmp_gen3x2_pcie_rx_tbl, 2406d0a846baSJohan Hovold .rx_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rx_tbl), 2407d0a846baSJohan Hovold .pcs = sc8280xp_qmp_gen3x2_pcie_pcs_tbl, 2408d0a846baSJohan Hovold .pcs_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_tbl), 2409d0a846baSJohan Hovold .pcs_misc = sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl, 2410d0a846baSJohan Hovold .pcs_misc_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl), 2411d0a846baSJohan Hovold }, 2412d0a846baSJohan Hovold 2413d0a846baSJohan Hovold .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2414d0a846baSJohan Hovold .serdes = sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl, 2415d0a846baSJohan Hovold .serdes_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl), 2416d0a846baSJohan Hovold }, 2417d0a846baSJohan Hovold 2418d0a846baSJohan Hovold .clk_list = sc8280xp_pciephy_clk_l, 2419d0a846baSJohan Hovold .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 2420d0a846baSJohan Hovold .reset_list = sdm845_pciephy_reset_l, 2421d0a846baSJohan Hovold .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2422d0a846baSJohan Hovold .vreg_list = qmp_phy_vreg_l, 2423d0a846baSJohan Hovold .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2424bbe207a1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 2425d0a846baSJohan Hovold 2426d0a846baSJohan Hovold .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 2427d0a846baSJohan Hovold .phy_status = PHYSTATUS, 2428d0a846baSJohan Hovold }; 2429d0a846baSJohan Hovold 24306c37a02bSJohan Hovold static const struct qmp_phy_cfg sc8280xp_qmp_gen3x4_pciephy_cfg = { 24316c37a02bSJohan Hovold .lanes = 4, 24326c37a02bSJohan Hovold 24336c37a02bSJohan Hovold .offsets = &qmp_pcie_offsets_v5, 24346c37a02bSJohan Hovold 24356c37a02bSJohan Hovold .tbls = { 24366c37a02bSJohan Hovold .serdes = sc8280xp_qmp_pcie_serdes_tbl, 24376c37a02bSJohan Hovold .serdes_num = ARRAY_SIZE(sc8280xp_qmp_pcie_serdes_tbl), 24386c37a02bSJohan Hovold .tx = sc8280xp_qmp_gen3x2_pcie_tx_tbl, 24396c37a02bSJohan Hovold .tx_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_tx_tbl), 24406c37a02bSJohan Hovold .rx = sc8280xp_qmp_gen3x2_pcie_rx_tbl, 24416c37a02bSJohan Hovold .rx_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rx_tbl), 24426c37a02bSJohan Hovold .pcs = sc8280xp_qmp_gen3x2_pcie_pcs_tbl, 24436c37a02bSJohan Hovold .pcs_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_tbl), 24446c37a02bSJohan Hovold .pcs_misc = sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl, 24456c37a02bSJohan Hovold .pcs_misc_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl), 24466c37a02bSJohan Hovold }, 24476c37a02bSJohan Hovold 24486c37a02bSJohan Hovold .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 24496c37a02bSJohan Hovold .serdes = sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl, 24506c37a02bSJohan Hovold .serdes_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl), 24516c37a02bSJohan Hovold }, 24526c37a02bSJohan Hovold 24536c37a02bSJohan Hovold .serdes_4ln_tbl = sc8280xp_qmp_gen3x4_pcie_serdes_4ln_tbl, 24546c37a02bSJohan Hovold .serdes_4ln_num = ARRAY_SIZE(sc8280xp_qmp_gen3x4_pcie_serdes_4ln_tbl), 24556c37a02bSJohan Hovold 24566c37a02bSJohan Hovold .clk_list = sc8280xp_pciephy_clk_l, 24576c37a02bSJohan Hovold .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 24586c37a02bSJohan Hovold .reset_list = sdm845_pciephy_reset_l, 24596c37a02bSJohan Hovold .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 24606c37a02bSJohan Hovold .vreg_list = qmp_phy_vreg_l, 24616c37a02bSJohan Hovold .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2462bbe207a1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 24636c37a02bSJohan Hovold 24646c37a02bSJohan Hovold .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 24656c37a02bSJohan Hovold .phy_status = PHYSTATUS, 24666c37a02bSJohan Hovold }; 24676c37a02bSJohan Hovold 246894a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sdx55_qmp_pciephy_cfg = { 2469f02543faSJohan Hovold .lanes = 2, 247094a407ccSDmitry Baryshkov 2471d8c9a1e9SJohan Hovold .tbls = { 24722566ad8eSDmitry Baryshkov .serdes = sdx55_qmp_pcie_serdes_tbl, 24732566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sdx55_qmp_pcie_serdes_tbl), 24742566ad8eSDmitry Baryshkov .tx = sdx55_qmp_pcie_tx_tbl, 24752566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sdx55_qmp_pcie_tx_tbl), 24762566ad8eSDmitry Baryshkov .rx = sdx55_qmp_pcie_rx_tbl, 24772566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sdx55_qmp_pcie_rx_tbl), 24782566ad8eSDmitry Baryshkov .pcs = sdx55_qmp_pcie_pcs_tbl, 24792566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sdx55_qmp_pcie_pcs_tbl), 24802566ad8eSDmitry Baryshkov .pcs_misc = sdx55_qmp_pcie_pcs_misc_tbl, 24812566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sdx55_qmp_pcie_pcs_misc_tbl), 24822566ad8eSDmitry Baryshkov }, 2483458aa820SManivannan Sadhasivam 2484364c748dSManivannan Sadhasivam .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2485364c748dSManivannan Sadhasivam .serdes = sdx55_qmp_pcie_rc_serdes_tbl, 2486364c748dSManivannan Sadhasivam .serdes_num = ARRAY_SIZE(sdx55_qmp_pcie_rc_serdes_tbl), 2487364c748dSManivannan Sadhasivam .pcs_misc = sdx55_qmp_pcie_rc_pcs_misc_tbl, 2488364c748dSManivannan Sadhasivam .pcs_misc_num = ARRAY_SIZE(sdx55_qmp_pcie_rc_pcs_misc_tbl), 2489364c748dSManivannan Sadhasivam }, 2490364c748dSManivannan Sadhasivam 2491458aa820SManivannan Sadhasivam .tbls_ep = &(const struct qmp_phy_cfg_tbls) { 2492458aa820SManivannan Sadhasivam .serdes = sdx55_qmp_pcie_ep_serdes_tbl, 2493458aa820SManivannan Sadhasivam .serdes_num = ARRAY_SIZE(sdx55_qmp_pcie_ep_serdes_tbl), 2494458aa820SManivannan Sadhasivam .pcs_misc = sdx55_qmp_pcie_ep_pcs_misc_tbl, 2495458aa820SManivannan Sadhasivam .pcs_misc_num = ARRAY_SIZE(sdx55_qmp_pcie_ep_pcs_misc_tbl), 2496458aa820SManivannan Sadhasivam }, 2497458aa820SManivannan Sadhasivam 249894a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 249994a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 250094a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 250194a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 250294a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 250394a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2504bbe207a1SDmitry Baryshkov .regs = pciephy_v4_regs_layout, 250594a407ccSDmitry Baryshkov 2506364c748dSManivannan Sadhasivam .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 250794a407ccSDmitry Baryshkov .phy_status = PHYSTATUS_4_20, 250894a407ccSDmitry Baryshkov }; 250994a407ccSDmitry Baryshkov 2510c7005273SDmitry Baryshkov static const struct qmp_phy_cfg sm8350_qmp_gen3x1_pciephy_cfg = { 2511c7005273SDmitry Baryshkov .lanes = 1, 2512c7005273SDmitry Baryshkov 2513c7005273SDmitry Baryshkov .offsets = &qmp_pcie_offsets_v5, 2514c7005273SDmitry Baryshkov 2515c7005273SDmitry Baryshkov .tbls = { 2516c7005273SDmitry Baryshkov .serdes = sm8450_qmp_gen3_pcie_serdes_tbl, 2517c7005273SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_serdes_tbl), 2518c7005273SDmitry Baryshkov .tx = sm8350_qmp_gen3x1_pcie_tx_tbl, 2519c7005273SDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8350_qmp_gen3x1_pcie_tx_tbl), 2520c7005273SDmitry Baryshkov .rx = sm8450_qmp_gen3_pcie_rx_tbl, 2521c7005273SDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_rx_tbl), 2522c7005273SDmitry Baryshkov .pcs = sm8450_qmp_gen3_pcie_pcs_tbl, 2523c7005273SDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_pcs_tbl), 2524c7005273SDmitry Baryshkov .pcs_misc = sm8450_qmp_gen3x1_pcie_pcs_misc_tbl, 2525c7005273SDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_pcs_misc_tbl), 2526c7005273SDmitry Baryshkov }, 2527c7005273SDmitry Baryshkov 2528c7005273SDmitry Baryshkov .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2529c7005273SDmitry Baryshkov .serdes = sm8450_qmp_gen3x1_pcie_rc_serdes_tbl, 2530c7005273SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_rc_serdes_tbl), 2531c7005273SDmitry Baryshkov .rx = sm8350_qmp_gen3x1_pcie_rc_rx_tbl, 2532c7005273SDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8350_qmp_gen3x1_pcie_rc_rx_tbl), 2533c7005273SDmitry Baryshkov }, 2534c7005273SDmitry Baryshkov 2535c7005273SDmitry Baryshkov .clk_list = sc8280xp_pciephy_clk_l, 2536c7005273SDmitry Baryshkov .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 2537c7005273SDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 2538c7005273SDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2539c7005273SDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 2540c7005273SDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2541bbe207a1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 2542c7005273SDmitry Baryshkov 2543c7005273SDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 2544c7005273SDmitry Baryshkov .phy_status = PHYSTATUS, 2545c7005273SDmitry Baryshkov }; 2546c7005273SDmitry Baryshkov 2547c7005273SDmitry Baryshkov static const struct qmp_phy_cfg sm8350_qmp_gen3x2_pciephy_cfg = { 2548c7005273SDmitry Baryshkov .lanes = 2, 2549c7005273SDmitry Baryshkov 2550c7005273SDmitry Baryshkov .offsets = &qmp_pcie_offsets_v5, 2551c7005273SDmitry Baryshkov 2552c7005273SDmitry Baryshkov .tbls = { 2553c7005273SDmitry Baryshkov .serdes = sm8450_qmp_gen3_pcie_serdes_tbl, 2554c7005273SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_serdes_tbl), 2555c7005273SDmitry Baryshkov .tx = sm8350_qmp_gen3x2_pcie_tx_tbl, 2556c7005273SDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8350_qmp_gen3x2_pcie_tx_tbl), 2557c7005273SDmitry Baryshkov .rx = sm8450_qmp_gen3_pcie_rx_tbl, 2558c7005273SDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_rx_tbl), 2559c7005273SDmitry Baryshkov .pcs = sm8450_qmp_gen3_pcie_pcs_tbl, 2560c7005273SDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_pcs_tbl), 2561c7005273SDmitry Baryshkov .pcs_misc = sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl, 2562c7005273SDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl), 2563c7005273SDmitry Baryshkov }, 2564c7005273SDmitry Baryshkov 2565c7005273SDmitry Baryshkov .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2566c7005273SDmitry Baryshkov .rx = sm8350_qmp_gen3x2_pcie_rc_rx_tbl, 2567c7005273SDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8350_qmp_gen3x2_pcie_rc_rx_tbl), 2568c7005273SDmitry Baryshkov .pcs = sm8350_qmp_gen3x2_pcie_rc_pcs_tbl, 2569c7005273SDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8350_qmp_gen3x2_pcie_rc_pcs_tbl), 2570c7005273SDmitry Baryshkov }, 2571c7005273SDmitry Baryshkov 2572c7005273SDmitry Baryshkov .clk_list = sc8280xp_pciephy_clk_l, 2573c7005273SDmitry Baryshkov .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 2574c7005273SDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 2575c7005273SDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2576c7005273SDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 2577c7005273SDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2578bbe207a1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 2579c7005273SDmitry Baryshkov 2580c7005273SDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 2581c7005273SDmitry Baryshkov .phy_status = PHYSTATUS, 2582c7005273SDmitry Baryshkov }; 2583c7005273SDmitry Baryshkov 2584*92bd868fSRohit Agarwal static const struct qmp_phy_cfg sdx65_qmp_pciephy_cfg = { 2585*92bd868fSRohit Agarwal .lanes = 2, 2586*92bd868fSRohit Agarwal 2587*92bd868fSRohit Agarwal .offsets = &qmp_pcie_offsets_v6_20, 2588*92bd868fSRohit Agarwal 2589*92bd868fSRohit Agarwal .tbls = { 2590*92bd868fSRohit Agarwal .serdes = sdx65_qmp_pcie_serdes_tbl, 2591*92bd868fSRohit Agarwal .serdes_num = ARRAY_SIZE(sdx65_qmp_pcie_serdes_tbl), 2592*92bd868fSRohit Agarwal .tx = sdx65_qmp_pcie_tx_tbl, 2593*92bd868fSRohit Agarwal .tx_num = ARRAY_SIZE(sdx65_qmp_pcie_tx_tbl), 2594*92bd868fSRohit Agarwal .rx = sdx65_qmp_pcie_rx_tbl, 2595*92bd868fSRohit Agarwal .rx_num = ARRAY_SIZE(sdx65_qmp_pcie_rx_tbl), 2596*92bd868fSRohit Agarwal .pcs = sdx65_qmp_pcie_pcs_tbl, 2597*92bd868fSRohit Agarwal .pcs_num = ARRAY_SIZE(sdx65_qmp_pcie_pcs_tbl), 2598*92bd868fSRohit Agarwal .pcs_misc = sdx65_qmp_pcie_pcs_misc_tbl, 2599*92bd868fSRohit Agarwal .pcs_misc_num = ARRAY_SIZE(sdx65_qmp_pcie_pcs_misc_tbl), 2600*92bd868fSRohit Agarwal }, 2601*92bd868fSRohit Agarwal .clk_list = sdm845_pciephy_clk_l, 2602*92bd868fSRohit Agarwal .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 2603*92bd868fSRohit Agarwal .reset_list = sdm845_pciephy_reset_l, 2604*92bd868fSRohit Agarwal .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2605*92bd868fSRohit Agarwal .vreg_list = qmp_phy_vreg_l, 2606*92bd868fSRohit Agarwal .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2607*92bd868fSRohit Agarwal .regs = pciephy_v5_regs_layout, 2608*92bd868fSRohit Agarwal 2609*92bd868fSRohit Agarwal .pwrdn_ctrl = SW_PWRDN, 2610*92bd868fSRohit Agarwal .phy_status = PHYSTATUS_4_20, 2611*92bd868fSRohit Agarwal }; 2612*92bd868fSRohit Agarwal 261394a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8450_qmp_gen3x1_pciephy_cfg = { 2614f02543faSJohan Hovold .lanes = 1, 261594a407ccSDmitry Baryshkov 2616d8c9a1e9SJohan Hovold .tbls = { 2617c99649c3SDmitry Baryshkov .serdes = sm8450_qmp_gen3_pcie_serdes_tbl, 2618c99649c3SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_serdes_tbl), 26192566ad8eSDmitry Baryshkov .tx = sm8450_qmp_gen3x1_pcie_tx_tbl, 26202566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_tx_tbl), 2621c99649c3SDmitry Baryshkov .rx = sm8450_qmp_gen3_pcie_rx_tbl, 2622c99649c3SDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_rx_tbl), 2623c99649c3SDmitry Baryshkov .pcs = sm8450_qmp_gen3_pcie_pcs_tbl, 2624c99649c3SDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8450_qmp_gen3_pcie_pcs_tbl), 26252566ad8eSDmitry Baryshkov .pcs_misc = sm8450_qmp_gen3x1_pcie_pcs_misc_tbl, 26262566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_pcs_misc_tbl), 26272566ad8eSDmitry Baryshkov }, 2628d8de49e9SDmitry Baryshkov 2629d8de49e9SDmitry Baryshkov .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2630d8de49e9SDmitry Baryshkov .serdes = sm8450_qmp_gen3x1_pcie_rc_serdes_tbl, 2631d8de49e9SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_rc_serdes_tbl), 2632d8de49e9SDmitry Baryshkov .rx = sm8450_qmp_gen3x1_pcie_rc_rx_tbl, 2633d8de49e9SDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_rc_rx_tbl), 2634d8de49e9SDmitry Baryshkov }, 2635d8de49e9SDmitry Baryshkov 263694a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 263794a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 263894a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 263994a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 264094a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 264194a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2642c08436c1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 264394a407ccSDmitry Baryshkov 264494a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 264594a407ccSDmitry Baryshkov .phy_status = PHYSTATUS, 264694a407ccSDmitry Baryshkov }; 264794a407ccSDmitry Baryshkov 264894a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8450_qmp_gen4x2_pciephy_cfg = { 2649f02543faSJohan Hovold .lanes = 2, 265094a407ccSDmitry Baryshkov 2651d8c9a1e9SJohan Hovold .tbls = { 26522566ad8eSDmitry Baryshkov .serdes = sm8450_qmp_gen4x2_pcie_serdes_tbl, 26532566ad8eSDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_serdes_tbl), 26542566ad8eSDmitry Baryshkov .tx = sm8450_qmp_gen4x2_pcie_tx_tbl, 26552566ad8eSDmitry Baryshkov .tx_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_tx_tbl), 26562566ad8eSDmitry Baryshkov .rx = sm8450_qmp_gen4x2_pcie_rx_tbl, 26572566ad8eSDmitry Baryshkov .rx_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_rx_tbl), 26582566ad8eSDmitry Baryshkov .pcs = sm8450_qmp_gen4x2_pcie_pcs_tbl, 26592566ad8eSDmitry Baryshkov .pcs_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_pcs_tbl), 26602566ad8eSDmitry Baryshkov .pcs_misc = sm8450_qmp_gen4x2_pcie_pcs_misc_tbl, 26612566ad8eSDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_pcs_misc_tbl), 26622566ad8eSDmitry Baryshkov }, 2663f5682f13SDmitry Baryshkov 2664d8c9a1e9SJohan Hovold .tbls_rc = &(const struct qmp_phy_cfg_tbls) { 2665f5682f13SDmitry Baryshkov .serdes = sm8450_qmp_gen4x2_pcie_rc_serdes_tbl, 2666f5682f13SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_rc_serdes_tbl), 2667f5682f13SDmitry Baryshkov .pcs_misc = sm8450_qmp_gen4x2_pcie_rc_pcs_misc_tbl, 2668f5682f13SDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_rc_pcs_misc_tbl), 2669f5682f13SDmitry Baryshkov }, 2670f5682f13SDmitry Baryshkov 2671d8c9a1e9SJohan Hovold .tbls_ep = &(const struct qmp_phy_cfg_tbls) { 2672f5682f13SDmitry Baryshkov .serdes = sm8450_qmp_gen4x2_pcie_ep_serdes_tbl, 2673f5682f13SDmitry Baryshkov .serdes_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_ep_serdes_tbl), 2674f5682f13SDmitry Baryshkov .pcs_misc = sm8450_qmp_gen4x2_pcie_ep_pcs_misc_tbl, 2675f5682f13SDmitry Baryshkov .pcs_misc_num = ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_ep_pcs_misc_tbl), 2676f5682f13SDmitry Baryshkov }, 2677f5682f13SDmitry Baryshkov 267894a407ccSDmitry Baryshkov .clk_list = sdm845_pciephy_clk_l, 267994a407ccSDmitry Baryshkov .num_clks = ARRAY_SIZE(sdm845_pciephy_clk_l), 268094a407ccSDmitry Baryshkov .reset_list = sdm845_pciephy_reset_l, 268194a407ccSDmitry Baryshkov .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 268294a407ccSDmitry Baryshkov .vreg_list = qmp_phy_vreg_l, 268394a407ccSDmitry Baryshkov .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2684bbe207a1SDmitry Baryshkov .regs = pciephy_v5_regs_layout, 268594a407ccSDmitry Baryshkov 268694a407ccSDmitry Baryshkov .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 268794a407ccSDmitry Baryshkov .phy_status = PHYSTATUS_4_20, 268894a407ccSDmitry Baryshkov }; 268994a407ccSDmitry Baryshkov 2690269b70e8SAbel Vesa static const struct qmp_phy_cfg sm8550_qmp_gen3x2_pciephy_cfg = { 2691269b70e8SAbel Vesa .lanes = 2, 2692269b70e8SAbel Vesa 2693269b70e8SAbel Vesa .offsets = &qmp_pcie_offsets_v5, 2694269b70e8SAbel Vesa 2695269b70e8SAbel Vesa .tbls = { 2696269b70e8SAbel Vesa .serdes = sm8550_qmp_gen3x2_pcie_serdes_tbl, 2697269b70e8SAbel Vesa .serdes_num = ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_serdes_tbl), 2698269b70e8SAbel Vesa .tx = sm8550_qmp_gen3x2_pcie_tx_tbl, 2699269b70e8SAbel Vesa .tx_num = ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_tx_tbl), 2700269b70e8SAbel Vesa .rx = sm8550_qmp_gen3x2_pcie_rx_tbl, 2701269b70e8SAbel Vesa .rx_num = ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_rx_tbl), 2702269b70e8SAbel Vesa .pcs = sm8550_qmp_gen3x2_pcie_pcs_tbl, 2703269b70e8SAbel Vesa .pcs_num = ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_pcs_tbl), 2704269b70e8SAbel Vesa .pcs_misc = sm8550_qmp_gen3x2_pcie_pcs_misc_tbl, 2705269b70e8SAbel Vesa .pcs_misc_num = ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_pcs_misc_tbl), 2706269b70e8SAbel Vesa }, 2707269b70e8SAbel Vesa .clk_list = sc8280xp_pciephy_clk_l, 2708269b70e8SAbel Vesa .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 2709269b70e8SAbel Vesa .reset_list = sdm845_pciephy_reset_l, 2710269b70e8SAbel Vesa .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2711269b70e8SAbel Vesa .vreg_list = qmp_phy_vreg_l, 2712269b70e8SAbel Vesa .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), 2713269b70e8SAbel Vesa .regs = pciephy_v5_regs_layout, 2714269b70e8SAbel Vesa 2715269b70e8SAbel Vesa .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 2716269b70e8SAbel Vesa .phy_status = PHYSTATUS, 2717269b70e8SAbel Vesa }; 2718269b70e8SAbel Vesa 2719269b70e8SAbel Vesa static const struct qmp_phy_cfg sm8550_qmp_gen4x2_pciephy_cfg = { 2720269b70e8SAbel Vesa .lanes = 2, 2721269b70e8SAbel Vesa 2722269b70e8SAbel Vesa .offsets = &qmp_pcie_offsets_v6_20, 2723269b70e8SAbel Vesa 2724269b70e8SAbel Vesa .tbls = { 2725269b70e8SAbel Vesa .serdes = sm8550_qmp_gen4x2_pcie_serdes_tbl, 2726269b70e8SAbel Vesa .serdes_num = ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_serdes_tbl), 2727269b70e8SAbel Vesa .tx = sm8550_qmp_gen4x2_pcie_tx_tbl, 2728269b70e8SAbel Vesa .tx_num = ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_tx_tbl), 2729269b70e8SAbel Vesa .rx = sm8550_qmp_gen4x2_pcie_rx_tbl, 2730269b70e8SAbel Vesa .rx_num = ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_rx_tbl), 2731269b70e8SAbel Vesa .pcs = sm8550_qmp_gen4x2_pcie_pcs_tbl, 2732269b70e8SAbel Vesa .pcs_num = ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_pcs_tbl), 2733269b70e8SAbel Vesa .pcs_misc = sm8550_qmp_gen4x2_pcie_pcs_misc_tbl, 2734269b70e8SAbel Vesa .pcs_misc_num = ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_pcs_misc_tbl), 2735269b70e8SAbel Vesa .ln_shrd = sm8550_qmp_gen4x2_pcie_ln_shrd_tbl, 2736269b70e8SAbel Vesa .ln_shrd_num = ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_ln_shrd_tbl), 2737269b70e8SAbel Vesa }, 2738269b70e8SAbel Vesa .clk_list = sc8280xp_pciephy_clk_l, 2739269b70e8SAbel Vesa .num_clks = ARRAY_SIZE(sc8280xp_pciephy_clk_l), 2740269b70e8SAbel Vesa .reset_list = sdm845_pciephy_reset_l, 2741269b70e8SAbel Vesa .num_resets = ARRAY_SIZE(sdm845_pciephy_reset_l), 2742269b70e8SAbel Vesa .vreg_list = sm8550_qmp_phy_vreg_l, 2743269b70e8SAbel Vesa .num_vregs = ARRAY_SIZE(sm8550_qmp_phy_vreg_l), 2744269b70e8SAbel Vesa .regs = pciephy_v5_regs_layout, 2745269b70e8SAbel Vesa 2746269b70e8SAbel Vesa .pwrdn_ctrl = SW_PWRDN | REFCLK_DRV_DSBL, 2747269b70e8SAbel Vesa .phy_status = PHYSTATUS_4_20, 2748269b70e8SAbel Vesa .has_nocsr_reset = true, 2749269b70e8SAbel Vesa }; 2750269b70e8SAbel Vesa 275127878615SJohan Hovold static void qmp_pcie_configure_lane(void __iomem *base, 275294a407ccSDmitry Baryshkov const struct qmp_phy_init_tbl tbl[], 275394a407ccSDmitry Baryshkov int num, 275494a407ccSDmitry Baryshkov u8 lane_mask) 275594a407ccSDmitry Baryshkov { 275694a407ccSDmitry Baryshkov int i; 275794a407ccSDmitry Baryshkov const struct qmp_phy_init_tbl *t = tbl; 275894a407ccSDmitry Baryshkov 275994a407ccSDmitry Baryshkov if (!t) 276094a407ccSDmitry Baryshkov return; 276194a407ccSDmitry Baryshkov 276294a407ccSDmitry Baryshkov for (i = 0; i < num; i++, t++) { 276394a407ccSDmitry Baryshkov if (!(t->lane_mask & lane_mask)) 276494a407ccSDmitry Baryshkov continue; 276594a407ccSDmitry Baryshkov 276694a407ccSDmitry Baryshkov writel(t->val, base + t->offset); 276794a407ccSDmitry Baryshkov } 276894a407ccSDmitry Baryshkov } 276994a407ccSDmitry Baryshkov 277027878615SJohan Hovold static void qmp_pcie_configure(void __iomem *base, 277194a407ccSDmitry Baryshkov const struct qmp_phy_init_tbl tbl[], 277294a407ccSDmitry Baryshkov int num) 277394a407ccSDmitry Baryshkov { 2774f2175762SJohan Hovold qmp_pcie_configure_lane(base, tbl, num, 0xff); 277594a407ccSDmitry Baryshkov } 277694a407ccSDmitry Baryshkov 27776c37a02bSJohan Hovold static void qmp_pcie_init_port_b(struct qmp_pcie *qmp, const struct qmp_phy_cfg_tbls *tbls) 27786c37a02bSJohan Hovold { 27796c37a02bSJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 27806c37a02bSJohan Hovold const struct qmp_pcie_offsets *offs = cfg->offsets; 27816c37a02bSJohan Hovold void __iomem *tx3, *rx3, *tx4, *rx4; 27826c37a02bSJohan Hovold 27836c37a02bSJohan Hovold tx3 = qmp->port_b + offs->tx; 27846c37a02bSJohan Hovold rx3 = qmp->port_b + offs->rx; 27856c37a02bSJohan Hovold tx4 = qmp->port_b + offs->tx2; 27866c37a02bSJohan Hovold rx4 = qmp->port_b + offs->rx2; 27876c37a02bSJohan Hovold 27886c37a02bSJohan Hovold qmp_pcie_configure_lane(tx3, tbls->tx, tbls->tx_num, 1); 27896c37a02bSJohan Hovold qmp_pcie_configure_lane(rx3, tbls->rx, tbls->rx_num, 1); 27906c37a02bSJohan Hovold 27916c37a02bSJohan Hovold qmp_pcie_configure_lane(tx4, tbls->tx, tbls->tx_num, 2); 27926c37a02bSJohan Hovold qmp_pcie_configure_lane(rx4, tbls->rx, tbls->rx_num, 2); 27936c37a02bSJohan Hovold } 27946c37a02bSJohan Hovold 2795ec7bc1b4SJohan Hovold static void qmp_pcie_init_registers(struct qmp_pcie *qmp, const struct qmp_phy_cfg_tbls *tbls) 279694a407ccSDmitry Baryshkov { 2797ec7bc1b4SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 27982fdedef3SJohan Hovold void __iomem *serdes = qmp->serdes; 2799ec7bc1b4SJohan Hovold void __iomem *tx = qmp->tx; 2800ec7bc1b4SJohan Hovold void __iomem *rx = qmp->rx; 2801ec7bc1b4SJohan Hovold void __iomem *tx2 = qmp->tx2; 2802ec7bc1b4SJohan Hovold void __iomem *rx2 = qmp->rx2; 2803ec7bc1b4SJohan Hovold void __iomem *pcs = qmp->pcs; 2804ec7bc1b4SJohan Hovold void __iomem *pcs_misc = qmp->pcs_misc; 2805269b70e8SAbel Vesa void __iomem *ln_shrd = qmp->ln_shrd; 280694a407ccSDmitry Baryshkov 2807d8c9a1e9SJohan Hovold if (!tbls) 28082566ad8eSDmitry Baryshkov return; 280994a407ccSDmitry Baryshkov 2810d8c9a1e9SJohan Hovold qmp_pcie_configure(serdes, tbls->serdes, tbls->serdes_num); 28112566ad8eSDmitry Baryshkov 2812d8c9a1e9SJohan Hovold qmp_pcie_configure_lane(tx, tbls->tx, tbls->tx_num, 1); 2813d8c9a1e9SJohan Hovold qmp_pcie_configure_lane(rx, tbls->rx, tbls->rx_num, 1); 2814f8b64114SJohan Hovold 2815f8b64114SJohan Hovold if (cfg->lanes >= 2) { 2816d8c9a1e9SJohan Hovold qmp_pcie_configure_lane(tx2, tbls->tx, tbls->tx_num, 2); 2817d8c9a1e9SJohan Hovold qmp_pcie_configure_lane(rx2, tbls->rx, tbls->rx_num, 2); 2818f8b64114SJohan Hovold } 28192566ad8eSDmitry Baryshkov 2820d8c9a1e9SJohan Hovold qmp_pcie_configure(pcs, tbls->pcs, tbls->pcs_num); 2821d8c9a1e9SJohan Hovold qmp_pcie_configure(pcs_misc, tbls->pcs_misc, tbls->pcs_misc_num); 28226c37a02bSJohan Hovold 28236c37a02bSJohan Hovold if (cfg->lanes >= 4 && qmp->tcsr_4ln_config) { 28246c37a02bSJohan Hovold qmp_pcie_configure(serdes, cfg->serdes_4ln_tbl, cfg->serdes_4ln_num); 28256c37a02bSJohan Hovold qmp_pcie_init_port_b(qmp, tbls); 28266c37a02bSJohan Hovold } 2827269b70e8SAbel Vesa 2828269b70e8SAbel Vesa qmp_pcie_configure(ln_shrd, tbls->ln_shrd, tbls->ln_shrd_num); 282994a407ccSDmitry Baryshkov } 283094a407ccSDmitry Baryshkov 283191174e2cSJohan Hovold static int qmp_pcie_init(struct phy *phy) 283294a407ccSDmitry Baryshkov { 28332fdedef3SJohan Hovold struct qmp_pcie *qmp = phy_get_drvdata(phy); 28342fdedef3SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 2835189ac6b8SDmitry Baryshkov int ret; 283694a407ccSDmitry Baryshkov 283794a407ccSDmitry Baryshkov ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); 283894a407ccSDmitry Baryshkov if (ret) { 283994a407ccSDmitry Baryshkov dev_err(qmp->dev, "failed to enable regulators, err=%d\n", ret); 28401239fd71SDmitry Baryshkov return ret; 284194a407ccSDmitry Baryshkov } 284294a407ccSDmitry Baryshkov 2843189ac6b8SDmitry Baryshkov ret = reset_control_bulk_assert(cfg->num_resets, qmp->resets); 284494a407ccSDmitry Baryshkov if (ret) { 2845189ac6b8SDmitry Baryshkov dev_err(qmp->dev, "reset assert failed\n"); 284694a407ccSDmitry Baryshkov goto err_disable_regulators; 284794a407ccSDmitry Baryshkov } 284894a407ccSDmitry Baryshkov 2849269b70e8SAbel Vesa ret = reset_control_assert(qmp->nocsr_reset); 2850269b70e8SAbel Vesa if (ret) { 2851269b70e8SAbel Vesa dev_err(qmp->dev, "no-csr reset assert failed\n"); 2852269b70e8SAbel Vesa goto err_assert_reset; 2853269b70e8SAbel Vesa } 2854269b70e8SAbel Vesa 2855fffdeaf8SJohan Hovold usleep_range(200, 300); 2856fffdeaf8SJohan Hovold 2857189ac6b8SDmitry Baryshkov ret = reset_control_bulk_deassert(cfg->num_resets, qmp->resets); 285894a407ccSDmitry Baryshkov if (ret) { 2859189ac6b8SDmitry Baryshkov dev_err(qmp->dev, "reset deassert failed\n"); 2860269b70e8SAbel Vesa goto err_assert_reset; 286194a407ccSDmitry Baryshkov } 286294a407ccSDmitry Baryshkov 286394a407ccSDmitry Baryshkov ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks); 286494a407ccSDmitry Baryshkov if (ret) 286594a407ccSDmitry Baryshkov goto err_assert_reset; 286694a407ccSDmitry Baryshkov 286794a407ccSDmitry Baryshkov return 0; 286894a407ccSDmitry Baryshkov 286994a407ccSDmitry Baryshkov err_assert_reset: 2870189ac6b8SDmitry Baryshkov reset_control_bulk_assert(cfg->num_resets, qmp->resets); 287194a407ccSDmitry Baryshkov err_disable_regulators: 287294a407ccSDmitry Baryshkov regulator_bulk_disable(cfg->num_vregs, qmp->vregs); 287394a407ccSDmitry Baryshkov 287494a407ccSDmitry Baryshkov return ret; 287594a407ccSDmitry Baryshkov } 287694a407ccSDmitry Baryshkov 287791174e2cSJohan Hovold static int qmp_pcie_exit(struct phy *phy) 287894a407ccSDmitry Baryshkov { 28792fdedef3SJohan Hovold struct qmp_pcie *qmp = phy_get_drvdata(phy); 28802fdedef3SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 288194a407ccSDmitry Baryshkov 2882189ac6b8SDmitry Baryshkov reset_control_bulk_assert(cfg->num_resets, qmp->resets); 288394a407ccSDmitry Baryshkov 288494a407ccSDmitry Baryshkov clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); 288594a407ccSDmitry Baryshkov 288694a407ccSDmitry Baryshkov regulator_bulk_disable(cfg->num_vregs, qmp->vregs); 288794a407ccSDmitry Baryshkov 288894a407ccSDmitry Baryshkov return 0; 288994a407ccSDmitry Baryshkov } 289094a407ccSDmitry Baryshkov 289127878615SJohan Hovold static int qmp_pcie_power_on(struct phy *phy) 289294a407ccSDmitry Baryshkov { 28932fdedef3SJohan Hovold struct qmp_pcie *qmp = phy_get_drvdata(phy); 28942fdedef3SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 2895d8c9a1e9SJohan Hovold const struct qmp_phy_cfg_tbls *mode_tbls; 28962fdedef3SJohan Hovold void __iomem *pcs = qmp->pcs; 289794a407ccSDmitry Baryshkov void __iomem *status; 28982577ba8cSJohan Hovold unsigned int mask, val; 289994a407ccSDmitry Baryshkov int ret; 290094a407ccSDmitry Baryshkov 29015b68d95cSJohan Hovold qphy_setbits(pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL], 29025b68d95cSJohan Hovold cfg->pwrdn_ctrl); 29035b68d95cSJohan Hovold 29042fdedef3SJohan Hovold if (qmp->mode == PHY_MODE_PCIE_RC) 2905d8c9a1e9SJohan Hovold mode_tbls = cfg->tbls_rc; 290611bf53a3SDmitry Baryshkov else 2907d8c9a1e9SJohan Hovold mode_tbls = cfg->tbls_ep; 290811bf53a3SDmitry Baryshkov 2909ec7bc1b4SJohan Hovold qmp_pcie_init_registers(qmp, &cfg->tbls); 2910ec7bc1b4SJohan Hovold qmp_pcie_init_registers(qmp, mode_tbls); 291194a407ccSDmitry Baryshkov 29129e420f1eSJohan Hovold ret = clk_bulk_prepare_enable(qmp->num_pipe_clks, qmp->pipe_clks); 29139e420f1eSJohan Hovold if (ret) 2914fd926994SDmitry Baryshkov return ret; 291594a407ccSDmitry Baryshkov 2916269b70e8SAbel Vesa ret = reset_control_deassert(qmp->nocsr_reset); 2917269b70e8SAbel Vesa if (ret) { 2918269b70e8SAbel Vesa dev_err(qmp->dev, "no-csr reset deassert failed\n"); 2919269b70e8SAbel Vesa goto err_disable_pipe_clk; 2920269b70e8SAbel Vesa } 2921269b70e8SAbel Vesa 292294a407ccSDmitry Baryshkov /* Pull PHY out of reset state */ 292394a407ccSDmitry Baryshkov qphy_clrbits(pcs, cfg->regs[QPHY_SW_RESET], SW_RESET); 2924fd926994SDmitry Baryshkov 292594a407ccSDmitry Baryshkov /* start SerDes and Phy-Coding-Sublayer */ 29265806b87dSJohan Hovold qphy_setbits(pcs, cfg->regs[QPHY_START_CTRL], SERDES_START | PCS_START); 292794a407ccSDmitry Baryshkov 292851bd3306SJohan Hovold if (!cfg->skip_start_delay) 292951bd3306SJohan Hovold usleep_range(1000, 1200); 293051bd3306SJohan Hovold 293194a407ccSDmitry Baryshkov status = pcs + cfg->regs[QPHY_PCS_STATUS]; 293294a407ccSDmitry Baryshkov mask = cfg->phy_status; 29335cbeb75aSJohan Hovold ret = readl_poll_timeout(status, val, !(val & mask), 200, 293494a407ccSDmitry Baryshkov PHY_INIT_COMPLETE_TIMEOUT); 293594a407ccSDmitry Baryshkov if (ret) { 293694a407ccSDmitry Baryshkov dev_err(qmp->dev, "phy initialization timed-out\n"); 293794a407ccSDmitry Baryshkov goto err_disable_pipe_clk; 293894a407ccSDmitry Baryshkov } 2939da07a06bSDmitry Baryshkov 294094a407ccSDmitry Baryshkov return 0; 294194a407ccSDmitry Baryshkov 294294a407ccSDmitry Baryshkov err_disable_pipe_clk: 29439e420f1eSJohan Hovold clk_bulk_disable_unprepare(qmp->num_pipe_clks, qmp->pipe_clks); 294494a407ccSDmitry Baryshkov 294594a407ccSDmitry Baryshkov return ret; 294694a407ccSDmitry Baryshkov } 294794a407ccSDmitry Baryshkov 294827878615SJohan Hovold static int qmp_pcie_power_off(struct phy *phy) 294994a407ccSDmitry Baryshkov { 29502fdedef3SJohan Hovold struct qmp_pcie *qmp = phy_get_drvdata(phy); 29512fdedef3SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 295294a407ccSDmitry Baryshkov 29539e420f1eSJohan Hovold clk_bulk_disable_unprepare(qmp->num_pipe_clks, qmp->pipe_clks); 295494a407ccSDmitry Baryshkov 295594a407ccSDmitry Baryshkov /* PHY reset */ 29562fdedef3SJohan Hovold qphy_setbits(qmp->pcs, cfg->regs[QPHY_SW_RESET], SW_RESET); 295794a407ccSDmitry Baryshkov 295894a407ccSDmitry Baryshkov /* stop SerDes and Phy-Coding-Sublayer */ 29592fdedef3SJohan Hovold qphy_clrbits(qmp->pcs, cfg->regs[QPHY_START_CTRL], 29605806b87dSJohan Hovold SERDES_START | PCS_START); 296194a407ccSDmitry Baryshkov 296294a407ccSDmitry Baryshkov /* Put PHY into POWER DOWN state: active low */ 29632fdedef3SJohan Hovold qphy_clrbits(qmp->pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL], 296494a407ccSDmitry Baryshkov cfg->pwrdn_ctrl); 296594a407ccSDmitry Baryshkov 296694a407ccSDmitry Baryshkov return 0; 296794a407ccSDmitry Baryshkov } 296894a407ccSDmitry Baryshkov 296927878615SJohan Hovold static int qmp_pcie_enable(struct phy *phy) 297094a407ccSDmitry Baryshkov { 297194a407ccSDmitry Baryshkov int ret; 297294a407ccSDmitry Baryshkov 297327878615SJohan Hovold ret = qmp_pcie_init(phy); 297494a407ccSDmitry Baryshkov if (ret) 297594a407ccSDmitry Baryshkov return ret; 297694a407ccSDmitry Baryshkov 297727878615SJohan Hovold ret = qmp_pcie_power_on(phy); 297894a407ccSDmitry Baryshkov if (ret) 297927878615SJohan Hovold qmp_pcie_exit(phy); 298094a407ccSDmitry Baryshkov 298194a407ccSDmitry Baryshkov return ret; 298294a407ccSDmitry Baryshkov } 298394a407ccSDmitry Baryshkov 298427878615SJohan Hovold static int qmp_pcie_disable(struct phy *phy) 298594a407ccSDmitry Baryshkov { 298694a407ccSDmitry Baryshkov int ret; 298794a407ccSDmitry Baryshkov 298827878615SJohan Hovold ret = qmp_pcie_power_off(phy); 298994a407ccSDmitry Baryshkov if (ret) 299094a407ccSDmitry Baryshkov return ret; 299127878615SJohan Hovold 299227878615SJohan Hovold return qmp_pcie_exit(phy); 299394a407ccSDmitry Baryshkov } 299494a407ccSDmitry Baryshkov 299511bf53a3SDmitry Baryshkov static int qmp_pcie_set_mode(struct phy *phy, enum phy_mode mode, int submode) 299611bf53a3SDmitry Baryshkov { 29972fdedef3SJohan Hovold struct qmp_pcie *qmp = phy_get_drvdata(phy); 299811bf53a3SDmitry Baryshkov 299911bf53a3SDmitry Baryshkov switch (submode) { 300011bf53a3SDmitry Baryshkov case PHY_MODE_PCIE_RC: 300111bf53a3SDmitry Baryshkov case PHY_MODE_PCIE_EP: 30022fdedef3SJohan Hovold qmp->mode = submode; 300311bf53a3SDmitry Baryshkov break; 300411bf53a3SDmitry Baryshkov default: 300511bf53a3SDmitry Baryshkov dev_err(&phy->dev, "Unsupported submode %d\n", submode); 300611bf53a3SDmitry Baryshkov return -EINVAL; 300711bf53a3SDmitry Baryshkov } 300811bf53a3SDmitry Baryshkov 300911bf53a3SDmitry Baryshkov return 0; 301011bf53a3SDmitry Baryshkov } 301111bf53a3SDmitry Baryshkov 301263bf101aSJohan Hovold static const struct phy_ops qmp_pcie_phy_ops = { 301363bf101aSJohan Hovold .power_on = qmp_pcie_enable, 301463bf101aSJohan Hovold .power_off = qmp_pcie_disable, 301563bf101aSJohan Hovold .set_mode = qmp_pcie_set_mode, 301663bf101aSJohan Hovold .owner = THIS_MODULE, 301763bf101aSJohan Hovold }; 301863bf101aSJohan Hovold 301952b99773SJohan Hovold static int qmp_pcie_vreg_init(struct qmp_pcie *qmp) 302094a407ccSDmitry Baryshkov { 302152b99773SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 302252b99773SJohan Hovold struct device *dev = qmp->dev; 302394a407ccSDmitry Baryshkov int num = cfg->num_vregs; 302494a407ccSDmitry Baryshkov int i; 302594a407ccSDmitry Baryshkov 302694a407ccSDmitry Baryshkov qmp->vregs = devm_kcalloc(dev, num, sizeof(*qmp->vregs), GFP_KERNEL); 302794a407ccSDmitry Baryshkov if (!qmp->vregs) 302894a407ccSDmitry Baryshkov return -ENOMEM; 302994a407ccSDmitry Baryshkov 303094a407ccSDmitry Baryshkov for (i = 0; i < num; i++) 303194a407ccSDmitry Baryshkov qmp->vregs[i].supply = cfg->vreg_list[i]; 303294a407ccSDmitry Baryshkov 303394a407ccSDmitry Baryshkov return devm_regulator_bulk_get(dev, num, qmp->vregs); 303494a407ccSDmitry Baryshkov } 303594a407ccSDmitry Baryshkov 303652b99773SJohan Hovold static int qmp_pcie_reset_init(struct qmp_pcie *qmp) 303794a407ccSDmitry Baryshkov { 303852b99773SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 303952b99773SJohan Hovold struct device *dev = qmp->dev; 304094a407ccSDmitry Baryshkov int i; 3041189ac6b8SDmitry Baryshkov int ret; 304294a407ccSDmitry Baryshkov 304394a407ccSDmitry Baryshkov qmp->resets = devm_kcalloc(dev, cfg->num_resets, 304494a407ccSDmitry Baryshkov sizeof(*qmp->resets), GFP_KERNEL); 304594a407ccSDmitry Baryshkov if (!qmp->resets) 304694a407ccSDmitry Baryshkov return -ENOMEM; 304794a407ccSDmitry Baryshkov 3048189ac6b8SDmitry Baryshkov for (i = 0; i < cfg->num_resets; i++) 3049189ac6b8SDmitry Baryshkov qmp->resets[i].id = cfg->reset_list[i]; 305094a407ccSDmitry Baryshkov 3051189ac6b8SDmitry Baryshkov ret = devm_reset_control_bulk_get_exclusive(dev, cfg->num_resets, qmp->resets); 3052189ac6b8SDmitry Baryshkov if (ret) 3053189ac6b8SDmitry Baryshkov return dev_err_probe(dev, ret, "failed to get resets\n"); 305494a407ccSDmitry Baryshkov 3055269b70e8SAbel Vesa if (cfg->has_nocsr_reset) { 3056269b70e8SAbel Vesa qmp->nocsr_reset = devm_reset_control_get_exclusive(dev, "phy_nocsr"); 3057269b70e8SAbel Vesa if (IS_ERR(qmp->nocsr_reset)) 3058269b70e8SAbel Vesa return dev_err_probe(dev, PTR_ERR(qmp->nocsr_reset), 3059269b70e8SAbel Vesa "failed to get no-csr reset\n"); 3060269b70e8SAbel Vesa } 3061269b70e8SAbel Vesa 306294a407ccSDmitry Baryshkov return 0; 306394a407ccSDmitry Baryshkov } 306494a407ccSDmitry Baryshkov 306552b99773SJohan Hovold static int qmp_pcie_clk_init(struct qmp_pcie *qmp) 306694a407ccSDmitry Baryshkov { 306752b99773SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 306852b99773SJohan Hovold struct device *dev = qmp->dev; 306994a407ccSDmitry Baryshkov int num = cfg->num_clks; 307094a407ccSDmitry Baryshkov int i; 307194a407ccSDmitry Baryshkov 307294a407ccSDmitry Baryshkov qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL); 307394a407ccSDmitry Baryshkov if (!qmp->clks) 307494a407ccSDmitry Baryshkov return -ENOMEM; 307594a407ccSDmitry Baryshkov 307694a407ccSDmitry Baryshkov for (i = 0; i < num; i++) 307794a407ccSDmitry Baryshkov qmp->clks[i].id = cfg->clk_list[i]; 307894a407ccSDmitry Baryshkov 307994a407ccSDmitry Baryshkov return devm_clk_bulk_get(dev, num, qmp->clks); 308094a407ccSDmitry Baryshkov } 308194a407ccSDmitry Baryshkov 308294a407ccSDmitry Baryshkov static void phy_clk_release_provider(void *res) 308394a407ccSDmitry Baryshkov { 308494a407ccSDmitry Baryshkov of_clk_del_provider(res); 308594a407ccSDmitry Baryshkov } 308694a407ccSDmitry Baryshkov 308794a407ccSDmitry Baryshkov /* 308894a407ccSDmitry Baryshkov * Register a fixed rate pipe clock. 308994a407ccSDmitry Baryshkov * 309094a407ccSDmitry Baryshkov * The <s>_pipe_clksrc generated by PHY goes to the GCC that gate 309194a407ccSDmitry Baryshkov * controls it. The <s>_pipe_clk coming out of the GCC is requested 309294a407ccSDmitry Baryshkov * by the PHY driver for its operations. 309394a407ccSDmitry Baryshkov * We register the <s>_pipe_clksrc here. The gcc driver takes care 309494a407ccSDmitry Baryshkov * of assigning this <s>_pipe_clksrc as parent to <s>_pipe_clk. 309594a407ccSDmitry Baryshkov * Below picture shows this relationship. 309694a407ccSDmitry Baryshkov * 309794a407ccSDmitry Baryshkov * +---------------+ 309894a407ccSDmitry Baryshkov * | PHY block |<<---------------------------------------+ 309994a407ccSDmitry Baryshkov * | | | 310094a407ccSDmitry Baryshkov * | +-------+ | +-----+ | 310194a407ccSDmitry Baryshkov * I/P---^-->| PLL |---^--->pipe_clksrc--->| GCC |--->pipe_clk---+ 310294a407ccSDmitry Baryshkov * clk | +-------+ | +-----+ 310394a407ccSDmitry Baryshkov * +---------------+ 310494a407ccSDmitry Baryshkov */ 31052fdedef3SJohan Hovold static int phy_pipe_clk_register(struct qmp_pcie *qmp, struct device_node *np) 310694a407ccSDmitry Baryshkov { 3107e8511f40SJohan Hovold struct clk_fixed_rate *fixed = &qmp->pipe_clk_fixed; 310894a407ccSDmitry Baryshkov struct clk_init_data init = { }; 310994a407ccSDmitry Baryshkov int ret; 311094a407ccSDmitry Baryshkov 311194a407ccSDmitry Baryshkov ret = of_property_read_string(np, "clock-output-names", &init.name); 311294a407ccSDmitry Baryshkov if (ret) { 311394a407ccSDmitry Baryshkov dev_err(qmp->dev, "%pOFn: No clock-output-names\n", np); 311494a407ccSDmitry Baryshkov return ret; 311594a407ccSDmitry Baryshkov } 311694a407ccSDmitry Baryshkov 311794a407ccSDmitry Baryshkov init.ops = &clk_fixed_rate_ops; 311894a407ccSDmitry Baryshkov 31192ec9bc8dSRobert Marko /* 31202ec9bc8dSRobert Marko * Controllers using QMP PHY-s use 125MHz pipe clock interface 31212ec9bc8dSRobert Marko * unless other frequency is specified in the PHY config. 31222ec9bc8dSRobert Marko */ 31232fdedef3SJohan Hovold if (qmp->cfg->pipe_clock_rate) 31242fdedef3SJohan Hovold fixed->fixed_rate = qmp->cfg->pipe_clock_rate; 31252ec9bc8dSRobert Marko else 312694a407ccSDmitry Baryshkov fixed->fixed_rate = 125000000; 31272ec9bc8dSRobert Marko 312894a407ccSDmitry Baryshkov fixed->hw.init = &init; 312994a407ccSDmitry Baryshkov 313094a407ccSDmitry Baryshkov ret = devm_clk_hw_register(qmp->dev, &fixed->hw); 313194a407ccSDmitry Baryshkov if (ret) 313294a407ccSDmitry Baryshkov return ret; 313394a407ccSDmitry Baryshkov 313494a407ccSDmitry Baryshkov ret = of_clk_add_hw_provider(np, of_clk_hw_simple_get, &fixed->hw); 313594a407ccSDmitry Baryshkov if (ret) 313694a407ccSDmitry Baryshkov return ret; 313794a407ccSDmitry Baryshkov 313894a407ccSDmitry Baryshkov /* 313994a407ccSDmitry Baryshkov * Roll a devm action because the clock provider is the child node, but 314094a407ccSDmitry Baryshkov * the child node is not actually a device. 314194a407ccSDmitry Baryshkov */ 314294a407ccSDmitry Baryshkov return devm_add_action_or_reset(qmp->dev, phy_clk_release_provider, np); 314394a407ccSDmitry Baryshkov } 314494a407ccSDmitry Baryshkov 31457bc609e3SJohan Hovold static int qmp_pcie_parse_dt_legacy(struct qmp_pcie *qmp, struct device_node *np) 314694a407ccSDmitry Baryshkov { 31477bc609e3SJohan Hovold struct platform_device *pdev = to_platform_device(qmp->dev); 314852b99773SJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 314952b99773SJohan Hovold struct device *dev = qmp->dev; 31509e420f1eSJohan Hovold struct clk *clk; 315194a407ccSDmitry Baryshkov 31527bc609e3SJohan Hovold qmp->serdes = devm_platform_ioremap_resource(pdev, 0); 31537bc609e3SJohan Hovold if (IS_ERR(qmp->serdes)) 31547bc609e3SJohan Hovold return PTR_ERR(qmp->serdes); 315594a407ccSDmitry Baryshkov 315694a407ccSDmitry Baryshkov /* 31578d3bf724SJohan Hovold * Get memory resources for the PHY: 315894a407ccSDmitry Baryshkov * Resources are indexed as: tx -> 0; rx -> 1; pcs -> 2. 315994a407ccSDmitry Baryshkov * For dual lane PHYs: tx2 -> 3, rx2 -> 4, pcs_misc (optional) -> 5 316094a407ccSDmitry Baryshkov * For single lane PHYs: pcs_misc (optional) -> 3. 316194a407ccSDmitry Baryshkov */ 31622fdedef3SJohan Hovold qmp->tx = devm_of_iomap(dev, np, 0, NULL); 31632fdedef3SJohan Hovold if (IS_ERR(qmp->tx)) 31642fdedef3SJohan Hovold return PTR_ERR(qmp->tx); 316594a407ccSDmitry Baryshkov 31660a40891bSDmitry Baryshkov if (of_device_is_compatible(dev->of_node, "qcom,sdm845-qhp-pcie-phy")) 31672fdedef3SJohan Hovold qmp->rx = qmp->tx; 31680a40891bSDmitry Baryshkov else 31692fdedef3SJohan Hovold qmp->rx = devm_of_iomap(dev, np, 1, NULL); 31702fdedef3SJohan Hovold if (IS_ERR(qmp->rx)) 31712fdedef3SJohan Hovold return PTR_ERR(qmp->rx); 317294a407ccSDmitry Baryshkov 31732fdedef3SJohan Hovold qmp->pcs = devm_of_iomap(dev, np, 2, NULL); 31742fdedef3SJohan Hovold if (IS_ERR(qmp->pcs)) 31752fdedef3SJohan Hovold return PTR_ERR(qmp->pcs); 317694a407ccSDmitry Baryshkov 3177f02543faSJohan Hovold if (cfg->lanes >= 2) { 31782fdedef3SJohan Hovold qmp->tx2 = devm_of_iomap(dev, np, 3, NULL); 31792fdedef3SJohan Hovold if (IS_ERR(qmp->tx2)) 31802fdedef3SJohan Hovold return PTR_ERR(qmp->tx2); 318169c90cb5SJohan Hovold 31822fdedef3SJohan Hovold qmp->rx2 = devm_of_iomap(dev, np, 4, NULL); 31832fdedef3SJohan Hovold if (IS_ERR(qmp->rx2)) 31842fdedef3SJohan Hovold return PTR_ERR(qmp->rx2); 318594a407ccSDmitry Baryshkov 31862fdedef3SJohan Hovold qmp->pcs_misc = devm_of_iomap(dev, np, 5, NULL); 318794a407ccSDmitry Baryshkov } else { 31882fdedef3SJohan Hovold qmp->pcs_misc = devm_of_iomap(dev, np, 3, NULL); 318994a407ccSDmitry Baryshkov } 319094a407ccSDmitry Baryshkov 31912fdedef3SJohan Hovold if (IS_ERR(qmp->pcs_misc) && 3192af664324SDmitry Baryshkov of_device_is_compatible(dev->of_node, "qcom,ipq6018-qmp-pcie-phy")) 31932fdedef3SJohan Hovold qmp->pcs_misc = qmp->pcs + 0x400; 3194af664324SDmitry Baryshkov 31952fdedef3SJohan Hovold if (IS_ERR(qmp->pcs_misc)) { 3196d8c9a1e9SJohan Hovold if (cfg->tbls.pcs_misc || 3197d8c9a1e9SJohan Hovold (cfg->tbls_rc && cfg->tbls_rc->pcs_misc) || 3198d8c9a1e9SJohan Hovold (cfg->tbls_ep && cfg->tbls_ep->pcs_misc)) { 31992fdedef3SJohan Hovold return PTR_ERR(qmp->pcs_misc); 32002fdedef3SJohan Hovold } 3201ecd5507eSJohan Hovold } 320294a407ccSDmitry Baryshkov 32039e420f1eSJohan Hovold clk = devm_get_clk_from_child(dev, np, NULL); 32049e420f1eSJohan Hovold if (IS_ERR(clk)) { 32059e420f1eSJohan Hovold return dev_err_probe(dev, PTR_ERR(clk), 32062fdedef3SJohan Hovold "failed to get pipe clock\n"); 320794a407ccSDmitry Baryshkov } 320894a407ccSDmitry Baryshkov 32099e420f1eSJohan Hovold qmp->num_pipe_clks = 1; 32109e420f1eSJohan Hovold qmp->pipe_clks[0].id = "pipe"; 32119e420f1eSJohan Hovold qmp->pipe_clks[0].clk = clk; 32129e420f1eSJohan Hovold 321394a407ccSDmitry Baryshkov return 0; 321494a407ccSDmitry Baryshkov } 321594a407ccSDmitry Baryshkov 32166c37a02bSJohan Hovold static int qmp_pcie_get_4ln_config(struct qmp_pcie *qmp) 32176c37a02bSJohan Hovold { 32186c37a02bSJohan Hovold struct regmap *tcsr; 32196c37a02bSJohan Hovold unsigned int args[2]; 32206c37a02bSJohan Hovold int ret; 32216c37a02bSJohan Hovold 32226c37a02bSJohan Hovold tcsr = syscon_regmap_lookup_by_phandle_args(qmp->dev->of_node, 32236c37a02bSJohan Hovold "qcom,4ln-config-sel", 32246c37a02bSJohan Hovold ARRAY_SIZE(args), args); 32256c37a02bSJohan Hovold if (IS_ERR(tcsr)) { 32266c37a02bSJohan Hovold ret = PTR_ERR(tcsr); 32276c37a02bSJohan Hovold if (ret == -ENOENT) 32286c37a02bSJohan Hovold return 0; 32296c37a02bSJohan Hovold 32306c37a02bSJohan Hovold dev_err(qmp->dev, "failed to lookup syscon: %d\n", ret); 32316c37a02bSJohan Hovold return ret; 32326c37a02bSJohan Hovold } 32336c37a02bSJohan Hovold 32346c37a02bSJohan Hovold ret = regmap_test_bits(tcsr, args[0], BIT(args[1])); 32356c37a02bSJohan Hovold if (ret < 0) { 32366c37a02bSJohan Hovold dev_err(qmp->dev, "failed to read tcsr: %d\n", ret); 32376c37a02bSJohan Hovold return ret; 32386c37a02bSJohan Hovold } 32396c37a02bSJohan Hovold 32406c37a02bSJohan Hovold qmp->tcsr_4ln_config = ret; 32416c37a02bSJohan Hovold 32426c37a02bSJohan Hovold dev_dbg(qmp->dev, "4ln_config_sel = %d\n", qmp->tcsr_4ln_config); 32436c37a02bSJohan Hovold 32446c37a02bSJohan Hovold return 0; 32456c37a02bSJohan Hovold } 32466c37a02bSJohan Hovold 3247d0a846baSJohan Hovold static int qmp_pcie_parse_dt(struct qmp_pcie *qmp) 3248d0a846baSJohan Hovold { 3249d0a846baSJohan Hovold struct platform_device *pdev = to_platform_device(qmp->dev); 3250d0a846baSJohan Hovold const struct qmp_phy_cfg *cfg = qmp->cfg; 3251d0a846baSJohan Hovold const struct qmp_pcie_offsets *offs = cfg->offsets; 3252d0a846baSJohan Hovold struct device *dev = qmp->dev; 3253d0a846baSJohan Hovold void __iomem *base; 3254d0a846baSJohan Hovold int ret; 3255d0a846baSJohan Hovold 3256d0a846baSJohan Hovold if (!offs) 3257d0a846baSJohan Hovold return -EINVAL; 3258d0a846baSJohan Hovold 32596c37a02bSJohan Hovold ret = qmp_pcie_get_4ln_config(qmp); 32606c37a02bSJohan Hovold if (ret) 32616c37a02bSJohan Hovold return ret; 32626c37a02bSJohan Hovold 3263d0a846baSJohan Hovold base = devm_platform_ioremap_resource(pdev, 0); 3264d0a846baSJohan Hovold if (IS_ERR(base)) 3265d0a846baSJohan Hovold return PTR_ERR(base); 3266d0a846baSJohan Hovold 3267d0a846baSJohan Hovold qmp->serdes = base + offs->serdes; 3268d0a846baSJohan Hovold qmp->pcs = base + offs->pcs; 3269d0a846baSJohan Hovold qmp->pcs_misc = base + offs->pcs_misc; 3270d0a846baSJohan Hovold qmp->tx = base + offs->tx; 3271d0a846baSJohan Hovold qmp->rx = base + offs->rx; 3272d0a846baSJohan Hovold 3273d0a846baSJohan Hovold if (cfg->lanes >= 2) { 3274d0a846baSJohan Hovold qmp->tx2 = base + offs->tx2; 3275d0a846baSJohan Hovold qmp->rx2 = base + offs->rx2; 3276d0a846baSJohan Hovold } 3277d0a846baSJohan Hovold 32786c37a02bSJohan Hovold if (qmp->cfg->lanes >= 4 && qmp->tcsr_4ln_config) { 32796c37a02bSJohan Hovold qmp->port_b = devm_platform_ioremap_resource(pdev, 1); 32806c37a02bSJohan Hovold if (IS_ERR(qmp->port_b)) 32816c37a02bSJohan Hovold return PTR_ERR(qmp->port_b); 32826c37a02bSJohan Hovold } 32836c37a02bSJohan Hovold 3284269b70e8SAbel Vesa if (cfg->tbls.ln_shrd) 3285269b70e8SAbel Vesa qmp->ln_shrd = base + offs->ln_shrd; 3286269b70e8SAbel Vesa 3287d0a846baSJohan Hovold qmp->num_pipe_clks = 2; 3288d0a846baSJohan Hovold qmp->pipe_clks[0].id = "pipe"; 3289d0a846baSJohan Hovold qmp->pipe_clks[1].id = "pipediv2"; 3290d0a846baSJohan Hovold 3291c7005273SDmitry Baryshkov ret = devm_clk_bulk_get(dev, 1, qmp->pipe_clks); 3292c7005273SDmitry Baryshkov if (ret) 3293c7005273SDmitry Baryshkov return ret; 3294c7005273SDmitry Baryshkov 3295c7005273SDmitry Baryshkov ret = devm_clk_bulk_get_optional(dev, qmp->num_pipe_clks - 1, qmp->pipe_clks + 1); 3296d0a846baSJohan Hovold if (ret) 3297d0a846baSJohan Hovold return ret; 3298d0a846baSJohan Hovold 3299d0a846baSJohan Hovold return 0; 3300d0a846baSJohan Hovold } 3301d0a846baSJohan Hovold 330227878615SJohan Hovold static int qmp_pcie_probe(struct platform_device *pdev) 330394a407ccSDmitry Baryshkov { 330494a407ccSDmitry Baryshkov struct device *dev = &pdev->dev; 330594a407ccSDmitry Baryshkov struct phy_provider *phy_provider; 3306d0a846baSJohan Hovold struct device_node *np; 33072fdedef3SJohan Hovold struct qmp_pcie *qmp; 330894a407ccSDmitry Baryshkov int ret; 330994a407ccSDmitry Baryshkov 331094a407ccSDmitry Baryshkov qmp = devm_kzalloc(dev, sizeof(*qmp), GFP_KERNEL); 331194a407ccSDmitry Baryshkov if (!qmp) 331294a407ccSDmitry Baryshkov return -ENOMEM; 331394a407ccSDmitry Baryshkov 331494a407ccSDmitry Baryshkov qmp->dev = dev; 331594a407ccSDmitry Baryshkov 331652b99773SJohan Hovold qmp->cfg = of_device_get_match_data(dev); 331752b99773SJohan Hovold if (!qmp->cfg) 331894a407ccSDmitry Baryshkov return -EINVAL; 331994a407ccSDmitry Baryshkov 332052b99773SJohan Hovold WARN_ON_ONCE(!qmp->cfg->pwrdn_ctrl); 332152b99773SJohan Hovold WARN_ON_ONCE(!qmp->cfg->phy_status); 332273ad6a9dSJohan Hovold 332352b99773SJohan Hovold ret = qmp_pcie_clk_init(qmp); 332494a407ccSDmitry Baryshkov if (ret) 332594a407ccSDmitry Baryshkov return ret; 332694a407ccSDmitry Baryshkov 332752b99773SJohan Hovold ret = qmp_pcie_reset_init(qmp); 332894a407ccSDmitry Baryshkov if (ret) 332994a407ccSDmitry Baryshkov return ret; 333094a407ccSDmitry Baryshkov 333152b99773SJohan Hovold ret = qmp_pcie_vreg_init(qmp); 3332a548b6b4SYuan Can if (ret) 333328d74fc3SJohan Hovold return ret; 333494a407ccSDmitry Baryshkov 3335d0a846baSJohan Hovold /* Check for legacy binding with child node. */ 3336d0a846baSJohan Hovold np = of_get_next_available_child(dev->of_node, NULL); 3337d0a846baSJohan Hovold if (np) { 3338d0a846baSJohan Hovold ret = qmp_pcie_parse_dt_legacy(qmp, np); 3339d0a846baSJohan Hovold } else { 3340d0a846baSJohan Hovold np = of_node_get(dev->of_node); 3341d0a846baSJohan Hovold ret = qmp_pcie_parse_dt(qmp); 3342d0a846baSJohan Hovold } 3343393ed5d5SJohan Hovold if (ret) 334494a407ccSDmitry Baryshkov goto err_node_put; 334594a407ccSDmitry Baryshkov 3346d0a846baSJohan Hovold ret = phy_pipe_clk_register(qmp, np); 3347393ed5d5SJohan Hovold if (ret) 334894a407ccSDmitry Baryshkov goto err_node_put; 3349da07a06bSDmitry Baryshkov 33507bc609e3SJohan Hovold qmp->mode = PHY_MODE_PCIE_RC; 33517bc609e3SJohan Hovold 3352d0a846baSJohan Hovold qmp->phy = devm_phy_create(dev, np, &qmp_pcie_phy_ops); 33537bc609e3SJohan Hovold if (IS_ERR(qmp->phy)) { 33547bc609e3SJohan Hovold ret = PTR_ERR(qmp->phy); 33557bc609e3SJohan Hovold dev_err(dev, "failed to create PHY: %d\n", ret); 33567bc609e3SJohan Hovold goto err_node_put; 33577bc609e3SJohan Hovold } 33587bc609e3SJohan Hovold 33597bc609e3SJohan Hovold phy_set_drvdata(qmp->phy, qmp); 33607bc609e3SJohan Hovold 3361d0a846baSJohan Hovold of_node_put(np); 336294a407ccSDmitry Baryshkov 336394a407ccSDmitry Baryshkov phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); 336494a407ccSDmitry Baryshkov 336594a407ccSDmitry Baryshkov return PTR_ERR_OR_ZERO(phy_provider); 336694a407ccSDmitry Baryshkov 336794a407ccSDmitry Baryshkov err_node_put: 3368d0a846baSJohan Hovold of_node_put(np); 336994a407ccSDmitry Baryshkov return ret; 337094a407ccSDmitry Baryshkov } 337194a407ccSDmitry Baryshkov 3372cebc6ca7SJohan Hovold static const struct of_device_id qmp_pcie_of_match_table[] = { 3373cebc6ca7SJohan Hovold { 3374cebc6ca7SJohan Hovold .compatible = "qcom,ipq6018-qmp-pcie-phy", 3375cebc6ca7SJohan Hovold .data = &ipq6018_pciephy_cfg, 3376cebc6ca7SJohan Hovold }, { 3377cebc6ca7SJohan Hovold .compatible = "qcom,ipq8074-qmp-gen3-pcie-phy", 3378cebc6ca7SJohan Hovold .data = &ipq8074_pciephy_gen3_cfg, 3379cebc6ca7SJohan Hovold }, { 3380cebc6ca7SJohan Hovold .compatible = "qcom,ipq8074-qmp-pcie-phy", 3381cebc6ca7SJohan Hovold .data = &ipq8074_pciephy_cfg, 3382cebc6ca7SJohan Hovold }, { 3383cebc6ca7SJohan Hovold .compatible = "qcom,msm8998-qmp-pcie-phy", 3384cebc6ca7SJohan Hovold .data = &msm8998_pciephy_cfg, 3385cebc6ca7SJohan Hovold }, { 3386cebc6ca7SJohan Hovold .compatible = "qcom,sc8180x-qmp-pcie-phy", 3387cebc6ca7SJohan Hovold .data = &sc8180x_pciephy_cfg, 3388cebc6ca7SJohan Hovold }, { 3389d0a846baSJohan Hovold .compatible = "qcom,sc8280xp-qmp-gen3x1-pcie-phy", 3390d0a846baSJohan Hovold .data = &sc8280xp_qmp_gen3x1_pciephy_cfg, 3391d0a846baSJohan Hovold }, { 3392d0a846baSJohan Hovold .compatible = "qcom,sc8280xp-qmp-gen3x2-pcie-phy", 3393d0a846baSJohan Hovold .data = &sc8280xp_qmp_gen3x2_pciephy_cfg, 3394d0a846baSJohan Hovold }, { 33956c37a02bSJohan Hovold .compatible = "qcom,sc8280xp-qmp-gen3x4-pcie-phy", 33966c37a02bSJohan Hovold .data = &sc8280xp_qmp_gen3x4_pciephy_cfg, 33976c37a02bSJohan Hovold }, { 3398cebc6ca7SJohan Hovold .compatible = "qcom,sdm845-qhp-pcie-phy", 3399cebc6ca7SJohan Hovold .data = &sdm845_qhp_pciephy_cfg, 3400cebc6ca7SJohan Hovold }, { 3401cebc6ca7SJohan Hovold .compatible = "qcom,sdm845-qmp-pcie-phy", 3402cebc6ca7SJohan Hovold .data = &sdm845_qmp_pciephy_cfg, 3403cebc6ca7SJohan Hovold }, { 3404cebc6ca7SJohan Hovold .compatible = "qcom,sdx55-qmp-pcie-phy", 3405cebc6ca7SJohan Hovold .data = &sdx55_qmp_pciephy_cfg, 3406cebc6ca7SJohan Hovold }, { 3407*92bd868fSRohit Agarwal .compatible = "qcom,sdx65-qmp-gen4x2-pcie-phy", 3408*92bd868fSRohit Agarwal .data = &sdx65_qmp_pciephy_cfg, 3409*92bd868fSRohit Agarwal }, { 3410cebc6ca7SJohan Hovold .compatible = "qcom,sm8250-qmp-gen3x1-pcie-phy", 3411cebc6ca7SJohan Hovold .data = &sm8250_qmp_gen3x1_pciephy_cfg, 3412cebc6ca7SJohan Hovold }, { 3413cebc6ca7SJohan Hovold .compatible = "qcom,sm8250-qmp-gen3x2-pcie-phy", 3414cebc6ca7SJohan Hovold .data = &sm8250_qmp_gen3x2_pciephy_cfg, 3415cebc6ca7SJohan Hovold }, { 3416cebc6ca7SJohan Hovold .compatible = "qcom,sm8250-qmp-modem-pcie-phy", 3417cebc6ca7SJohan Hovold .data = &sm8250_qmp_gen3x2_pciephy_cfg, 3418cebc6ca7SJohan Hovold }, { 3419c7005273SDmitry Baryshkov .compatible = "qcom,sm8350-qmp-gen3x1-pcie-phy", 3420c7005273SDmitry Baryshkov .data = &sm8350_qmp_gen3x1_pciephy_cfg, 3421c7005273SDmitry Baryshkov }, { 3422c7005273SDmitry Baryshkov .compatible = "qcom,sm8350-qmp-gen3x2-pcie-phy", 3423c7005273SDmitry Baryshkov .data = &sm8350_qmp_gen3x2_pciephy_cfg, 3424c7005273SDmitry Baryshkov }, { 3425cebc6ca7SJohan Hovold .compatible = "qcom,sm8450-qmp-gen3x1-pcie-phy", 3426cebc6ca7SJohan Hovold .data = &sm8450_qmp_gen3x1_pciephy_cfg, 3427cebc6ca7SJohan Hovold }, { 3428cebc6ca7SJohan Hovold .compatible = "qcom,sm8450-qmp-gen4x2-pcie-phy", 3429cebc6ca7SJohan Hovold .data = &sm8450_qmp_gen4x2_pciephy_cfg, 3430269b70e8SAbel Vesa }, { 3431269b70e8SAbel Vesa .compatible = "qcom,sm8550-qmp-gen3x2-pcie-phy", 3432269b70e8SAbel Vesa .data = &sm8550_qmp_gen3x2_pciephy_cfg, 3433269b70e8SAbel Vesa }, { 3434269b70e8SAbel Vesa .compatible = "qcom,sm8550-qmp-gen4x2-pcie-phy", 3435269b70e8SAbel Vesa .data = &sm8550_qmp_gen4x2_pciephy_cfg, 3436cebc6ca7SJohan Hovold }, 3437cebc6ca7SJohan Hovold { }, 3438cebc6ca7SJohan Hovold }; 3439cebc6ca7SJohan Hovold MODULE_DEVICE_TABLE(of, qmp_pcie_of_match_table); 3440cebc6ca7SJohan Hovold 344127878615SJohan Hovold static struct platform_driver qmp_pcie_driver = { 344227878615SJohan Hovold .probe = qmp_pcie_probe, 344394a407ccSDmitry Baryshkov .driver = { 3444b35a5311SDmitry Baryshkov .name = "qcom-qmp-pcie-phy", 344527878615SJohan Hovold .of_match_table = qmp_pcie_of_match_table, 344694a407ccSDmitry Baryshkov }, 344794a407ccSDmitry Baryshkov }; 344894a407ccSDmitry Baryshkov 344927878615SJohan Hovold module_platform_driver(qmp_pcie_driver); 345094a407ccSDmitry Baryshkov 345194a407ccSDmitry Baryshkov MODULE_AUTHOR("Vivek Gautam <vivek.gautam@codeaurora.org>"); 3452b35a5311SDmitry Baryshkov MODULE_DESCRIPTION("Qualcomm QMP PCIe PHY driver"); 345394a407ccSDmitry Baryshkov MODULE_LICENSE("GPL v2"); 3454