xref: /openbmc/linux/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c (revision 92bd868f529a7771f15a141e8db6b6b62b32310a)
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