xref: /openbmc/linux/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c (revision 86f703762a9b6c1a8e3ce9fd62fd5353379be3a0)
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_address.h>
1711bf53a3SDmitry Baryshkov #include <linux/phy/pcie.h>
1894a407ccSDmitry Baryshkov #include <linux/phy/phy.h>
1994a407ccSDmitry Baryshkov #include <linux/platform_device.h>
206c37a02bSJohan Hovold #include <linux/regmap.h>
2194a407ccSDmitry Baryshkov #include <linux/regulator/consumer.h>
2294a407ccSDmitry Baryshkov #include <linux/reset.h>
2394a407ccSDmitry Baryshkov #include <linux/slab.h>
2494a407ccSDmitry Baryshkov 
2594a407ccSDmitry Baryshkov #include "phy-qcom-qmp.h"
26eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-misc-v3.h"
27eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v4.h"
28eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v4_20.h"
29eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v5.h"
30eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcs-pcie-v5_20.h"
31354fc6c5SAbel Vesa #include "phy-qcom-qmp-pcs-pcie-v6.h"
32baf172ccSAbel Vesa #include "phy-qcom-qmp-pcs-pcie-v6_20.h"
33eb5793fbSDmitry Baryshkov #include "phy-qcom-qmp-pcie-qhp.h"
3494a407ccSDmitry Baryshkov 
3594a407ccSDmitry Baryshkov /* QPHY_SW_RESET bit */
3694a407ccSDmitry Baryshkov #define SW_RESET				BIT(0)
3794a407ccSDmitry Baryshkov /* QPHY_POWER_DOWN_CONTROL */
3894a407ccSDmitry Baryshkov #define SW_PWRDN				BIT(0)
3994a407ccSDmitry Baryshkov #define REFCLK_DRV_DSBL				BIT(1)
4094a407ccSDmitry Baryshkov /* QPHY_START_CONTROL bits */
4194a407ccSDmitry Baryshkov #define SERDES_START				BIT(0)
4294a407ccSDmitry Baryshkov #define PCS_START				BIT(1)
4394a407ccSDmitry Baryshkov /* QPHY_PCS_STATUS bit */
4494a407ccSDmitry Baryshkov #define PHYSTATUS				BIT(6)
4594a407ccSDmitry Baryshkov #define PHYSTATUS_4_20				BIT(7)
4694a407ccSDmitry Baryshkov 
4794a407ccSDmitry Baryshkov #define PHY_INIT_COMPLETE_TIMEOUT		10000
4894a407ccSDmitry Baryshkov 
4994a407ccSDmitry Baryshkov struct qmp_phy_init_tbl {
5094a407ccSDmitry Baryshkov 	unsigned int offset;
5194a407ccSDmitry Baryshkov 	unsigned int val;
5294a407ccSDmitry Baryshkov 	/*
5394a407ccSDmitry Baryshkov 	 * mask of lanes for which this register is written
5494a407ccSDmitry Baryshkov 	 * for cases when second lane needs different values
5594a407ccSDmitry Baryshkov 	 */
5694a407ccSDmitry Baryshkov 	u8 lane_mask;
5794a407ccSDmitry Baryshkov };
5894a407ccSDmitry Baryshkov 
5994a407ccSDmitry Baryshkov #define QMP_PHY_INIT_CFG(o, v)		\
6094a407ccSDmitry Baryshkov 	{				\
6194a407ccSDmitry Baryshkov 		.offset = o,		\
6294a407ccSDmitry Baryshkov 		.val = v,		\
6394a407ccSDmitry Baryshkov 		.lane_mask = 0xff,	\
6494a407ccSDmitry Baryshkov 	}
6594a407ccSDmitry Baryshkov 
6694a407ccSDmitry Baryshkov #define QMP_PHY_INIT_CFG_LANE(o, v, l)	\
6794a407ccSDmitry Baryshkov 	{				\
6894a407ccSDmitry Baryshkov 		.offset = o,		\
6994a407ccSDmitry Baryshkov 		.val = v,		\
7094a407ccSDmitry Baryshkov 		.lane_mask = l,		\
7194a407ccSDmitry Baryshkov 	}
7294a407ccSDmitry Baryshkov 
7394a407ccSDmitry Baryshkov /* set of registers with offsets different per-PHY */
7494a407ccSDmitry Baryshkov enum qphy_reg_layout {
7594a407ccSDmitry Baryshkov 	/* PCS registers */
7694a407ccSDmitry Baryshkov 	QPHY_SW_RESET,
7794a407ccSDmitry Baryshkov 	QPHY_START_CTRL,
7894a407ccSDmitry Baryshkov 	QPHY_PCS_STATUS,
7994a407ccSDmitry Baryshkov 	QPHY_PCS_POWER_DOWN_CONTROL,
8094a407ccSDmitry Baryshkov 	/* Keep last to ensure regs_layout arrays are properly initialized */
8194a407ccSDmitry Baryshkov 	QPHY_LAYOUT_SIZE
8294a407ccSDmitry Baryshkov };
8394a407ccSDmitry Baryshkov 
84bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v2_regs_layout[QPHY_LAYOUT_SIZE] = {
85027d16b5SDmitry Baryshkov 	[QPHY_SW_RESET]			= QPHY_V2_PCS_SW_RESET,
86027d16b5SDmitry Baryshkov 	[QPHY_START_CTRL]		= QPHY_V2_PCS_START_CONTROL,
87027d16b5SDmitry Baryshkov 	[QPHY_PCS_STATUS]		= QPHY_V2_PCS_PCI_PCS_STATUS,
88027d16b5SDmitry Baryshkov 	[QPHY_PCS_POWER_DOWN_CONTROL]	= QPHY_V2_PCS_POWER_DOWN_CONTROL,
8994a407ccSDmitry Baryshkov };
9094a407ccSDmitry Baryshkov 
91bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v3_regs_layout[QPHY_LAYOUT_SIZE] = {
92027d16b5SDmitry Baryshkov 	[QPHY_SW_RESET]			= QPHY_V3_PCS_SW_RESET,
93027d16b5SDmitry Baryshkov 	[QPHY_START_CTRL]		= QPHY_V3_PCS_START_CONTROL,
94027d16b5SDmitry Baryshkov 	[QPHY_PCS_STATUS]		= QPHY_V3_PCS_PCS_STATUS,
95027d16b5SDmitry Baryshkov 	[QPHY_PCS_POWER_DOWN_CONTROL]	= QPHY_V3_PCS_POWER_DOWN_CONTROL,
9694a407ccSDmitry Baryshkov };
9794a407ccSDmitry Baryshkov 
9894a407ccSDmitry Baryshkov static const unsigned int sdm845_qhp_pciephy_regs_layout[QPHY_LAYOUT_SIZE] = {
9994a407ccSDmitry Baryshkov 	[QPHY_SW_RESET]			= 0x00,
10094a407ccSDmitry Baryshkov 	[QPHY_START_CTRL]		= 0x08,
10194a407ccSDmitry Baryshkov 	[QPHY_PCS_STATUS]		= 0x2ac,
1026d5b1e20SJohan Hovold 	[QPHY_PCS_POWER_DOWN_CONTROL]	= 0x04,
10394a407ccSDmitry Baryshkov };
10494a407ccSDmitry Baryshkov 
105bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v4_regs_layout[QPHY_LAYOUT_SIZE] = {
106027d16b5SDmitry Baryshkov 	[QPHY_SW_RESET]			= QPHY_V4_PCS_SW_RESET,
107027d16b5SDmitry Baryshkov 	[QPHY_START_CTRL]		= QPHY_V4_PCS_START_CONTROL,
108027d16b5SDmitry Baryshkov 	[QPHY_PCS_STATUS]		= QPHY_V4_PCS_PCS_STATUS1,
109027d16b5SDmitry Baryshkov 	[QPHY_PCS_POWER_DOWN_CONTROL]	= QPHY_V4_PCS_POWER_DOWN_CONTROL,
11094a407ccSDmitry Baryshkov };
11194a407ccSDmitry Baryshkov 
112bbe207a1SDmitry Baryshkov static const unsigned int pciephy_v5_regs_layout[QPHY_LAYOUT_SIZE] = {
113bbe207a1SDmitry Baryshkov 	[QPHY_SW_RESET]			= QPHY_V5_PCS_SW_RESET,
114bbe207a1SDmitry Baryshkov 	[QPHY_START_CTRL]		= QPHY_V5_PCS_START_CONTROL,
115bbe207a1SDmitry Baryshkov 	[QPHY_PCS_STATUS]		= QPHY_V5_PCS_PCS_STATUS1,
116bbe207a1SDmitry Baryshkov 	[QPHY_PCS_POWER_DOWN_CONTROL]	= QPHY_V5_PCS_POWER_DOWN_CONTROL,
117bbe207a1SDmitry Baryshkov };
118bbe207a1SDmitry Baryshkov 
11994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_serdes_tbl[] = {
12094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
12194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
12294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x0f),
12394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
12494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
12594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
12694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
12794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
12894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
12994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff),
13094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f),
13194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
13294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
13394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
13494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19),
13594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90),
13694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
13794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x03),
13894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0x55),
13994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0x55),
14094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
14194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d),
14294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04),
14394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
14494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x08),
14594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
14694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x34),
14794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
14894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33),
14994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
15094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x07),
15194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04),
15294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
15394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
15494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09),
15594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
15694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40),
15794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
15894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02),
15994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
16094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e),
16194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15),
16294a407ccSDmitry Baryshkov };
16394a407ccSDmitry Baryshkov 
16494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_tx_tbl[] = {
16594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
16694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
16794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
16894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
16994a407ccSDmitry Baryshkov };
17094a407ccSDmitry Baryshkov 
17194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_rx_tbl[] = {
17294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
17394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x1c),
17494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
17594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0a),
17694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
17794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
17894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
17994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04),
18094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04),
18194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x00),
18294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
18394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
18494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71),
18594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40),
18694a407ccSDmitry Baryshkov };
18794a407ccSDmitry Baryshkov 
18894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl msm8998_pcie_pcs_tbl[] = {
18994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04),
19094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00),
19194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01),
19294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
19394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20),
19494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
19594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
19694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
19794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0x99),
19894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03),
19994a407ccSDmitry Baryshkov };
20094a407ccSDmitry Baryshkov 
20194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_serdes_tbl[] = {
20294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_PER1, 0x7d),
20394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_PER2, 0x01),
20494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE1_MODE0, 0x0a),
20594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE2_MODE0, 0x05),
20694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE1_MODE1, 0x08),
20794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SSC_STEP_SIZE2_MODE1, 0x04),
20894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CLKBUFLR_EN, 0x18),
20994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90),
21094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SYS_CLK_CTRL, 0x02),
21194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_BUF_ENABLE, 0x07),
21294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_IVCO, 0x0f),
21394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE0, 0xd4),
21494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE0, 0x14),
21594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE1, 0xaa),
21694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE1, 0x29),
21794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TRIM, 0x0f),
21894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE0, 0x09),
21994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE1, 0x09),
22094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE0, 0x16),
22194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE1, 0x16),
22294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE0, 0x28),
22394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE1, 0x28),
22494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CTRL_BY_PSM, 0x01),
22594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_EN_SEL, 0x08),
22694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_RESETSM_CNTRL, 0x20),
22794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP_EN, 0x42),
22894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE0, 0x68),
22994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE1, 0x53),
23094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE0, 0xab),
23194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE0, 0xaa),
23294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE0, 0x02),
23394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE1, 0x55),
23494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE1, 0x55),
23594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE1, 0x05),
23694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE0, 0xa0),
23794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE1, 0xa0),
23894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE0, 0x24),
23994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE0, 0x02),
24094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE1, 0xb4),
24194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE1, 0x03),
24294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x32),
24394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x01),
24494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x00),
24594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CMN_CONFIG, 0x06),
24694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05),
24794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV_MODE1, 0x08),
24894a407ccSDmitry Baryshkov };
24994a407ccSDmitry Baryshkov 
25094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_tx_tbl[] = {
251079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
252079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x06),
253079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
25494a407ccSDmitry Baryshkov };
25594a407ccSDmitry Baryshkov 
25694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_rx_tbl[] = {
257079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
258079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x02),
259079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
260079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70),
261079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x61),
262079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
263079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1e),
264079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
265079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
266079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x73),
267079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
268079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c),
269079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03),
270079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
271079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xf0),
272079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x01),
273079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x2f),
274079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xd3),
275079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x40),
276079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x01),
277079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0x02),
278079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xc8),
279079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x09),
280079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb1),
281079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0x00),
282079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x02),
283079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8),
284079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x09),
285079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1),
286079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
28794a407ccSDmitry Baryshkov };
28894a407ccSDmitry Baryshkov 
28994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_pcs_tbl[] = {
29060f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNTRL1, 0x01),
29160f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d),
29260f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_G12S1_TXDEEMPH_M3P5DB, 0x10),
29360f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
29460f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
29560f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_DCC_CAL_CONFIG, 0x01),
29660f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x01),
297af664324SDmitry Baryshkov };
298af664324SDmitry Baryshkov 
299af664324SDmitry Baryshkov static const struct qmp_phy_init_tbl ipq6018_pcie_pcs_misc_tbl[] = {
30060f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG2, 0x0d),
30160f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
30260f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
30360f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
30460f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
30560f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
30660f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG1, 0x11),
30760f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00),
30860f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58),
30994a407ccSDmitry Baryshkov };
31094a407ccSDmitry Baryshkov 
31194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_serdes_tbl[] = {
31294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x18),
31394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CLK_ENABLE1, 0x10),
31494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_BG_TRIM, 0xf),
31594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP_EN, 0x1),
31694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_MAP, 0x0),
31794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER1, 0xff),
31894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_VCO_TUNE_TIMER2, 0x1f),
31994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CMN_CONFIG, 0x6),
32094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_PLL_IVCO, 0xf),
32194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_HSCLK_SEL, 0x0),
32294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SVS_MODE_CLK_SEL, 0x1),
32394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CORE_CLK_EN, 0x20),
32494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CORECLK_DIV, 0xa),
32594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_RESETSM_CNTRL, 0x20),
32694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_BG_TIMER, 0xa),
32794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_EN_SEL, 0xa),
32894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_DEC_START_MODE0, 0x82),
32994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START3_MODE0, 0x3),
33094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START2_MODE0, 0x55),
33194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_DIV_FRAC_START1_MODE0, 0x55),
33294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP3_MODE0, 0x0),
33394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP2_MODE0, 0xD),
33494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_LOCK_CMP1_MODE0, 0xD04),
33594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CLK_SELECT, 0x33),
33694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SYS_CLK_CTRL, 0x2),
33794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SYSCLK_BUF_ENABLE, 0x1f),
33894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CP_CTRL_MODE0, 0xb),
33994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_PLL_RCTRL_MODE0, 0x16),
34094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_PLL_CCTRL_MODE0, 0x28),
34194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x0),
34294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0x80),
34394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_BIAS_EN_CTRL_BY_PSM, 0x1),
34494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_EN_CENTER, 0x1),
34594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER1, 0x31),
34694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_PER2, 0x1),
34794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER1, 0x2),
34894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_ADJ_PER2, 0x0),
34994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE1, 0x2f),
35094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_SSC_STEP_SIZE2, 0x19),
35194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_COM_CLK_EP_DIV, 0x19),
35294a407ccSDmitry Baryshkov };
35394a407ccSDmitry Baryshkov 
35494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_tx_tbl[] = {
35594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN, 0x45),
35694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_TX_LANE_MODE, 0x6),
35794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_TX_RES_CODE_LANE_OFFSET, 0x2),
35894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_TX_RCV_DETECT_LVL_2, 0x12),
359f7c5cedbSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_TX_TX_EMP_POST1_LVL, 0x36),
36094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_TX_SLEW_CNTL, 0x0a),
36194a407ccSDmitry Baryshkov };
36294a407ccSDmitry Baryshkov 
36394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_rx_tbl[] = {
36494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_ENABLES, 0x1c),
36594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
36694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x1),
36794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x0),
36894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xdb),
36994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
37094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_RX_UCDR_SO_GAIN, 0x4),
37194a407ccSDmitry Baryshkov };
37294a407ccSDmitry Baryshkov 
37394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl ipq8074_pcie_pcs_tbl[] = {
3746cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_ENDPOINT_REFCLK_DRIVE, 0x4),
3756cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_OSC_DTCT_ACTIONS, 0x0),
3766cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x40),
3776cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x0),
3786cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x40),
3796cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_PLL_LOCK_CHK_DLY_TIME_AUXCLK_LSB, 0x0),
3806cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x40),
381c1ab64aaSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
3826cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_RX_SIGDET_LVL, 0x99),
3836cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_TXDEEMPH_M6DB_V0, 0x15),
3846cad2983SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V2_PCS_TXDEEMPH_M3P5DB_V0, 0xe),
38594a407ccSDmitry Baryshkov };
38694a407ccSDmitry Baryshkov 
387334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_serdes_tbl[] = {
388334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CLKBUFLR_EN, 0x18),
389334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_BIAS_EN_CTRL_BY_PSM, 0x01),
390334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x31),
391334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_IVCO, 0x0f),
392334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TRIM, 0x0f),
393334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CMN_CONFIG, 0x06),
394334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP_EN, 0x42),
395334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_RESETSM_CNTRL, 0x20),
396334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x01),
397334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE_MAP, 0x04),
398334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05),
399334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE_TIMER1, 0xff),
400334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE_TIMER2, 0x3f),
401334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x30),
402334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x21),
403334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE0, 0x82),
404334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE0, 0x03),
405334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE0, 0x355),
406334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE0, 0x35555),
407334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE0, 0x1a),
408334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE0, 0x1a0a),
409334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE0, 0xb),
410334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE0, 0x16),
411334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE0, 0x28),
412334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN1_MODE0, 0x0),
413334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE0, 0x40),
414334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE0, 0x02),
415334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE0, 0x24),
416334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05),
417334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x20),
418334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV, 0xa),
419334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_SELECT, 0x32),
420334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SYS_CLK_CTRL, 0x02),
421334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_BUF_ENABLE, 0x07),
422334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SYSCLK_EN_SEL, 0x08),
423334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_BG_TIMER, 0xa),
424334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_HSCLK_SEL, 0x1),
425334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DEC_START_MODE1, 0x68),
426334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START3_MODE1, 0x2),
427334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START2_MODE1, 0x2aa),
428334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_DIV_FRAC_START1_MODE1, 0x2aaab),
429334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90),
430334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP2_MODE1, 0x34),
431334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_LOCK_CMP1_MODE1, 0x3414),
432334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CP_CTRL_MODE1, 0x0b),
433334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_RCTRL_MODE1, 0x16),
434334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_PLL_CCTRL_MODE1, 0x28),
435334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN1_MODE1, 0x0),
436334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_INTEGLOOP_GAIN0_MODE1, 0x40),
437334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE2_MODE1, 0x03),
438334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_VCO_TUNE1_MODE1, 0xb4),
439334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_SVS_MODE_CLK_SEL, 0x05),
440334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORE_CLK_EN, 0x0),
441334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CORECLK_DIV_MODE1, 0x08),
442334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_EP_DIV_MODE0, 0x19),
443334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_EP_DIV_MODE1, 0x28),
444334fad18SRobert Marko 	QMP_PHY_INIT_CFG(QSERDES_PLL_CLK_ENABLE1, 0x90),
445334fad18SRobert Marko };
446334fad18SRobert Marko 
447334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_tx_tbl[] = {
448079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
449079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
450079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_HIGHZ_DRVR_EN, 0x10),
451079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x06),
452334fad18SRobert Marko };
453334fad18SRobert Marko 
454334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_rx_tbl[] = {
455079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03),
456079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c),
457079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
458079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0xe),
459079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4),
460079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1b),
461079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
462079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
463079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70),
464079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x73),
465079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
466079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0x00),
467079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x02),
468079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xc8),
469079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x09),
470079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0xb1),
471079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x01),
472079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0x02),
473079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xc8),
474079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x09),
475079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0xb1),
476079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xf0),
477079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0x2),
478079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0x2f),
479079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xd3),
480079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x40),
481079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
482079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
483079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
484079328a9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x02),
485334fad18SRobert Marko };
486334fad18SRobert Marko 
487334fad18SRobert Marko static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_pcs_tbl[] = {
48860f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNTRL2, 0x83),
48960f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNT_VAL_L, 0x9),
49060f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNT_VAL_H_TOL, 0x42),
49160f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_MAN_CODE, 0x40),
49260f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_FLL_CNTRL1, 0x01),
49360f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_H, 0x0),
49460f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x1),
4952584068aSChristian Marangi 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_G12S1_TXDEEMPH_M3P5DB, 0x10),
4962584068aSChristian Marangi 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_DCC_CAL_CONFIG, 0x01),
4972584068aSChristian Marangi 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
4982584068aSChristian Marangi 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d),
4992584068aSChristian Marangi };
5002584068aSChristian Marangi 
5012584068aSChristian Marangi static const struct qmp_phy_init_tbl ipq8074_pcie_gen3_pcs_misc_tbl[] = {
50260f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x0),
50360f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_H, 0x00),
50460f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
50560f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_H, 0x00),
50660f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
50760f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG1, 0x11),
50860f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG2, 0xb),
50960f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
51060f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_CONFIG2, 0x52),
51160f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_MODE2_CONFIG2, 0x50),
51260f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_MODE2_CONFIG4, 0x1a),
51360f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_MODE2_CONFIG5, 0x6),
51460f23414SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
515334fad18SRobert Marko };
516334fad18SRobert Marko 
51794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_serdes_tbl[] = {
51894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
51994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
52094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x007),
52194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
52294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
52394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
52494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
52594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
52694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
52794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff),
52894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f),
52994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
53094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
53194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
53294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19),
53394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90),
53494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
53594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
53694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
53794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
53894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
53994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d),
54094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04),
54194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
54294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
54394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
54494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
54594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_MODE, 0x01),
54694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33),
54794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
54894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x06),
54994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04),
55094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
55194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
55294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09),
55394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
55494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40),
55594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
55694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02),
55794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
55894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e),
55994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15),
56094a407ccSDmitry Baryshkov };
56194a407ccSDmitry Baryshkov 
56294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_tx_tbl[] = {
56394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
56494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
56594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
56694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
56794a407ccSDmitry Baryshkov };
56894a407ccSDmitry Baryshkov 
56994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_rx_tbl[] = {
57094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
57194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x10),
57294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
57394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
57494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
57594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
57694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
57794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04),
57894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04),
57994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x71),
58094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x59),
58194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_01, 0x59),
58294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
58394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
58494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71),
58594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40),
58694a407ccSDmitry Baryshkov };
58794a407ccSDmitry Baryshkov 
58894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_tbl[] = {
58994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04),
59094a407ccSDmitry Baryshkov 
59194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
59294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
59394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
59494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
59594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
59694a407ccSDmitry Baryshkov 
59794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00),
59894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01),
59994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
60094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20),
60194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
60294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
60394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
60494a407ccSDmitry Baryshkov 
60594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xbb),
60694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03),
60794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG1, 0x0d),
60894a407ccSDmitry Baryshkov 
60994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG4, 0x00),
61094a407ccSDmitry Baryshkov };
61194a407ccSDmitry Baryshkov 
61294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_misc_tbl[] = {
61394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_CONFIG2, 0x52),
61494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG2, 0x10),
61594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4, 0x1a),
61694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5, 0x06),
61794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
61894a407ccSDmitry Baryshkov };
61994a407ccSDmitry Baryshkov 
62094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_serdes_tbl[] = {
62194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SYSCLK_EN_SEL, 0x27),
62294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_EN_CENTER, 0x01),
62394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_PER1, 0x31),
62494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_PER2, 0x01),
62594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE1, 0xde),
62694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE2, 0x07),
62794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
62894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SSC_STEP_SIZE2_MODE1, 0x06),
62994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BIAS_EN_CKBUFLR_EN, 0x18),
63094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CLK_ENABLE1, 0xb0),
63194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP1_MODE0, 0x8c),
63294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP2_MODE0, 0x20),
63394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP1_MODE1, 0x14),
63494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP2_MODE1, 0x34),
63594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CP_CTRL_MODE0, 0x06),
63694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CP_CTRL_MODE1, 0x06),
63794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_RCTRL_MODE0, 0x16),
63894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_RCTRL_MODE1, 0x16),
63994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_CCTRL_MODE0, 0x36),
64094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_PLL_CCTRL_MODE1, 0x36),
64194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_RESTRIM_CTRL2, 0x05),
64294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_LOCK_CMP_EN, 0x42),
64394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DEC_START_MODE0, 0x82),
64494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DEC_START_MODE1, 0x68),
64594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START1_MODE0, 0x55),
64694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START2_MODE0, 0x55),
64794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START3_MODE0, 0x03),
64894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START1_MODE1, 0xab),
64994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START2_MODE1, 0xaa),
65094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_DIV_FRAC_START3_MODE1, 0x02),
65194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
65294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_INTEGLOOP_GAIN0_MODE1, 0x3f),
65394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VCO_TUNE_MAP, 0x10),
65494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CLK_SELECT, 0x04),
65594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_HSCLK_SEL1, 0x30),
65694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORECLK_DIV, 0x04),
65794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORE_CLK_EN, 0x73),
65894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CMN_CONFIG, 0x0c),
65994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_SVS_MODE_CLK_SEL, 0x15),
66094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CORECLK_DIV_MODE1, 0x04),
66194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_CMN_MODE, 0x01),
66294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VREGCLK_DIV1, 0x22),
66394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_VREGCLK_DIV2, 0x00),
66494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BGV_TRIM, 0x20),
66594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_COM_BG_CTRL, 0x07),
66694a407ccSDmitry Baryshkov };
66794a407ccSDmitry Baryshkov 
66894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_tx_tbl[] = {
66994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL0, 0x00),
67094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_TAP_EN, 0x0d),
67194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_TX_BAND_MODE, 0x01),
67294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_LANE_MODE, 0x1a),
67394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PARALLEL_RATE, 0x2f),
67494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE0, 0x09),
67594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE1, 0x09),
67694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CML_CTRL_MODE2, 0x1b),
67794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PREAMP_CTRL_MODE1, 0x01),
67894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PREAMP_CTRL_MODE2, 0x07),
67994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE0, 0x31),
68094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE1, 0x31),
68194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_MIXER_CTRL_MODE2, 0x03),
68294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_THRESH_DFE, 0x02),
68394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CGA_THRESH_DFE, 0x00),
68494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXENGINE_EN0, 0x12),
68594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_TRAIN_TIME, 0x25),
68694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_CTLE_DFE_OVRLP_TIME, 0x00),
68794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_REFRESH_TIME, 0x05),
68894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_ENABLE_TIME, 0x01),
68994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_VGA_GAIN, 0x26),
69094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DFE_GAIN, 0x12),
69194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EQ_GAIN, 0x04),
69294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_OFFSET_GAIN, 0x04),
69394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PRE_GAIN, 0x09),
69494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EQ_INTVAL, 0x15),
69594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_EDAC_INITVAL, 0x28),
69694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_INITB0, 0x7f),
69794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_INITB1, 0x07),
69894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RCVRDONE_THRESH1, 0x04),
69994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RXEQ_CTRL, 0x70),
70094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE0, 0x8b),
70194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE1, 0x08),
70294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_FO_GAIN_MODE2, 0x0a),
70394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE0, 0x03),
70494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE1, 0x04),
70594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_GAIN_MODE2, 0x04),
70694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_UCDR_SO_CONFIG, 0x0c),
70794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_BAND, 0x02),
70894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE0, 0x5c),
70994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE1, 0x3e),
71094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RCVR_PATH1_MODE2, 0x3f),
71194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_ENABLES, 0x01),
71294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_CNTRL, 0xa0),
71394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_SIGDET_DEGLITCH_CNTRL, 0x08),
71494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DCC_GAIN, 0x01),
71594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_EN_SIGNAL, 0xc3),
71694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_PSM_RX_EN_CAL, 0x00),
71794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_MISC_CNTRL0, 0xbc),
71894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_TS0_TIMER, 0x7f),
71994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DLL_HIGHDATARATE, 0x15),
72094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL1, 0x0c),
72194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_DRVR_CTRL2, 0x0f),
72294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RX_RESETCODE_OFFSET, 0x04),
72394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_VGA_INITVAL, 0x20),
72494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_L0_RSM_START, 0x01),
72594a407ccSDmitry Baryshkov };
72694a407ccSDmitry Baryshkov 
72794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdm845_qhp_pcie_pcs_tbl[] = {
72894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_POWER_STATE_CONFIG, 0x3f),
72994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_PCS_TX_RX_CONFIG, 0x50),
73094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_MAIN_V0_M3P5DB, 0x19),
73194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_POST_V0_M3P5DB, 0x07),
73294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_MAIN_V0_M6DB, 0x17),
73394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_TXMGN_POST_V0_M6DB, 0x09),
73494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(PCIE_GEN3_QHP_PHY_POWER_STATE_CONFIG5, 0x9f),
73594a407ccSDmitry Baryshkov };
73694a407ccSDmitry Baryshkov 
73794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_serdes_tbl[] = {
73894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08),
73994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34),
74094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08),
74194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
74294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x42),
74394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24),
74494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x03),
74594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0xb4),
74694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
74794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
74894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
74994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x03),
75094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x55),
75194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x55),
75294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1a),
75394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0a),
75494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x68),
75594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02),
75694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xaa),
75794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab),
75894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x34),
75994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x14),
76094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
76194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
76294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
76394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
76494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
76594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
76694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
76794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
76894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
76994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18),
77094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2),
77194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x07),
77294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
77394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
77494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
77594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde),
77694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07),
77794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
77894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x06),
77994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90),
78094a407ccSDmitry Baryshkov };
78194a407ccSDmitry Baryshkov 
78294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_tx_tbl[] = {
78394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
78494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x5),
78594a407ccSDmitry Baryshkov };
78694a407ccSDmitry Baryshkov 
78794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_rx_tbl[] = {
78894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03),
78994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c),
79094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
79194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x07),
79294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x6e),
79394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x6e),
79494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x4a),
79594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
79694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
79794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70),
79894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17),
79994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x54),
80094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x37),
80194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xd4),
80294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x54),
80394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xdb),
80494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x39),
80594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0x31),
80694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x24),
80794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xe4),
80894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xec),
80994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x39),
81094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x36),
81194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x7f),
81294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH, 0xff),
81394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff),
81494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0xdb),
81594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x75),
81694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
81794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
81894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0xa0),
81994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RCLK_AUXDATA_SEL, 0xc0),
82094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
82194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x05),
82294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
82394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x03),
82494a407ccSDmitry Baryshkov };
82594a407ccSDmitry Baryshkov 
82694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_pcs_tbl[] = {
82794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
82894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0xaa),
82994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RATE_SLEW_CNTRL1, 0x0b),
83094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d),
83194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x01),
83294a407ccSDmitry Baryshkov };
83394a407ccSDmitry Baryshkov 
83494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sc8180x_qmp_pcie_pcs_misc_tbl[] = {
83594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
83694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
83794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
83894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
83994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00),
84094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58),
84194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
84294a407ccSDmitry Baryshkov };
84394a407ccSDmitry Baryshkov 
844d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_pcie_serdes_tbl[] = {
845d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_EN_CENTER, 0x00),
846d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31),
847d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01),
848d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde),
849d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07),
850d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
851d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x06),
852d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90),
853d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
854d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06),
855d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06),
856d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16),
857d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16),
858d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36),
859d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36),
860d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08),
861d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x42),
862d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a),
863d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a),
864d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14),
865d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34),
866d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82),
867d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x68),
868d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55),
869d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55),
870d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03),
871d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0xab),
872d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0xaa),
873d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x02),
874d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
875d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE0, 0x24),
876d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE1, 0xb4),
877d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE2_MODE1, 0x03),
878d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34),
879d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x01),
880d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x08),
881d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xb9),
882d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
883d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0x94),
884d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18),
885d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
886d0a846baSJohan Hovold };
887d0a846baSJohan Hovold 
888d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_rc_serdes_tbl[] = {
889d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_BUF_ENABLE, 0x07),
890d0a846baSJohan Hovold };
891d0a846baSJohan Hovold 
892d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl[] = {
893d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
894d0a846baSJohan Hovold };
895d0a846baSJohan Hovold 
8966c37a02bSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x4_pcie_serdes_4ln_tbl[] = {
8976c37a02bSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x1c),
8986c37a02bSJohan Hovold };
8996c37a02bSJohan Hovold 
900d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_tx_tbl[] = {
901d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x20),
902d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x75),
903d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f),
904d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x1d),
905d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c),
906d0a846baSJohan Hovold };
907d0a846baSJohan Hovold 
908d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_rx_tbl[] = {
909d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x7f),
910d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0xff),
911d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbf),
912d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3f),
913d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xd8),
914d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xdc),
915d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xdc),
916d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0x5c),
917d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x34),
918d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa6),
919d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_TX_ADAPT_POST_THRESH, 0xf0),
920d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x34),
921d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x07),
922d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00),
923d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08),
924d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08),
925d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0),
926d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
927d0a846baSJohan Hovold };
928d0a846baSJohan Hovold 
929d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_pcs_tbl[] = {
930d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x05),
931d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0x77),
932d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RATE_SLEW_CNTRL1, 0x0b),
933d0a846baSJohan Hovold };
934d0a846baSJohan Hovold 
935d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x1_pcie_pcs_misc_tbl[] = {
936d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
937d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
938d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_EQ_CONFIG2, 0x0f),
939d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
940d0a846baSJohan Hovold };
941d0a846baSJohan Hovold 
942d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_tx_tbl[] = {
943d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x02, 1),
944d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x04, 2),
945d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xd5),
946d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f),
947d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x11),
948d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c),
949d0a846baSJohan Hovold };
950d0a846baSJohan Hovold 
951d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_rx_tbl[] = {
952d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x7f),
953d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0xff),
954d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0x7f),
955d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x34),
956d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xd8),
957d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xdc),
958d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xdc),
959d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0x5c),
960d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x34),
961d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa6),
962d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x34),
963d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f),
964d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00),
965d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08),
966d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08),
967d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0),
968d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
969d0a846baSJohan Hovold };
970d0a846baSJohan Hovold 
971d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_pcs_tbl[] = {
972d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x05),
973d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0x88),
974d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RATE_SLEW_CNTRL1, 0x0b),
975d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_EQ_CONFIG3, 0x0f),
976d0a846baSJohan Hovold };
977d0a846baSJohan Hovold 
978d0a846baSJohan Hovold static const struct qmp_phy_init_tbl sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl[] = {
979d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_POWER_STATE_CONFIG2, 0x1d),
980d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
981d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
982d0a846baSJohan Hovold 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
983d0a846baSJohan Hovold };
984d0a846baSJohan Hovold 
98594a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_serdes_tbl[] = {
98694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08),
98794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34),
98894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x08),
98994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
99094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x42),
99194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE0, 0x24),
99294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE2_MODE1, 0x03),
99394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE1_MODE1, 0xb4),
99494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
99594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
99694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x82),
99794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x03),
99894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE0, 0x55),
99994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE0, 0x55),
100094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x1a),
100194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x0a),
100294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x68),
100394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x02),
100494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0xaa),
100594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0xab),
100694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x34),
100794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x14),
100894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x01),
100994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
101094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
101194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
101294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
101394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
101494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
101594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
101694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
101794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18),
101894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2),
101994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
102094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
102194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
102294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xde),
102394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x07),
102494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
102594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x06),
102694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90),
102794a407ccSDmitry Baryshkov };
102894a407ccSDmitry Baryshkov 
102994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_serdes_tbl[] = {
103094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_BUF_ENABLE, 0x07),
103194a407ccSDmitry Baryshkov };
103294a407ccSDmitry Baryshkov 
103394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_tx_tbl[] = {
103494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RCV_DETECT_LVL_2, 0x12),
103594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_LANE_MODE_1, 0x35),
103694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_RES_CODE_LANE_OFFSET_TX, 0x11),
103794a407ccSDmitry Baryshkov };
103894a407ccSDmitry Baryshkov 
103994a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_rx_tbl[] = {
104094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_FO_GAIN, 0x0c),
104194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_GAIN, 0x03),
104294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_GM_CAL, 0x1b),
104394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_HIGH, 0x00),
104494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_IDAC_TSETTLE_LOW, 0xc0),
104594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_AUX_DATA_TCOARSE_TFINE, 0x30),
104694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL1, 0x04),
104794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_VGA_CAL_CNTRL2, 0x07),
104894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x7f),
104994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_UCDR_PI_CONTROLS, 0x70),
105094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
105194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
105294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0f),
105394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_CNTRL, 0x03),
105494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_ENABLES, 0x1c),
105594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_SIGDET_DEGLITCH_CNTRL, 0x1e),
105694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x17),
105794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_LOW, 0xd4),
105894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH, 0x54),
105994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH2, 0xdb),
106094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH3, 0x3b),
106194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_10_HIGH4, 0x31),
106294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_LOW, 0x24),
106394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH2, 0xff),
106494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH3, 0x7f),
106594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DCC_CTRL1, 0x0c),
106694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH, 0xe4),
106794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH2, 0xec),
106894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH3, 0x3b),
106994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_01_HIGH4, 0x36),
107094a407ccSDmitry Baryshkov };
107194a407ccSDmitry Baryshkov 
107294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_rx_tbl[] = {
107394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RCLK_AUXDATA_SEL, 0x00),
107494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x00),
107594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_EN_TIMER, 0x04),
107694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0x3f),
107794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x14),
107894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x30),
107994a407ccSDmitry Baryshkov };
108094a407ccSDmitry Baryshkov 
108194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_pcs_tbl[] = {
108294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_P2U3_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
108394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RX_SIGDET_LVL, 0x77),
108494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_RATE_SLEW_CNTRL1, 0x0b),
108594a407ccSDmitry Baryshkov };
108694a407ccSDmitry Baryshkov 
108794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_pcs_tbl[] = {
108894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x0d),
108994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG5, 0x12),
109094a407ccSDmitry Baryshkov };
109194a407ccSDmitry Baryshkov 
109294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_pcie_pcs_misc_tbl[] = {
109394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
109494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P1_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
109594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_L1P2_WAKEUP_DLY_TIME_AUXCLK_L, 0x01),
109694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P6_P7_PRE, 0x33),
109794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_PRE, 0x00),
109894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_PRESET_P10_POST, 0x58),
109994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
110094a407ccSDmitry Baryshkov };
110194a407ccSDmitry Baryshkov 
110294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x1_pcie_pcs_misc_tbl[] = {
110394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
110494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_EQ_CONFIG2, 0x0f),
110594a407ccSDmitry Baryshkov };
110694a407ccSDmitry Baryshkov 
110794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_tx_tbl[] = {
110894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_TX_PI_QEC_CTRL, 0x20),
110994a407ccSDmitry Baryshkov };
111094a407ccSDmitry Baryshkov 
111194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_rx_tbl[] = {
111294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_EQU_ADAPTOR_CNTRL1, 0x04),
111394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_LOW, 0xbf),
111494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_RX_MODE_00_HIGH4, 0x15),
111594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
111694a407ccSDmitry Baryshkov };
111794a407ccSDmitry Baryshkov 
111894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_pcs_tbl[] = {
111994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_REFGEN_REQ_CONFIG1, 0x05),
112094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_EQ_CONFIG2, 0x0f),
112194a407ccSDmitry Baryshkov };
112294a407ccSDmitry Baryshkov 
112394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8250_qmp_gen3x2_pcie_pcs_misc_tbl[] = {
112494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG2, 0x0d),
112594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
112694a407ccSDmitry Baryshkov };
112794a407ccSDmitry Baryshkov 
112894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_serdes_tbl[] = {
112994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIAS_EN_CLKBUFLR_EN, 0x18),
113094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_IVCO, 0x0f),
1131458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_EN, 0x46),
1132458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP_CFG, 0x04),
1133458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_TUNE_MAP, 0x02),
1134458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_SEL, 0x12),
1135458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_HSCLK_HS_SWITCH_SEL, 0x00),
1136458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE0, 0x05),
1137458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CORECLK_DIV_MODE1, 0x04),
1138458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MISC1, 0x88),
1139458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MISC2, 0x03),
1140458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_MODE, 0x17),
1141458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_VCO_DC_LEVEL_CTRL, 0x0b),
1142458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_HSCLK_SEL, 0x22),
1143458aa820SManivannan Sadhasivam };
1144458aa820SManivannan Sadhasivam 
1145364c748dSManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rc_serdes_tbl[] = {
1146364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_EN_CENTER, 0x01),
1147364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER1, 0x31),
1148364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_PER2, 0x01),
1149364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE0, 0xce),
1150364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE0, 0x0b),
1151364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE1_MODE1, 0x97),
1152364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SSC_STEP_SIZE2_MODE1, 0x0c),
1153364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_ENABLE1, 0x90),
1154364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_EP_DIV_MODE0, 0x0a),
1155364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_EP_DIV_MODE1, 0x10),
1156364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x06),
1157364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x06),
1158364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x16),
1159364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x16),
1160364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x36),
1161364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x36),
1162364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x08),
1163364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x04),
1164364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x0d),
1165364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0x0a),
1166364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x1a),
1167364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0xc3),
1168364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0xd0),
1169364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x05),
1170364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START1_MODE1, 0x55),
1171364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START2_MODE1, 0x55),
1172364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE1, 0x05),
1173364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CLK_SELECT, 0x34),
1174364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
1175364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
1176364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xd8),
1177364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x20),
1178364c748dSManivannan Sadhasivam };
1179364c748dSManivannan Sadhasivam 
1180458aa820SManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_ep_serdes_tbl[] = {
1181458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BG_TIMER, 0x02),
1182458aa820SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYS_CLK_CTRL, 0x07),
118394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE0, 0x0a),
118494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CP_CTRL_MODE1, 0x0a),
118594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE0, 0x19),
118694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_RCTRL_MODE1, 0x19),
118794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE0, 0x03),
118894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_PLL_CCTRL_MODE1, 0x03),
118994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_SYSCLK_EN_SEL, 0x00),
119094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE0, 0x7f),
119194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE0, 0x02),
119294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP1_MODE1, 0xff),
119394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_LOCK_CMP2_MODE1, 0x04),
119494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE0, 0x4b),
119594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DEC_START_MODE1, 0x50),
119694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_DIV_FRAC_START3_MODE0, 0x00),
119794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE0, 0xfb),
119894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE0, 0x01),
119994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN0_MODE1, 0xfb),
120094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_INTEGLOOP_GAIN1_MODE1, 0x01),
120194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_CMN_CONFIG, 0x04),
120294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0x56),
120394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1d),
120494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0x4b),
120594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x1f),
120694a407ccSDmitry Baryshkov };
120794a407ccSDmitry Baryshkov 
120894a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_tx_tbl[] = {
120994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_1, 0x05),
121094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_2, 0xf6),
121194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_LANE_MODE_3, 0x13),
121294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_VMODE_CTRL1, 0x00),
121394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_TX_PI_QEC_CTRL, 0x00),
121494a407ccSDmitry Baryshkov };
121594a407ccSDmitry Baryshkov 
121694a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rx_tbl[] = {
121794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_FO_GAIN_RATE2, 0x0c),
121894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_UCDR_PI_CONTROLS, 0x16),
121994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_AUX_DATA_TCOARSE_TFINE, 0x7f),
122094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_3, 0x55),
122194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_DAC_ENABLE1, 0x0c),
122294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_DAC_ENABLE2, 0x00),
122394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_VGA_CAL_CNTRL2, 0x08),
122494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x27),
122594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B1, 0x1a),
122694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B2, 0x5a),
122794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B3, 0x09),
122894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE_0_1_B4, 0x37),
122994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B0, 0xbd),
123094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B1, 0xf9),
123194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B2, 0xbf),
123294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B3, 0xce),
123394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE2_B4, 0x62),
123494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B0, 0xbf),
123594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B1, 0x7d),
123694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B2, 0xbf),
123794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B3, 0xcf),
123894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_RX_MODE_RATE3_B4, 0xd6),
123994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_PHPRE_CTRL, 0xa0),
124094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
124194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V4_20_RX_MARG_COARSE_CTRL2, 0x12),
124294a407ccSDmitry Baryshkov };
124394a407ccSDmitry Baryshkov 
124494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_pcs_tbl[] = {
124594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_RX_SIGDET_LVL, 0x77),
124694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG2, 0x01),
124794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG4, 0x16),
124894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_EQ_CONFIG5, 0x02),
124994a407ccSDmitry Baryshkov };
125094a407ccSDmitry Baryshkov 
125194a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sdx55_qmp_pcie_pcs_misc_tbl[] = {
125294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_EQ_CONFIG1, 0x17),
125394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G3_RXEQEVAL_TIME, 0x13),
125494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_RXEQEVAL_TIME, 0x13),
125594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG2, 0x01),
125694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02),
1257458aa820SManivannan Sadhasivam };
1258458aa820SManivannan Sadhasivam 
1259364c748dSManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_rc_pcs_misc_tbl[] = {
1260364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
1261364c748dSManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
1262364c748dSManivannan Sadhasivam };
1263364c748dSManivannan Sadhasivam 
1264458aa820SManivannan Sadhasivam static const struct qmp_phy_init_tbl sdx55_qmp_pcie_ep_pcs_misc_tbl[] = {
126594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
126694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V4_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
126794a407ccSDmitry Baryshkov };
126894a407ccSDmitry Baryshkov 
126992bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_serdes_tbl[] = {
127092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BG_TIMER, 0x02),
127192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
127292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYS_CLK_CTRL, 0x07),
127392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
127492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x27),
127592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x0a),
127692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x17),
127792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x19),
127892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x00),
127992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x03),
128092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x00),
128192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x46),
128292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_CFG, 0x04),
128392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0xff),
128492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x04),
128592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0xff),
128692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x09),
128792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x19),
128892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x28),
128992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE0, 0xfb),
129092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE0, 0x01),
129192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE1, 0xfb),
129292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE1, 0x01),
129392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
129492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x12),
129592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00),
129692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE0, 0x0a),
129792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x04),
129892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x60),
129992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MISC1, 0x88),
130092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_CONFIG, 0x06),
130192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE, 0x14),
130292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE_CONTD, 0x00),
130392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_DC_LEVEL_CTRL, 0x0f),
130492bd868fSRohit Agarwal };
130592bd868fSRohit Agarwal 
130692bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_tx_tbl[] = {
130792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_1, 0x05),
130892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_2, 0xf6),
130992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_3, 0x00),
131092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_VMODE_CTRL1, 0x00),
131192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_PI_QEC_CTRL, 0x00),
131292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1a),
131392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_RX, 0x0c),
131492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RCV_DETECT_LVL_2, 0x12),
131592bd868fSRohit Agarwal };
131692bd868fSRohit Agarwal 
131792bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_rx_tbl[] = {
131892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_0_1, 0x3f),
131992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_1, 0x06),
132092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_2, 0x06),
132192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_PRE_THRESH1, 0x3e),
132292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_PRE_THRESH2, 0x1e),
132392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH1, 0x00),
132492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH2, 0x1f),
132592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_MAIN_THRESH1, 0x02),
132692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_MAIN_THRESH2, 0x1d),
132792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_CNTRL1, 0x44),
132892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_CNTRL2, 0x00),
132992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL2, 0x00),
133092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL3, 0x4a),
133192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x74),
133292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x00),
133392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_SIGDET_ENABLES, 0x1c),
133492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_SIGDET_CNTRL, 0x03),
133592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
133692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B0, 0x04),
133792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B1, 0xcc),
133892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B2, 0x12),
133992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B3, 0xcc),
134092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B4, 0x64),
134192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B5, 0x4a),
134292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B6, 0x29),
134392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_PHPRE_CTRL, 0x20),
134492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DCC_CTRL1, 0x0c),
134592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE210, 0x1f),
134692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE3, 0x1f),
134792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE210, 0x1f),
134892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE3, 0x1f),
134992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE210, 0x1f),
135092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE3, 0x1f),
135192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH4_RATE3, 0x1f),
135292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH5_RATE3, 0x1f),
135392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH6_RATE3, 0x1f),
135492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE2, 0x0c),
135592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE3, 0x0a),
135692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_PI_CONTROLS, 0x16),
135792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_2_3, 0x37),
135892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_IDAC_SAOFFSET, 0x10),
135992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_3, 0x05),
136092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE1, 0x00),
136192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE2, 0x00),
136292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_MAN_VAL, 0x0a),
136392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_GM_CAL, 0x0f),
136492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0b),
136592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B0, 0xc5),
136692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B1, 0xac),
136792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B2, 0xb6),
136892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B3, 0xc0),
136992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B4, 0x07),
137092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B5, 0xfb),
137192bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B6, 0x0d),
137292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B0, 0xc5),
137392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B1, 0xee),
137492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B2, 0xbf),
137592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B3, 0xa0),
137692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B4, 0x81),
137792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B5, 0xde),
137892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B6, 0x7f),
137992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_EN_TIMER, 0x28),
138092bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
138192bd868fSRohit Agarwal };
138292bd868fSRohit Agarwal 
138392bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_pcs_tbl[] = {
138492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e),
138592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0xaa),
138692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG2, 0x0d),
138792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16),
138892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22),
138992bd868fSRohit Agarwal };
139092bd868fSRohit Agarwal 
139192bd868fSRohit Agarwal static const struct qmp_phy_init_tbl sdx65_qmp_pcie_pcs_misc_tbl[] = {
139292bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_EQ_CONFIG1, 0x16),
139392bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_RX_MARGINING_CONFIG3, 0x28),
139492bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_MODE2_CONFIG5, 0x08),
139592bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG2, 0x0d),
139692bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02),
139792bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN, 0x2e),
139892bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
139992bd868fSRohit Agarwal 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
140092bd868fSRohit Agarwal };
140192bd868fSRohit Agarwal 
1402c99649c3SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3_pcie_serdes_tbl[] = {
140394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08),
140494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34),
140594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x08),
140694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
140794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x42),
140894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE0, 0x24),
140994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE2_MODE1, 0x03),
141094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE1_MODE1, 0xb4),
141194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
141294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_HSCLK_SEL, 0x11),
141394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82),
141494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03),
141594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55),
141694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55),
141794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a),
141894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a),
141994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x68),
142094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x02),
142194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0xaa),
142294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0xab),
142394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34),
142494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14),
142594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x01),
142694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06),
142794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16),
142894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36),
142994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06),
143094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16),
143194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36),
143294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE0, 0x1e),
143394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE0, 0xca),
143494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE2_MODE1, 0x18),
143594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIN_VCOCAL_CMP_CODE1_MODE1, 0xa2),
143694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_EN_CENTER, 0x01),
143794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31),
143894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01),
143994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde),
144094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07),
144194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x4c),
144294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x06),
144394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90),
144494a407ccSDmitry Baryshkov };
144594a407ccSDmitry Baryshkov 
1446d8de49e9SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_rc_serdes_tbl[] = {
1447d8de49e9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_BUF_ENABLE, 0x07),
1448d8de49e9SDmitry Baryshkov };
1449d8de49e9SDmitry Baryshkov 
145094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_tx_tbl[] = {
145194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x20),
145294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x75),
145394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f),
145494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x16),
145594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x04),
145694a407ccSDmitry Baryshkov };
145794a407ccSDmitry Baryshkov 
1458c99649c3SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3_pcie_rx_tbl[] = {
145994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_LOW, 0x7f),
146094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH, 0xff),
146194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH4, 0xd8),
146294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_LOW, 0xdc),
146394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH, 0xdc),
146494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH2, 0x5c),
146594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH3, 0x34),
146694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_01_HIGH4, 0xa6),
146794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH3, 0x34),
146894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_GM_CAL, 0x00),
146994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH1, 0x08),
147094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SB2_THRESH2, 0x08),
147194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
147294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_TX_ADAPT_POST_THRESH, 0xf0),
1473d8de49e9SDmitry Baryshkov };
1474d8de49e9SDmitry Baryshkov 
1475d8de49e9SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_rc_rx_tbl[] = {
1476d8de49e9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbf),
1477d8de49e9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3f),
1478d8de49e9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_10_HIGH4, 0x38),
1479d8de49e9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x07),
1480d8de49e9SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0),
148194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_EQU_ADAPTOR_CNTRL4, 0x07),
148294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_FO_GAIN, 0x09),
148394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_SO_GAIN, 0x05),
148494a407ccSDmitry Baryshkov };
148594a407ccSDmitry Baryshkov 
1486c99649c3SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3_pcie_pcs_tbl[] = {
148794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RX_SIGDET_LVL, 0x77),
148894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_RATE_SLEW_CNTRL1, 0x0b),
148994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_REFGEN_REQ_CONFIG1, 0x05),
149094a407ccSDmitry Baryshkov };
149194a407ccSDmitry Baryshkov 
149294a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen3x1_pcie_pcs_misc_tbl[] = {
149394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
149494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
149594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_EQ_CONFIG2, 0x0f),
149694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
149794a407ccSDmitry Baryshkov };
149894a407ccSDmitry Baryshkov 
1499c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x1_pcie_tx_tbl[] = {
1500c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_PI_QEC_CTRL, 0x20),
1501c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0x75),
1502c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f),
1503c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x1d),
1504c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c),
1505c7005273SDmitry Baryshkov };
1506c7005273SDmitry Baryshkov 
1507c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x1_pcie_rc_rx_tbl[] = {
1508c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0xbf),
1509c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x3f),
1510c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x07),
1511c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_UCDR_PI_CONTROLS, 0xf0),
1512c7005273SDmitry Baryshkov };
1513c7005273SDmitry Baryshkov 
1514c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x2_pcie_rc_rx_tbl[] = {
1515c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH2, 0x7f),
1516c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_RX_MODE_00_HIGH3, 0x34),
1517c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_RX_VGA_CAL_CNTRL2, 0x0f),
1518c7005273SDmitry Baryshkov };
1519c7005273SDmitry Baryshkov 
1520c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x2_pcie_tx_tbl[] = {
1521c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x02, 1),
1522c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG_LANE(QSERDES_V5_TX_PI_QEC_CTRL, 0x04, 2),
1523c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_1, 0xd5),
1524c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_LANE_MODE_4, 0x3f),
1525c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_TX, 0x1d),
1526c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_TX_RES_CODE_LANE_OFFSET_RX, 0x0c),
1527c7005273SDmitry Baryshkov };
1528c7005273SDmitry Baryshkov 
1529c7005273SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8350_qmp_gen3x2_pcie_rc_pcs_tbl[] = {
1530c7005273SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_PCS_EQ_CONFIG2, 0x0f),
1531c7005273SDmitry Baryshkov };
1532c7005273SDmitry Baryshkov 
153394a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_serdes_tbl[] = {
1534f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
1535f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
1536f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x46),
1537f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_CFG, 0x04),
1538f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
1539f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x12),
1540f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00),
1541f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE0, 0x0a),
1542f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x04),
1543f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MISC1, 0x88),
1544f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_CONFIG, 0x06),
1545f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE, 0x14),
1546f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_DC_LEVEL_CTRL, 0x0f),
1547f5682f13SDmitry Baryshkov };
1548f5682f13SDmitry Baryshkov 
1549f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_rc_serdes_tbl[] = {
155094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31),
155194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01),
155294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde),
155394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07),
155494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x97),
155594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x0c),
155694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90),
155794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06),
155894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06),
155994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16),
156094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16),
156194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36),
156294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36),
156394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08),
156494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a),
156594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a),
156694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14),
156794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34),
156894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82),
156994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0xd0),
157094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55),
157194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55),
157294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03),
157394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0x55),
157494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0x55),
157594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x05),
157694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34),
157794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x20),
157894a407ccSDmitry Baryshkov };
157994a407ccSDmitry Baryshkov 
158094a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_tx_tbl[] = {
158194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_1, 0x05),
158294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_2, 0xf6),
158394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1a),
158494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_RX, 0x0c),
158594a407ccSDmitry Baryshkov };
158694a407ccSDmitry Baryshkov 
158794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_rx_tbl[] = {
158894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_PI_CONTROLS, 0x16),
158994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
159094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B1, 0xcc),
159194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B2, 0x12),
159294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B3, 0xcc),
159394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B5, 0x4a),
159494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B6, 0x29),
159594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B0, 0xc5),
159694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B1, 0xad),
159794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B2, 0xb6),
159894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B3, 0xc0),
159994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B4, 0x1f),
160094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B5, 0xfb),
160194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B6, 0x0f),
160294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B0, 0xc7),
160394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B1, 0xef),
160494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B2, 0xbf),
160594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B3, 0xa0),
160694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B4, 0x81),
160794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B5, 0xde),
160894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B6, 0x7f),
160994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_PHPRE_CTRL, 0x20),
161094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_0_1, 0x3f),
161194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_2_3, 0x37),
161294a407ccSDmitry Baryshkov 
161394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_3, 0x05),
161494a407ccSDmitry Baryshkov 
161594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE3, 0x1f),
161694a407ccSDmitry Baryshkov 
161794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE3, 0x1f),
161894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE3, 0x1f),
161994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH4_RATE3, 0x1f),
162094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH5_RATE3, 0x1f),
162194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH6_RATE3, 0x1f),
162294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE210, 0x1f),
162394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE210, 0x1f),
162494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE210, 0x1f),
162594a407ccSDmitry Baryshkov 
162694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE2, 0x0c),
162794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE3, 0x0a),
162894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_MAN_VAL, 0x0a),
162994a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0b),
163094a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_IDAC_SAOFFSET, 0x10),
163194a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE1, 0x00),
163294a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_GM_CAL, 0x0f),
163394a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH1, 0x00),
163494a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH2, 0x1f),
163594a407ccSDmitry Baryshkov };
163694a407ccSDmitry Baryshkov 
163794a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_pcs_tbl[] = {
1638883aebf6SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16),
1639883aebf6SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22),
1640883aebf6SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e),
1641883aebf6SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0x99),
164294a407ccSDmitry Baryshkov };
164394a407ccSDmitry Baryshkov 
164494a407ccSDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_pcs_misc_tbl[] = {
164594a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02),
164694a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_EQ_CONFIG1, 0x16),
164794a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_RX_MARGINING_CONFIG3, 0x28),
164894a407ccSDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN, 0x2e),
164994a407ccSDmitry Baryshkov };
165094a407ccSDmitry Baryshkov 
1651f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_rc_pcs_misc_tbl[] = {
1652f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
1653f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
16549ddcd920SManivannan Sadhasivam 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_PRESET_P10_POST, 0x00),
1655f5682f13SDmitry Baryshkov };
1656f5682f13SDmitry Baryshkov 
1657f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_ep_serdes_tbl[] = {
1658f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BG_TIMER, 0x02),
1659f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYS_CLK_CTRL, 0x07),
1660f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x27),
1661f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x0a),
1662f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x17),
1663f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x19),
1664f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x00),
1665f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x03),
1666f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x00),
1667f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0xff),
1668f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x04),
1669f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0xff),
1670f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x09),
1671f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x19),
1672f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0x28),
1673f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE0, 0xfb),
1674f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE0, 0x01),
1675f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN0_MODE1, 0xfb),
1676f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_INTEGLOOP_GAIN1_MODE1, 0x01),
1677f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x60),
1678f5682f13SDmitry Baryshkov };
1679f5682f13SDmitry Baryshkov 
1680f5682f13SDmitry Baryshkov static const struct qmp_phy_init_tbl sm8450_qmp_gen4x2_pcie_ep_pcs_misc_tbl[] = {
1681f5682f13SDmitry Baryshkov 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_MODE2_CONFIG5, 0x08),
1682f5682f13SDmitry Baryshkov };
1683f5682f13SDmitry Baryshkov 
1684269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_serdes_tbl[] = {
1685269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_EN_CENTER, 0x01),
1686269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER1, 0x62),
1687269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER2, 0x02),
1688269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE0, 0xf8),
1689269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE0, 0x01),
1690269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE1, 0x93),
1691269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE1, 0x01),
1692269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_ENABLE1, 0x90),
1693269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYS_CLK_CTRL, 0x82),
1694269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x07),
1695269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x02),
1696269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x02),
1697269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x16),
1698269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x16),
1699269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x36),
1700269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x36),
1701269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYSCLK_EN_SEL, 0x08),
1702269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_BG_TIMER, 0x0a),
1703269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x42),
1704269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x04),
1705269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x0d),
1706269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x0a),
1707269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x1a),
1708269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41),
1709269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x34),
1710269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE0, 0xab),
1711269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE0, 0xaa),
1712269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE0, 0x01),
1713269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE1, 0x55),
1714269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE1, 0x55),
1715269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE1, 0x01),
1716269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x14),
1717269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_SELECT, 0x34),
1718269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x01),
1719269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORECLK_DIV_MODE1, 0x04),
1720269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_CONFIG_1, 0x16),
1721269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_ADDITIONAL_MISC_3, 0x0f),
1722269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORE_CLK_EN, 0xa0),
1723269b70e8SAbel Vesa };
1724269b70e8SAbel Vesa 
1725269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_tx_tbl[] = {
1726269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_TX_LANE_MODE_1, 0x15),
1727269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_TX_LANE_MODE_4, 0x3f),
1728269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_TX_PI_QEC_CTRL, 0x02),
1729269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_TX_RES_CODE_LANE_OFFSET_RX, 0x06),
1730269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_TX_RES_CODE_LANE_OFFSET_TX, 0x18),
1731269b70e8SAbel Vesa };
1732269b70e8SAbel Vesa 
1733269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_rx_tbl[] = {
1734269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
1735269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_GM_CAL, 0x11),
1736269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH, 0xbf),
1737269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH2, 0xbf),
1738269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH3, 0xb7),
1739269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_HIGH4, 0xea),
1740269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_00_LOW, 0x3f),
1741269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH, 0x5c),
1742269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH2, 0x9c),
1743269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH3, 0x1a),
1744269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_HIGH4, 0x89),
1745269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_01_LOW, 0xdc),
1746269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH, 0x94),
1747269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH2, 0x5b),
1748269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH3, 0x1a),
1749269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_MODE_10_HIGH4, 0x89),
1750269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_TX_ADAPT_POST_THRESH, 0xf0),
1751269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_FO_GAIN, 0x09),
1752269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_SO_GAIN, 0x05),
1753269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_SB2_THRESH1, 0x08),
1754269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_UCDR_SB2_THRESH2, 0x08),
1755269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_VGA_CAL_CNTRL2, 0x0f),
1756269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_SIDGET_ENABLES, 0x1c),
1757269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_RX_IDAC_TSETTLE_LOW, 0x07),
1758269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_RX_SIGDET_CAL_TRIM, 0x08),
1759269b70e8SAbel Vesa };
1760269b70e8SAbel Vesa 
1761269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_pcs_tbl[] = {
1762269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_PCS_REFGEN_REQ_CONFIG1, 0x05),
1763269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_PCS_RX_SIGDET_LVL, 0x77),
1764269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_PCS_RATE_SLEW_CNTRL1, 0x0b),
1765269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_PCS_EQ_CONFIG2, 0x0f),
1766269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_PCS_PCS_TX_RX_CONFIG, 0x8c),
1767269b70e8SAbel Vesa };
1768269b70e8SAbel Vesa 
1769269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen3x2_pcie_pcs_misc_tbl[] = {
1770269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_POWER_STATE_CONFIG2, 0x1d),
1771269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_POWER_STATE_CONFIG4, 0x07),
1772269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
1773269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
1774269b70e8SAbel Vesa };
1775269b70e8SAbel Vesa 
1776269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_serdes_tbl[] = {
1777269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE1, 0x26),
1778269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE1, 0x03),
1779269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE1, 0x06),
1780269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE1, 0x16),
1781269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE1, 0x36),
1782269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORECLK_DIV_MODE1, 0x04),
1783269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE1, 0x0a),
1784269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE1, 0x1a),
1785269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE1, 0x68),
1786269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE1, 0xab),
1787269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE1, 0xaa),
1788269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE1, 0x02),
1789269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_SEL_1, 0x12),
1790269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE1_MODE0, 0xf8),
1791269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_STEP_SIZE2_MODE0, 0x01),
1792269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CP_CTRL_MODE0, 0x06),
1793269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_RCTRL_MODE0, 0x16),
1794269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CCTRL_MODE0, 0x36),
1795269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_CORE_CLK_DIV_MODE0, 0x0a),
1796269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP1_MODE0, 0x04),
1797269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP2_MODE0, 0x0d),
1798269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DEC_START_MODE0, 0x41),
1799269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START1_MODE0, 0xab),
1800269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START2_MODE0, 0xaa),
1801269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_DIV_FRAC_START3_MODE0, 0x01),
1802269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_HSCLK_HS_SWITCH_SEL_1, 0x00),
1803269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_BG_TIMER, 0x0a),
1804269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_EN_CENTER, 0x01),
1805269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER1, 0x62),
1806269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SSC_PER2, 0x02),
1807269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_POST_DIV_MUX, 0x40),
1808269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_BIAS_EN_CLK_BUFLR_EN, 0x14),
1809269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_ENABLE1, 0x90),
1810269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYS_CLK_CTRL, 0x82),
1811269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_IVCO, 0x0f),
1812269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_SYSCLK_EN_SEL, 0x08),
1813269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_EN, 0x46),
1814269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_LOCK_CMP_CFG, 0x04),
1815269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_VCO_TUNE_MAP, 0x14),
1816269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CLK_SELECT, 0x34),
1817269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CORE_CLK_EN, 0xa0),
1818269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_CONFIG_1, 0x06),
1819269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_MISC_1, 0x88),
1820269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_CMN_MODE, 0x14),
1821269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_COM_PLL_VCO_DC_LEVEL_CTRL, 0x0f),
1822269b70e8SAbel Vesa };
1823269b70e8SAbel Vesa 
1824269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_ln_shrd_tbl[] = {
1825269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RXCLK_DIV2_CTRL, 0x01),
1826269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_Q_EN_RATES, 0xe),
1827269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_DFE_DAC_ENABLE1, 0x00),
1828269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH1, 0x00),
1829269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH2, 0x1f),
1830269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B0, 0x12),
1831269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B1, 0x12),
1832269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B2, 0xdb),
1833269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B3, 0x9a),
1834269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B4, 0x38),
1835269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B5, 0xb6),
1836269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B6, 0x64),
1837269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH1_RATE210, 0x1f),
1838269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH1_RATE3, 0x1f),
1839269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH2_RATE210, 0x1f),
1840269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH2_RATE3, 0x1f),
1841269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH3_RATE210, 0x1f),
1842269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH3_RATE3, 0x1f),
1843269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH4_RATE3, 0x1f),
1844269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH5_RATE3, 0x1f),
1845269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH6_RATE3, 0x1f),
1846269b70e8SAbel Vesa };
1847269b70e8SAbel Vesa 
1848269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_tx_tbl[] = {
1849269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1d),
1850269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_RES_CODE_LANE_OFFSET_RX, 0x03),
1851269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_1, 0x01),
1852269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_2, 0x00),
1853269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_LANE_MODE_3, 0x51),
1854269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_TX_TRAN_DRVR_EMP_EN, 0x34),
1855269b70e8SAbel Vesa };
1856269b70e8SAbel Vesa 
1857269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_rx_tbl[] = {
1858269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_FO_GAIN_RATE_2, 0x0a),
1859269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_FO_GAIN_RATE_3, 0x0a),
1860269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_PI_CONTROLS, 0x16),
1861269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_UCDR_SO_ACC_DEFAULT_VAL_RATE3, 0x00),
1862269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_IVCM_CAL_CTRL2, 0x80),
1863269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_IVCM_POSTCAL_OFFSET, 0x7c),
1864269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_DFE_3, 0x05),
1865269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_VGA_CAL_MAN_VAL, 0x0a),
1866269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_GM_CAL, 0x0d),
1867269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_EQU_ADAPTOR_CNTRL4, 0x0b),
1868269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_SIGDET_ENABLES, 0x1c),
1869269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_PHPRE_CTRL, 0x20),
1870269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x30),
1871269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_Q_PI_INTRINSIC_BIAS_RATE32, 0x09),
1872269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B0, 0x14),
1873269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B1, 0xb3),
1874269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B2, 0x58),
1875269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B3, 0x9a),
1876269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B4, 0x26),
1877269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B5, 0xb6),
1878269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B6, 0xee),
1879269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B0, 0xdb),
1880269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B1, 0xdb),
1881269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B2, 0xa0),
1882269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B3, 0xdf),
1883269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B4, 0x78),
1884269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B5, 0x76),
1885269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE3_B6, 0xff),
1886269b70e8SAbel Vesa };
1887269b70e8SAbel Vesa 
1888269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_pcs_tbl[] = {
1889269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_G3S2_PRE_GAIN, 0x2e),
1890269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_COM_ELECIDLE_DLY_SEL, 0x25),
1891269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_EQ_CONFIG4, 0x00),
1892269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_EQ_CONFIG5, 0x22),
1893269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_TX_RX_CONFIG1, 0x04),
1894269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_TX_RX_CONFIG2, 0x02),
1895269b70e8SAbel Vesa };
1896269b70e8SAbel Vesa 
1897269b70e8SAbel Vesa static const struct qmp_phy_init_tbl sm8550_qmp_gen4x2_pcie_pcs_misc_tbl[] = {
1898269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_ENDPOINT_REFCLK_DRIVE, 0xc1),
1899269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_OSC_DTCT_ATCIONS, 0x00),
1900269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_EQ_CONFIG1, 0x16),
1901269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_EQ_CONFIG5, 0x02),
1902269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_PRE_GAIN, 0x2e),
1903269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG1, 0x03),
1904269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG3, 0x28),
1905269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_TX_RX_CONFIG, 0xc0),
1906269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_POWER_STATE_CONFIG2, 0x1d),
1907269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG5, 0x0f),
1908269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G3_FOM_EQ_CONFIG5, 0xf2),
1909269b70e8SAbel Vesa 	QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_FOM_EQ_CONFIG5, 0xf2),
1910269b70e8SAbel Vesa };
1911269b70e8SAbel Vesa 
1912a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x2_pcie_serdes_alt_tbl[] = {
1913a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
1914a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
1915a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x46),
1916a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_CFG, 0x04),
1917a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
1918a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x12),
1919a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00),
1920a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE0, 0x0a),
1921a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x04),
1922a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MISC1, 0x88),
1923a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x60),
1924a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_CONFIG, 0x06),
1925a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE, 0x14),
1926a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_DC_LEVEL_CTRL, 0x0f),
1927a05b6d51SMrinmay Sarkar };
1928a05b6d51SMrinmay Sarkar 
1929a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x2_pcie_rc_serdes_alt_tbl[] = {
1930a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_EN_CENTER, 0x00),
1931a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31),
1932a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01),
1933a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde),
1934a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07),
1935a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x97),
1936a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x0c),
1937a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90),
1938a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06),
1939a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06),
1940a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16),
1941a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16),
1942a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36),
1943a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36),
1944a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08),
1945a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a),
1946a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a),
1947a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14),
1948a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34),
1949a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82),
1950a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0xd0),
1951a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55),
1952a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55),
1953a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03),
1954a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0x55),
1955a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0x55),
1956a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x05),
1957a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34),
1958a05b6d51SMrinmay Sarkar };
1959a05b6d51SMrinmay Sarkar 
1960a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x2_pcie_rx_alt_tbl[] = {
1961a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_PI_CONTROLS, 0x16),
1962a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
1963a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B0, 0x9a),
1964a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B1, 0xb0),
1965a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B2, 0x92),
1966a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B3, 0xf0),
1967a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B4, 0x42),
1968a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B5, 0x99),
1969a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B6, 0x29),
1970a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B0, 0x9a),
1971a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B1, 0xfb),
1972a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B2, 0x92),
1973a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B3, 0xec),
1974a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B4, 0x43),
1975a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B5, 0xdd),
1976a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B6, 0x0d),
1977a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B0, 0xf3),
1978a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B1, 0xf8),
1979a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B2, 0xec),
1980a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B3, 0xd6),
1981a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B4, 0x83),
1982a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B5, 0xf5),
1983a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B6, 0x5e),
1984a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_PHPRE_CTRL, 0x20),
1985a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_0_1, 0x3f),
1986a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_2_3, 0x37),
1987a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_3, 0x00),
1988a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE3, 0x1f),
1989a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE3, 0x1f),
1990a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE3, 0x1f),
1991a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH4_RATE3, 0x1f),
1992a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH5_RATE3, 0x1f),
1993a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH6_RATE3, 0x1f),
1994a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE210, 0x1f),
1995a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE210, 0x1f),
1996a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE210, 0x1f),
1997a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_Q_PI_INTRINSIC_BIAS_RATE32, 0x09),
1998a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE2, 0x0c),
1999a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE3, 0x08),
2000a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_SO_GAIN_RATE3, 0x04),
2001a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_CNTRL1, 0x04),
2002a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_MAN_VAL, 0x08),
2003a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0b),
2004a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x7c),
2005a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_IDAC_SAOFFSET, 0x10),
2006a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE1, 0x00),
2007a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_GM_CAL, 0x05),
2008a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH1, 0x00),
2009a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH2, 0x1f),
2010a05b6d51SMrinmay Sarkar };
2011a05b6d51SMrinmay Sarkar 
2012a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4_pcie_tx_tbl[] = {
2013a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_TX, 0x1f),
2014a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_RES_CODE_LANE_OFFSET_RX, 0x07),
2015a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_1, 0x05),
2016a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_2, 0xf6),
2017a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_TX_LANE_MODE_3, 0x0f),
2018a05b6d51SMrinmay Sarkar };
2019a05b6d51SMrinmay Sarkar 
2020a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4_pcie_pcs_misc_tbl[] = {
2021a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_EQ_CONFIG1, 0x16),
2022a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_EQ_CONFIG5, 0x02),
2023a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_G4_PRE_GAIN, 0x2e),
2024a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_RX_MARGINING_CONFIG3, 0x28),
2025a05b6d51SMrinmay Sarkar };
2026a05b6d51SMrinmay Sarkar 
2027a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4_pcie_rc_pcs_misc_tbl[] = {
2028a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_POWER_STATE_CONFIG2, 0x1d),
2029a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_ENDPOINT_REFCLK_DRIVE, 0xc1),
2030a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_PCIE_OSC_DTCT_ACTIONS, 0x00),
2031a05b6d51SMrinmay Sarkar };
2032a05b6d51SMrinmay Sarkar 
2033a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x2_pcie_pcs_alt_tbl[] = {
2034a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16),
2035a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22),
2036a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_SW_CTRL2, 0x00),
2037a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_LANE1_INSIG_MX_CTRL2, 0x00),
2038a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e),
2039a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0x66),
2040a05b6d51SMrinmay Sarkar };
2041a05b6d51SMrinmay Sarkar 
2042a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x4_pcie_rx_alt_tbl[] = {
2043a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_0_1, 0x3f),
2044a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_AUX_DATA_THRESH_BIN_RATE_2_3, 0x37),
2045a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_3, 0x00),
2046a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_CTLE_POST_CAL_OFFSET, 0x38),
2047a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_DFE_DAC_ENABLE1, 0x00),
2048a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_GM_CAL, 0x05),
2049a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_PHPRE_CTRL, 0x20),
2050a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQU_ADAPTOR_CNTRL4, 0x0b),
2051a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x7c),
2052a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_IDAC_SAOFFSET, 0x10),
2053a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE210, 0x1f),
2054a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH1_RATE3, 0x1f),
2055a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE210, 0x1f),
2056a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH2_RATE3, 0x1f),
2057a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE210, 0x1f),
2058a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH3_RATE3, 0x1f),
2059a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH4_RATE3, 0x1f),
2060a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH5_RATE3, 0x1f),
2061a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MARG_COARSE_THRESH6_RATE3, 0x1f),
2062a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_Q_PI_INTRINSIC_BIAS_RATE32, 0x09),
2063a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B0, 0x99),
2064a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B1, 0xb0),
2065a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B2, 0x92),
2066a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B3, 0xf0),
2067a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B4, 0x42),
2068a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B5, 0x00),
2069a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE_0_1_B6, 0x20),
2070a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B0, 0x9a),
2071a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B1, 0xb6),
2072a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B2, 0x92),
2073a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B3, 0xf0),
2074a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B4, 0x43),
2075a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B5, 0xdd),
2076a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE2_B6, 0x0d),
2077a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B0, 0xf3),
2078a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B1, 0xf6),
2079a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B2, 0xee),
2080a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B3, 0xd2),
2081a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B4, 0x83),
2082a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B5, 0xf9),
2083a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_RX_MODE_RATE3_B6, 0x3d),
2084a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH1, 0x00),
2085a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_TX_ADAPT_POST_THRESH2, 0x1f),
2086a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE2, 0x0c),
2087a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_FO_GAIN_RATE3, 0x08),
2088a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_SO_GAIN_RATE3, 0x04),
2089a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_UCDR_PI_CONTROLS, 0x16),
2090a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_CNTRL1, 0x04),
2091a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_20_RX_VGA_CAL_MAN_VAL, 0x08),
2092a05b6d51SMrinmay Sarkar };
2093a05b6d51SMrinmay Sarkar 
2094a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x4_pcie_pcs_alt_tbl[] = {
2095a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG4, 0x16),
2096a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_EQ_CONFIG5, 0x22),
2097a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_G3S2_PRE_GAIN, 0x2e),
2098a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QPHY_V5_20_PCS_RX_SIGDET_LVL, 0x66),
2099a05b6d51SMrinmay Sarkar };
2100a05b6d51SMrinmay Sarkar 
2101a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x4_pcie_serdes_alt_tbl[] = {
2102a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_IVCO, 0x0f),
2103a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE0, 0x36),
2104a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_CCTRL_MODE1, 0x36),
2105a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_EN, 0x46),
2106a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP_CFG, 0x04),
2107a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_TUNE_MAP, 0x02),
2108a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_SEL, 0x12),
2109a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_HSCLK_HS_SWITCH_SEL, 0x00),
2110a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE0, 0x0a),
2111a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORECLK_DIV_MODE1, 0x04),
2112a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MISC1, 0x88),
2113a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CORE_CLK_EN, 0x60),
2114a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_CONFIG, 0x06),
2115a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CMN_MODE, 0x14),
2116a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_VCO_DC_LEVEL_CTRL, 0x0f),
2117a05b6d51SMrinmay Sarkar };
2118a05b6d51SMrinmay Sarkar 
2119a05b6d51SMrinmay Sarkar 
2120a05b6d51SMrinmay Sarkar static const struct qmp_phy_init_tbl sa8775p_qmp_gen4x4_pcie_rc_serdes_alt_tbl[] = {
2121a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_EN_CENTER, 0x00),
2122a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER1, 0x31),
2123a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_PER2, 0x01),
2124a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE0, 0xde),
2125a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE0, 0x07),
2126a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE1_MODE1, 0x97),
2127a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SSC_STEP_SIZE2_MODE1, 0x0c),
2128a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_BIAS_EN_CLKBUFLR_EN, 0x1c),
2129a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_ENABLE1, 0x90),
2130a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE0, 0x06),
2131a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CP_CTRL_MODE1, 0x06),
2132a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE0, 0x16),
2133a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_PLL_RCTRL_MODE1, 0x16),
2134a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_SYSCLK_EN_SEL, 0x08),
2135a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE0, 0x0a),
2136a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE0, 0x1a),
2137a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP1_MODE1, 0x14),
2138a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_LOCK_CMP2_MODE1, 0x34),
2139a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE0, 0x82),
2140a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DEC_START_MODE1, 0xd0),
2141a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE0, 0x55),
2142a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE0, 0x55),
2143a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE0, 0x03),
2144a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START1_MODE1, 0x55),
2145a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START2_MODE1, 0x55),
2146a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_DIV_FRAC_START3_MODE1, 0x05),
2147a05b6d51SMrinmay Sarkar 	QMP_PHY_INIT_CFG(QSERDES_V5_COM_CLK_SELECT, 0x34),
2148a05b6d51SMrinmay Sarkar };
2149a05b6d51SMrinmay Sarkar 
2150d0a846baSJohan Hovold struct qmp_pcie_offsets {
2151d0a846baSJohan Hovold 	u16 serdes;
2152d0a846baSJohan Hovold 	u16 pcs;
2153d0a846baSJohan Hovold 	u16 pcs_misc;
2154d0a846baSJohan Hovold 	u16 tx;
2155d0a846baSJohan Hovold 	u16 rx;
2156d0a846baSJohan Hovold 	u16 tx2;
2157d0a846baSJohan Hovold 	u16 rx2;
2158269b70e8SAbel Vesa 	u16 ln_shrd;
2159d0a846baSJohan Hovold };
2160d0a846baSJohan Hovold 
2161d8c9a1e9SJohan Hovold struct qmp_phy_cfg_tbls {
21622566ad8eSDmitry Baryshkov 	const struct qmp_phy_init_tbl *serdes;
21632566ad8eSDmitry Baryshkov 	int serdes_num;
21642566ad8eSDmitry Baryshkov 	const struct qmp_phy_init_tbl *tx;
21652566ad8eSDmitry Baryshkov 	int tx_num;
21662566ad8eSDmitry Baryshkov 	const struct qmp_phy_init_tbl *rx;
21672566ad8eSDmitry Baryshkov 	int rx_num;
21682566ad8eSDmitry Baryshkov 	const struct qmp_phy_init_tbl *pcs;
21692566ad8eSDmitry Baryshkov 	int pcs_num;
21702566ad8eSDmitry Baryshkov 	const struct qmp_phy_init_tbl *pcs_misc;
21712566ad8eSDmitry Baryshkov 	int pcs_misc_num;
2172269b70e8SAbel Vesa 	const struct qmp_phy_init_tbl *ln_shrd;
2173269b70e8SAbel Vesa 	int ln_shrd_num;
21742566ad8eSDmitry Baryshkov };
21752566ad8eSDmitry Baryshkov 
217694a407ccSDmitry Baryshkov /* struct qmp_phy_cfg - per-PHY initialization config */
217794a407ccSDmitry Baryshkov struct qmp_phy_cfg {
2178f02543faSJohan Hovold 	int lanes;
217994a407ccSDmitry Baryshkov 
2180d0a846baSJohan Hovold 	const struct qmp_pcie_offsets *offsets;
2181d0a846baSJohan Hovold 
21822566ad8eSDmitry Baryshkov 	/* Main init sequence for PHY blocks - serdes, tx, rx, pcs */
2183d8c9a1e9SJohan Hovold 	const struct qmp_phy_cfg_tbls tbls;
21842566ad8eSDmitry Baryshkov 	/*
218511bf53a3SDmitry Baryshkov 	 * Additional init sequences for PHY blocks, providing additional
218611bf53a3SDmitry Baryshkov 	 * register programming. They are used for providing separate sequences
218711bf53a3SDmitry Baryshkov 	 * for the Root Complex and End Point use cases.
218811bf53a3SDmitry Baryshkov 	 *
218911bf53a3SDmitry Baryshkov 	 * If EP mode is not supported, both tables can be left unset.
21902566ad8eSDmitry Baryshkov 	 */
2191d8c9a1e9SJohan Hovold 	const struct qmp_phy_cfg_tbls *tbls_rc;
2192d8c9a1e9SJohan Hovold 	const struct qmp_phy_cfg_tbls *tbls_ep;
219394a407ccSDmitry Baryshkov 
21946c37a02bSJohan Hovold 	const struct qmp_phy_init_tbl *serdes_4ln_tbl;
21956c37a02bSJohan Hovold 	int serdes_4ln_num;
21966c37a02bSJohan Hovold 
219794a407ccSDmitry Baryshkov 	/* clock ids to be requested */
219894a407ccSDmitry Baryshkov 	const char * const *clk_list;
219994a407ccSDmitry Baryshkov 	int num_clks;
220094a407ccSDmitry Baryshkov 	/* resets to be requested */
220194a407ccSDmitry Baryshkov 	const char * const *reset_list;
220294a407ccSDmitry Baryshkov 	int num_resets;
220394a407ccSDmitry Baryshkov 	/* regulators to be requested */
220494a407ccSDmitry Baryshkov 	const char * const *vreg_list;
220594a407ccSDmitry Baryshkov 	int num_vregs;
220694a407ccSDmitry Baryshkov 
220794a407ccSDmitry Baryshkov 	/* array of registers with different offsets */
220894a407ccSDmitry Baryshkov 	const unsigned int *regs;
220994a407ccSDmitry Baryshkov 
221094a407ccSDmitry Baryshkov 	unsigned int pwrdn_ctrl;
221194a407ccSDmitry Baryshkov 	/* bit offset of PHYSTATUS in QPHY_PCS_STATUS register */
221294a407ccSDmitry Baryshkov 	unsigned int phy_status;
221394a407ccSDmitry Baryshkov 
221451bd3306SJohan Hovold 	bool skip_start_delay;
221594a407ccSDmitry Baryshkov 
2216269b70e8SAbel Vesa 	bool has_nocsr_reset;
2217269b70e8SAbel Vesa 
22182ec9bc8dSRobert Marko 	/* QMP PHY pipe clock interface rate */
22192ec9bc8dSRobert Marko 	unsigned long pipe_clock_rate;
222094a407ccSDmitry Baryshkov };
222194a407ccSDmitry Baryshkov 
22222fdedef3SJohan Hovold struct qmp_pcie {
222394a407ccSDmitry Baryshkov 	struct device *dev;
222494a407ccSDmitry Baryshkov 
22252fdedef3SJohan Hovold 	const struct qmp_phy_cfg *cfg;
22266c37a02bSJohan Hovold 	bool tcsr_4ln_config;
22272fdedef3SJohan Hovold 
22282fdedef3SJohan Hovold 	void __iomem *serdes;
22292fdedef3SJohan Hovold 	void __iomem *pcs;
22302fdedef3SJohan Hovold 	void __iomem *pcs_misc;
22312fdedef3SJohan Hovold 	void __iomem *tx;
22322fdedef3SJohan Hovold 	void __iomem *rx;
22332fdedef3SJohan Hovold 	void __iomem *tx2;
22342fdedef3SJohan Hovold 	void __iomem *rx2;
2235269b70e8SAbel Vesa 	void __iomem *ln_shrd;
22362fdedef3SJohan Hovold 
22376c37a02bSJohan Hovold 	void __iomem *port_b;
22386c37a02bSJohan Hovold 
223994a407ccSDmitry Baryshkov 	struct clk_bulk_data *clks;
22409e420f1eSJohan Hovold 	struct clk_bulk_data pipe_clks[2];
22419e420f1eSJohan Hovold 	int num_pipe_clks;
22429e420f1eSJohan Hovold 
2243189ac6b8SDmitry Baryshkov 	struct reset_control_bulk_data *resets;
2244269b70e8SAbel Vesa 	struct reset_control *nocsr_reset;
224594a407ccSDmitry Baryshkov 	struct regulator_bulk_data *vregs;
224694a407ccSDmitry Baryshkov 
22472fdedef3SJohan Hovold 	struct phy *phy;
22482fdedef3SJohan Hovold 	int mode;
2249e8511f40SJohan Hovold 
2250e8511f40SJohan Hovold 	struct clk_fixed_rate pipe_clk_fixed;
225194a407ccSDmitry Baryshkov };
225294a407ccSDmitry Baryshkov 
225394a407ccSDmitry Baryshkov static inline void qphy_setbits(void __iomem *base, u32 offset, u32 val)
225494a407ccSDmitry Baryshkov {
225594a407ccSDmitry Baryshkov 	u32 reg;
225694a407ccSDmitry Baryshkov 
225794a407ccSDmitry Baryshkov 	reg = readl(base + offset);
225894a407ccSDmitry Baryshkov 	reg |= val;
225994a407ccSDmitry Baryshkov 	writel(reg, base + offset);
226094a407ccSDmitry Baryshkov 
226194a407ccSDmitry Baryshkov 	/* ensure that above write is through */
226294a407ccSDmitry Baryshkov 	readl(base + offset);
226394a407ccSDmitry Baryshkov }
226494a407ccSDmitry Baryshkov 
226594a407ccSDmitry Baryshkov static inline void qphy_clrbits(void __iomem *base, u32 offset, u32 val)
226694a407ccSDmitry Baryshkov {
226794a407ccSDmitry Baryshkov 	u32 reg;
226894a407ccSDmitry Baryshkov 
226994a407ccSDmitry Baryshkov 	reg = readl(base + offset);
227094a407ccSDmitry Baryshkov 	reg &= ~val;
227194a407ccSDmitry Baryshkov 	writel(reg, base + offset);
227294a407ccSDmitry Baryshkov 
227394a407ccSDmitry Baryshkov 	/* ensure that above write is through */
227494a407ccSDmitry Baryshkov 	readl(base + offset);
227594a407ccSDmitry Baryshkov }
227694a407ccSDmitry Baryshkov 
227794a407ccSDmitry Baryshkov /* list of clocks required by phy */
22785b76f5ecSJohan Hovold static const char * const ipq8074_pciephy_clk_l[] = {
22795b76f5ecSJohan Hovold 	"aux", "cfg_ahb",
22805b76f5ecSJohan Hovold };
22815b76f5ecSJohan Hovold 
228294a407ccSDmitry Baryshkov static const char * const msm8996_phy_clk_l[] = {
228394a407ccSDmitry Baryshkov 	"aux", "cfg_ahb", "ref",
228494a407ccSDmitry Baryshkov };
228594a407ccSDmitry Baryshkov 
2286d0a846baSJohan Hovold static const char * const sc8280xp_pciephy_clk_l[] = {
2287d0a846baSJohan Hovold 	"aux", "cfg_ahb", "ref", "rchng",
2288d0a846baSJohan Hovold };
228994a407ccSDmitry Baryshkov 
229094a407ccSDmitry Baryshkov static const char * const sdm845_pciephy_clk_l[] = {
229194a407ccSDmitry Baryshkov 	"aux", "cfg_ahb", "ref", "refgen",
229294a407ccSDmitry Baryshkov };
229394a407ccSDmitry Baryshkov 
2294a05b6d51SMrinmay Sarkar static const char * const sa8775p_pciephy_clk_l[] = {
2295a05b6d51SMrinmay Sarkar 	"aux", "cfg_ahb", "ref", "rchng", "phy_aux",
2296a05b6d51SMrinmay Sarkar };
2297a05b6d51SMrinmay Sarkar 
229894a407ccSDmitry Baryshkov /* list of regulators */
229994a407ccSDmitry Baryshkov static const char * const qmp_phy_vreg_l[] = {
230094a407ccSDmitry Baryshkov 	"vdda-phy", "vdda-pll",
230194a407ccSDmitry Baryshkov };
230294a407ccSDmitry Baryshkov 
2303269b70e8SAbel Vesa static const char * const sm8550_qmp_phy_vreg_l[] = {
2304269b70e8SAbel Vesa 	"vdda-phy", "vdda-pll", "vdda-qref",
2305269b70e8SAbel Vesa };
2306269b70e8SAbel Vesa 
230794a407ccSDmitry Baryshkov /* list of resets */
230894a407ccSDmitry Baryshkov static const char * const ipq8074_pciephy_reset_l[] = {
230994a407ccSDmitry Baryshkov 	"phy", "common",
231094a407ccSDmitry Baryshkov };
231194a407ccSDmitry Baryshkov 
2312b35a5311SDmitry Baryshkov static const char * const sdm845_pciephy_reset_l[] = {
2313b35a5311SDmitry Baryshkov 	"phy",
2314b35a5311SDmitry Baryshkov };
2315b35a5311SDmitry Baryshkov 
2316d0a846baSJohan Hovold static const struct qmp_pcie_offsets qmp_pcie_offsets_v5 = {
2317d0a846baSJohan Hovold 	.serdes		= 0,
2318d0a846baSJohan Hovold 	.pcs		= 0x0200,
2319d0a846baSJohan Hovold 	.pcs_misc	= 0x0600,
2320d0a846baSJohan Hovold 	.tx		= 0x0e00,
2321d0a846baSJohan Hovold 	.rx		= 0x1000,
2322d0a846baSJohan Hovold 	.tx2		= 0x1600,
2323d0a846baSJohan Hovold 	.rx2		= 0x1800,
2324d0a846baSJohan Hovold };
2325d0a846baSJohan Hovold 
2326a05b6d51SMrinmay Sarkar static const struct qmp_pcie_offsets qmp_pcie_offsets_v5_20 = {
2327a05b6d51SMrinmay Sarkar 	.serdes		= 0x1000,
2328a05b6d51SMrinmay Sarkar 	.pcs		= 0x1200,
2329a05b6d51SMrinmay Sarkar 	.pcs_misc	= 0x1400,
2330a05b6d51SMrinmay Sarkar 	.tx		= 0x0000,
2331a05b6d51SMrinmay Sarkar 	.rx		= 0x0200,
2332a05b6d51SMrinmay Sarkar 	.tx2		= 0x0800,
2333a05b6d51SMrinmay Sarkar 	.rx2		= 0x0a00,
2334a05b6d51SMrinmay Sarkar };
2335a05b6d51SMrinmay Sarkar 
2336a05b6d51SMrinmay Sarkar static const struct qmp_pcie_offsets qmp_pcie_offsets_v5_30 = {
2337a05b6d51SMrinmay Sarkar 	.serdes		= 0x2000,
2338a05b6d51SMrinmay Sarkar 	.pcs		= 0x2200,
2339a05b6d51SMrinmay Sarkar 	.pcs_misc	= 0x2400,
2340a05b6d51SMrinmay Sarkar 	.tx		= 0x0,
2341a05b6d51SMrinmay Sarkar 	.rx		= 0x0200,
2342a05b6d51SMrinmay Sarkar 	.tx2		= 0x3800,
2343a05b6d51SMrinmay Sarkar 	.rx2		= 0x3a00,
2344a05b6d51SMrinmay Sarkar };
2345a05b6d51SMrinmay Sarkar 
2346*86f70376SDmitry Baryshkov static const struct qmp_pcie_offsets qmp_pcie_offsets_v6_20 = {
2347*86f70376SDmitry Baryshkov 	.serdes		= 0x1000,
2348*86f70376SDmitry Baryshkov 	.pcs		= 0x1200,
2349*86f70376SDmitry Baryshkov 	.pcs_misc	= 0x1400,
2350*86f70376SDmitry Baryshkov 	.tx		= 0x0000,
2351*86f70376SDmitry Baryshkov 	.rx		= 0x0200,
2352*86f70376SDmitry Baryshkov 	.tx2		= 0x0800,
2353*86f70376SDmitry Baryshkov 	.rx2		= 0x0a00,
2354*86f70376SDmitry Baryshkov 	.ln_shrd	= 0x0e00,
2355*86f70376SDmitry Baryshkov };
2356*86f70376SDmitry Baryshkov 
235794a407ccSDmitry Baryshkov static const struct qmp_phy_cfg ipq8074_pciephy_cfg = {
2358f02543faSJohan Hovold 	.lanes			= 1,
235994a407ccSDmitry Baryshkov 
2360d8c9a1e9SJohan Hovold 	.tbls = {
23612566ad8eSDmitry Baryshkov 		.serdes		= ipq8074_pcie_serdes_tbl,
23622566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(ipq8074_pcie_serdes_tbl),
23632566ad8eSDmitry Baryshkov 		.tx		= ipq8074_pcie_tx_tbl,
23642566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(ipq8074_pcie_tx_tbl),
23652566ad8eSDmitry Baryshkov 		.rx		= ipq8074_pcie_rx_tbl,
23662566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(ipq8074_pcie_rx_tbl),
23672566ad8eSDmitry Baryshkov 		.pcs		= ipq8074_pcie_pcs_tbl,
23682566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(ipq8074_pcie_pcs_tbl),
23692566ad8eSDmitry Baryshkov 	},
237094a407ccSDmitry Baryshkov 	.clk_list		= ipq8074_pciephy_clk_l,
237194a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(ipq8074_pciephy_clk_l),
237294a407ccSDmitry Baryshkov 	.reset_list		= ipq8074_pciephy_reset_l,
237394a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(ipq8074_pciephy_reset_l),
237494a407ccSDmitry Baryshkov 	.vreg_list		= NULL,
237594a407ccSDmitry Baryshkov 	.num_vregs		= 0,
2376bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v2_regs_layout,
237794a407ccSDmitry Baryshkov 
237894a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
237994a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
238094a407ccSDmitry Baryshkov };
238194a407ccSDmitry Baryshkov 
2382334fad18SRobert Marko static const struct qmp_phy_cfg ipq8074_pciephy_gen3_cfg = {
2383f02543faSJohan Hovold 	.lanes			= 1,
2384334fad18SRobert Marko 
2385d8c9a1e9SJohan Hovold 	.tbls = {
23862566ad8eSDmitry Baryshkov 		.serdes		= ipq8074_pcie_gen3_serdes_tbl,
23872566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(ipq8074_pcie_gen3_serdes_tbl),
23882566ad8eSDmitry Baryshkov 		.tx		= ipq8074_pcie_gen3_tx_tbl,
23892566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(ipq8074_pcie_gen3_tx_tbl),
23902566ad8eSDmitry Baryshkov 		.rx		= ipq8074_pcie_gen3_rx_tbl,
23912566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(ipq8074_pcie_gen3_rx_tbl),
23922566ad8eSDmitry Baryshkov 		.pcs		= ipq8074_pcie_gen3_pcs_tbl,
23932566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(ipq8074_pcie_gen3_pcs_tbl),
23942584068aSChristian Marangi 		.pcs_misc	= ipq8074_pcie_gen3_pcs_misc_tbl,
23952584068aSChristian Marangi 		.pcs_misc_num	= ARRAY_SIZE(ipq8074_pcie_gen3_pcs_misc_tbl),
23962566ad8eSDmitry Baryshkov 	},
2397334fad18SRobert Marko 	.clk_list		= ipq8074_pciephy_clk_l,
2398334fad18SRobert Marko 	.num_clks		= ARRAY_SIZE(ipq8074_pciephy_clk_l),
2399334fad18SRobert Marko 	.reset_list		= ipq8074_pciephy_reset_l,
2400334fad18SRobert Marko 	.num_resets		= ARRAY_SIZE(ipq8074_pciephy_reset_l),
2401334fad18SRobert Marko 	.vreg_list		= NULL,
2402334fad18SRobert Marko 	.num_vregs		= 0,
2403bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v4_regs_layout,
2404334fad18SRobert Marko 
2405334fad18SRobert Marko 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
240694b7288eSJohan Hovold 	.phy_status		= PHYSTATUS,
2407334fad18SRobert Marko 
2408334fad18SRobert Marko 	.pipe_clock_rate	= 250000000,
2409334fad18SRobert Marko };
2410334fad18SRobert Marko 
241194a407ccSDmitry Baryshkov static const struct qmp_phy_cfg ipq6018_pciephy_cfg = {
2412f02543faSJohan Hovold 	.lanes			= 1,
241394a407ccSDmitry Baryshkov 
2414d8c9a1e9SJohan Hovold 	.tbls = {
24152566ad8eSDmitry Baryshkov 		.serdes		= ipq6018_pcie_serdes_tbl,
24162566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(ipq6018_pcie_serdes_tbl),
24172566ad8eSDmitry Baryshkov 		.tx		= ipq6018_pcie_tx_tbl,
24182566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(ipq6018_pcie_tx_tbl),
24192566ad8eSDmitry Baryshkov 		.rx		= ipq6018_pcie_rx_tbl,
24202566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(ipq6018_pcie_rx_tbl),
24212566ad8eSDmitry Baryshkov 		.pcs		= ipq6018_pcie_pcs_tbl,
24222566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(ipq6018_pcie_pcs_tbl),
24232566ad8eSDmitry Baryshkov 		.pcs_misc	= ipq6018_pcie_pcs_misc_tbl,
24242566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(ipq6018_pcie_pcs_misc_tbl),
24252566ad8eSDmitry Baryshkov 	},
242694a407ccSDmitry Baryshkov 	.clk_list		= ipq8074_pciephy_clk_l,
242794a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(ipq8074_pciephy_clk_l),
242894a407ccSDmitry Baryshkov 	.reset_list		= ipq8074_pciephy_reset_l,
242994a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(ipq8074_pciephy_reset_l),
243094a407ccSDmitry Baryshkov 	.vreg_list		= NULL,
243194a407ccSDmitry Baryshkov 	.num_vregs		= 0,
2432bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v4_regs_layout,
243394a407ccSDmitry Baryshkov 
243494a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
243530518b19SJohan Hovold 	.phy_status		= PHYSTATUS,
243694a407ccSDmitry Baryshkov };
243794a407ccSDmitry Baryshkov 
243894a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sdm845_qmp_pciephy_cfg = {
2439f02543faSJohan Hovold 	.lanes			= 1,
244094a407ccSDmitry Baryshkov 
2441d8c9a1e9SJohan Hovold 	.tbls = {
24422566ad8eSDmitry Baryshkov 		.serdes		= sdm845_qmp_pcie_serdes_tbl,
24432566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sdm845_qmp_pcie_serdes_tbl),
24442566ad8eSDmitry Baryshkov 		.tx		= sdm845_qmp_pcie_tx_tbl,
24452566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sdm845_qmp_pcie_tx_tbl),
24462566ad8eSDmitry Baryshkov 		.rx		= sdm845_qmp_pcie_rx_tbl,
24472566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sdm845_qmp_pcie_rx_tbl),
24482566ad8eSDmitry Baryshkov 		.pcs		= sdm845_qmp_pcie_pcs_tbl,
24492566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sdm845_qmp_pcie_pcs_tbl),
24502566ad8eSDmitry Baryshkov 		.pcs_misc	= sdm845_qmp_pcie_pcs_misc_tbl,
24512566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sdm845_qmp_pcie_pcs_misc_tbl),
24522566ad8eSDmitry Baryshkov 	},
245394a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
245494a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
245594a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
245694a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
245794a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
245894a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2459bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v3_regs_layout,
246094a407ccSDmitry Baryshkov 
246194a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
246294a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
246394a407ccSDmitry Baryshkov };
246494a407ccSDmitry Baryshkov 
246594a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sdm845_qhp_pciephy_cfg = {
2466f02543faSJohan Hovold 	.lanes			= 1,
246794a407ccSDmitry Baryshkov 
2468d8c9a1e9SJohan Hovold 	.tbls = {
24692566ad8eSDmitry Baryshkov 		.serdes		= sdm845_qhp_pcie_serdes_tbl,
24702566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sdm845_qhp_pcie_serdes_tbl),
24712566ad8eSDmitry Baryshkov 		.tx		= sdm845_qhp_pcie_tx_tbl,
24722566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sdm845_qhp_pcie_tx_tbl),
24732566ad8eSDmitry Baryshkov 		.pcs		= sdm845_qhp_pcie_pcs_tbl,
24742566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sdm845_qhp_pcie_pcs_tbl),
24752566ad8eSDmitry Baryshkov 	},
247694a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
247794a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
247894a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
247994a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
248094a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
248194a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
248294a407ccSDmitry Baryshkov 	.regs			= sdm845_qhp_pciephy_regs_layout,
248394a407ccSDmitry Baryshkov 
248494a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
248594a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
248694a407ccSDmitry Baryshkov };
248794a407ccSDmitry Baryshkov 
248894a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8250_qmp_gen3x1_pciephy_cfg = {
2489f02543faSJohan Hovold 	.lanes			= 1,
249094a407ccSDmitry Baryshkov 
2491d8c9a1e9SJohan Hovold 	.tbls = {
24922566ad8eSDmitry Baryshkov 		.serdes		= sm8250_qmp_pcie_serdes_tbl,
24932566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl),
24942566ad8eSDmitry Baryshkov 		.tx		= sm8250_qmp_pcie_tx_tbl,
24952566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8250_qmp_pcie_tx_tbl),
24962566ad8eSDmitry Baryshkov 		.rx		= sm8250_qmp_pcie_rx_tbl,
24972566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8250_qmp_pcie_rx_tbl),
24982566ad8eSDmitry Baryshkov 		.pcs		= sm8250_qmp_pcie_pcs_tbl,
24992566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8250_qmp_pcie_pcs_tbl),
25002566ad8eSDmitry Baryshkov 		.pcs_misc	= sm8250_qmp_pcie_pcs_misc_tbl,
25012566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8250_qmp_pcie_pcs_misc_tbl),
25022566ad8eSDmitry Baryshkov 	},
2503d8c9a1e9SJohan Hovold 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
25042566ad8eSDmitry Baryshkov 		.serdes		= sm8250_qmp_gen3x1_pcie_serdes_tbl,
25052566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_serdes_tbl),
25062566ad8eSDmitry Baryshkov 		.rx		= sm8250_qmp_gen3x1_pcie_rx_tbl,
25072566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_rx_tbl),
25082566ad8eSDmitry Baryshkov 		.pcs		= sm8250_qmp_gen3x1_pcie_pcs_tbl,
25092566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_pcs_tbl),
25102566ad8eSDmitry Baryshkov 		.pcs_misc	= sm8250_qmp_gen3x1_pcie_pcs_misc_tbl,
25112566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8250_qmp_gen3x1_pcie_pcs_misc_tbl),
25122566ad8eSDmitry Baryshkov 	},
251394a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
251494a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
251594a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
251694a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
251794a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
251894a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2519bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v4_regs_layout,
252094a407ccSDmitry Baryshkov 
252194a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
252294a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
252394a407ccSDmitry Baryshkov };
252494a407ccSDmitry Baryshkov 
252594a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8250_qmp_gen3x2_pciephy_cfg = {
2526f02543faSJohan Hovold 	.lanes			= 2,
252794a407ccSDmitry Baryshkov 
2528d8c9a1e9SJohan Hovold 	.tbls = {
25292566ad8eSDmitry Baryshkov 		.serdes		= sm8250_qmp_pcie_serdes_tbl,
25302566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8250_qmp_pcie_serdes_tbl),
25312566ad8eSDmitry Baryshkov 		.tx		= sm8250_qmp_pcie_tx_tbl,
25322566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8250_qmp_pcie_tx_tbl),
25332566ad8eSDmitry Baryshkov 		.rx		= sm8250_qmp_pcie_rx_tbl,
25342566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8250_qmp_pcie_rx_tbl),
25352566ad8eSDmitry Baryshkov 		.pcs		= sm8250_qmp_pcie_pcs_tbl,
25362566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8250_qmp_pcie_pcs_tbl),
25372566ad8eSDmitry Baryshkov 		.pcs_misc	= sm8250_qmp_pcie_pcs_misc_tbl,
25382566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8250_qmp_pcie_pcs_misc_tbl),
25392566ad8eSDmitry Baryshkov 	},
2540d8c9a1e9SJohan Hovold 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
25412566ad8eSDmitry Baryshkov 		.tx		= sm8250_qmp_gen3x2_pcie_tx_tbl,
25422566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_tx_tbl),
25432566ad8eSDmitry Baryshkov 		.rx		= sm8250_qmp_gen3x2_pcie_rx_tbl,
25442566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_rx_tbl),
25452566ad8eSDmitry Baryshkov 		.pcs		= sm8250_qmp_gen3x2_pcie_pcs_tbl,
25462566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_pcs_tbl),
25472566ad8eSDmitry Baryshkov 		.pcs_misc	= sm8250_qmp_gen3x2_pcie_pcs_misc_tbl,
25482566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8250_qmp_gen3x2_pcie_pcs_misc_tbl),
25492566ad8eSDmitry Baryshkov 	},
255094a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
255194a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
255294a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
255394a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
255494a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
255594a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2556bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v4_regs_layout,
255794a407ccSDmitry Baryshkov 
255894a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
255994a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
256094a407ccSDmitry Baryshkov };
256194a407ccSDmitry Baryshkov 
256294a407ccSDmitry Baryshkov static const struct qmp_phy_cfg msm8998_pciephy_cfg = {
2563f02543faSJohan Hovold 	.lanes			= 1,
256494a407ccSDmitry Baryshkov 
2565d8c9a1e9SJohan Hovold 	.tbls = {
25662566ad8eSDmitry Baryshkov 		.serdes		= msm8998_pcie_serdes_tbl,
25672566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(msm8998_pcie_serdes_tbl),
25682566ad8eSDmitry Baryshkov 		.tx		= msm8998_pcie_tx_tbl,
25692566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(msm8998_pcie_tx_tbl),
25702566ad8eSDmitry Baryshkov 		.rx		= msm8998_pcie_rx_tbl,
25712566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(msm8998_pcie_rx_tbl),
25722566ad8eSDmitry Baryshkov 		.pcs		= msm8998_pcie_pcs_tbl,
25732566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(msm8998_pcie_pcs_tbl),
25742566ad8eSDmitry Baryshkov 	},
257594a407ccSDmitry Baryshkov 	.clk_list		= msm8996_phy_clk_l,
257694a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(msm8996_phy_clk_l),
257794a407ccSDmitry Baryshkov 	.reset_list		= ipq8074_pciephy_reset_l,
257894a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(ipq8074_pciephy_reset_l),
257994a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
258094a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2581bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v3_regs_layout,
258294a407ccSDmitry Baryshkov 
258394a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
258494a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
258551bd3306SJohan Hovold 
258651bd3306SJohan Hovold 	.skip_start_delay	= true,
258794a407ccSDmitry Baryshkov };
258894a407ccSDmitry Baryshkov 
258994a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sc8180x_pciephy_cfg = {
25901db6b0a4SDmitry Baryshkov 	.lanes			= 2,
259194a407ccSDmitry Baryshkov 
2592d8c9a1e9SJohan Hovold 	.tbls = {
25932566ad8eSDmitry Baryshkov 		.serdes		= sc8180x_qmp_pcie_serdes_tbl,
25942566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sc8180x_qmp_pcie_serdes_tbl),
25952566ad8eSDmitry Baryshkov 		.tx		= sc8180x_qmp_pcie_tx_tbl,
25962566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sc8180x_qmp_pcie_tx_tbl),
25972566ad8eSDmitry Baryshkov 		.rx		= sc8180x_qmp_pcie_rx_tbl,
25982566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sc8180x_qmp_pcie_rx_tbl),
25992566ad8eSDmitry Baryshkov 		.pcs		= sc8180x_qmp_pcie_pcs_tbl,
26002566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sc8180x_qmp_pcie_pcs_tbl),
26012566ad8eSDmitry Baryshkov 		.pcs_misc	= sc8180x_qmp_pcie_pcs_misc_tbl,
26022566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sc8180x_qmp_pcie_pcs_misc_tbl),
26032566ad8eSDmitry Baryshkov 	},
260494a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
260594a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
260694a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
260794a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
260894a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
260994a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2610bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v4_regs_layout,
261194a407ccSDmitry Baryshkov 
261294a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
26134a9eac5aSJohan Hovold 	.phy_status		= PHYSTATUS,
261494a407ccSDmitry Baryshkov };
261594a407ccSDmitry Baryshkov 
2616d0a846baSJohan Hovold static const struct qmp_phy_cfg sc8280xp_qmp_gen3x1_pciephy_cfg = {
2617d0a846baSJohan Hovold 	.lanes			= 1,
2618d0a846baSJohan Hovold 
2619d0a846baSJohan Hovold 	.offsets		= &qmp_pcie_offsets_v5,
2620d0a846baSJohan Hovold 
2621d0a846baSJohan Hovold 	.tbls = {
2622d0a846baSJohan Hovold 		.serdes		= sc8280xp_qmp_pcie_serdes_tbl,
2623d0a846baSJohan Hovold 		.serdes_num	= ARRAY_SIZE(sc8280xp_qmp_pcie_serdes_tbl),
2624d0a846baSJohan Hovold 		.tx		= sc8280xp_qmp_gen3x1_pcie_tx_tbl,
2625d0a846baSJohan Hovold 		.tx_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_tx_tbl),
2626d0a846baSJohan Hovold 		.rx		= sc8280xp_qmp_gen3x1_pcie_rx_tbl,
2627d0a846baSJohan Hovold 		.rx_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_rx_tbl),
2628d0a846baSJohan Hovold 		.pcs		= sc8280xp_qmp_gen3x1_pcie_pcs_tbl,
2629d0a846baSJohan Hovold 		.pcs_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_pcs_tbl),
2630d0a846baSJohan Hovold 		.pcs_misc	= sc8280xp_qmp_gen3x1_pcie_pcs_misc_tbl,
2631d0a846baSJohan Hovold 		.pcs_misc_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_pcs_misc_tbl),
2632d0a846baSJohan Hovold 	},
2633d0a846baSJohan Hovold 
2634d0a846baSJohan Hovold 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2635d0a846baSJohan Hovold 		.serdes		= sc8280xp_qmp_gen3x1_pcie_rc_serdes_tbl,
2636d0a846baSJohan Hovold 		.serdes_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x1_pcie_rc_serdes_tbl),
2637d0a846baSJohan Hovold 	},
2638d0a846baSJohan Hovold 
2639d0a846baSJohan Hovold 	.clk_list		= sc8280xp_pciephy_clk_l,
2640d0a846baSJohan Hovold 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
2641d0a846baSJohan Hovold 	.reset_list		= sdm845_pciephy_reset_l,
2642d0a846baSJohan Hovold 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
2643d0a846baSJohan Hovold 	.vreg_list		= qmp_phy_vreg_l,
2644d0a846baSJohan Hovold 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2645bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
2646d0a846baSJohan Hovold 
2647d0a846baSJohan Hovold 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
2648d0a846baSJohan Hovold 	.phy_status		= PHYSTATUS,
2649d0a846baSJohan Hovold };
2650d0a846baSJohan Hovold 
2651d0a846baSJohan Hovold static const struct qmp_phy_cfg sc8280xp_qmp_gen3x2_pciephy_cfg = {
2652d0a846baSJohan Hovold 	.lanes			= 2,
2653d0a846baSJohan Hovold 
2654d0a846baSJohan Hovold 	.offsets		= &qmp_pcie_offsets_v5,
2655d0a846baSJohan Hovold 
2656d0a846baSJohan Hovold 	.tbls = {
2657d0a846baSJohan Hovold 		.serdes		= sc8280xp_qmp_pcie_serdes_tbl,
2658d0a846baSJohan Hovold 		.serdes_num	= ARRAY_SIZE(sc8280xp_qmp_pcie_serdes_tbl),
2659d0a846baSJohan Hovold 		.tx		= sc8280xp_qmp_gen3x2_pcie_tx_tbl,
2660d0a846baSJohan Hovold 		.tx_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_tx_tbl),
2661d0a846baSJohan Hovold 		.rx		= sc8280xp_qmp_gen3x2_pcie_rx_tbl,
2662d0a846baSJohan Hovold 		.rx_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rx_tbl),
2663d0a846baSJohan Hovold 		.pcs		= sc8280xp_qmp_gen3x2_pcie_pcs_tbl,
2664d0a846baSJohan Hovold 		.pcs_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_tbl),
2665d0a846baSJohan Hovold 		.pcs_misc	= sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl,
2666d0a846baSJohan Hovold 		.pcs_misc_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl),
2667d0a846baSJohan Hovold 	},
2668d0a846baSJohan Hovold 
2669d0a846baSJohan Hovold 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2670d0a846baSJohan Hovold 		.serdes		= sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl,
2671d0a846baSJohan Hovold 		.serdes_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl),
2672d0a846baSJohan Hovold 	},
2673d0a846baSJohan Hovold 
2674d0a846baSJohan Hovold 	.clk_list		= sc8280xp_pciephy_clk_l,
2675d0a846baSJohan Hovold 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
2676d0a846baSJohan Hovold 	.reset_list		= sdm845_pciephy_reset_l,
2677d0a846baSJohan Hovold 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
2678d0a846baSJohan Hovold 	.vreg_list		= qmp_phy_vreg_l,
2679d0a846baSJohan Hovold 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2680bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
2681d0a846baSJohan Hovold 
2682d0a846baSJohan Hovold 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
2683d0a846baSJohan Hovold 	.phy_status		= PHYSTATUS,
2684d0a846baSJohan Hovold };
2685d0a846baSJohan Hovold 
26866c37a02bSJohan Hovold static const struct qmp_phy_cfg sc8280xp_qmp_gen3x4_pciephy_cfg = {
26876c37a02bSJohan Hovold 	.lanes			= 4,
26886c37a02bSJohan Hovold 
26896c37a02bSJohan Hovold 	.offsets		= &qmp_pcie_offsets_v5,
26906c37a02bSJohan Hovold 
26916c37a02bSJohan Hovold 	.tbls = {
26926c37a02bSJohan Hovold 		.serdes		= sc8280xp_qmp_pcie_serdes_tbl,
26936c37a02bSJohan Hovold 		.serdes_num	= ARRAY_SIZE(sc8280xp_qmp_pcie_serdes_tbl),
26946c37a02bSJohan Hovold 		.tx		= sc8280xp_qmp_gen3x2_pcie_tx_tbl,
26956c37a02bSJohan Hovold 		.tx_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_tx_tbl),
26966c37a02bSJohan Hovold 		.rx		= sc8280xp_qmp_gen3x2_pcie_rx_tbl,
26976c37a02bSJohan Hovold 		.rx_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rx_tbl),
26986c37a02bSJohan Hovold 		.pcs		= sc8280xp_qmp_gen3x2_pcie_pcs_tbl,
26996c37a02bSJohan Hovold 		.pcs_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_tbl),
27006c37a02bSJohan Hovold 		.pcs_misc	= sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl,
27016c37a02bSJohan Hovold 		.pcs_misc_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl),
27026c37a02bSJohan Hovold 	},
27036c37a02bSJohan Hovold 
27046c37a02bSJohan Hovold 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
27056c37a02bSJohan Hovold 		.serdes		= sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl,
27066c37a02bSJohan Hovold 		.serdes_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_rc_serdes_tbl),
27076c37a02bSJohan Hovold 	},
27086c37a02bSJohan Hovold 
27096c37a02bSJohan Hovold 	.serdes_4ln_tbl		= sc8280xp_qmp_gen3x4_pcie_serdes_4ln_tbl,
27106c37a02bSJohan Hovold 	.serdes_4ln_num		= ARRAY_SIZE(sc8280xp_qmp_gen3x4_pcie_serdes_4ln_tbl),
27116c37a02bSJohan Hovold 
27126c37a02bSJohan Hovold 	.clk_list		= sc8280xp_pciephy_clk_l,
27136c37a02bSJohan Hovold 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
27146c37a02bSJohan Hovold 	.reset_list		= sdm845_pciephy_reset_l,
27156c37a02bSJohan Hovold 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
27166c37a02bSJohan Hovold 	.vreg_list		= qmp_phy_vreg_l,
27176c37a02bSJohan Hovold 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2718bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
27196c37a02bSJohan Hovold 
27206c37a02bSJohan Hovold 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
27216c37a02bSJohan Hovold 	.phy_status		= PHYSTATUS,
27226c37a02bSJohan Hovold };
27236c37a02bSJohan Hovold 
272494a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sdx55_qmp_pciephy_cfg = {
2725f02543faSJohan Hovold 	.lanes			= 2,
272694a407ccSDmitry Baryshkov 
2727d8c9a1e9SJohan Hovold 	.tbls = {
27282566ad8eSDmitry Baryshkov 		.serdes		= sdx55_qmp_pcie_serdes_tbl,
27292566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sdx55_qmp_pcie_serdes_tbl),
27302566ad8eSDmitry Baryshkov 		.tx		= sdx55_qmp_pcie_tx_tbl,
27312566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sdx55_qmp_pcie_tx_tbl),
27322566ad8eSDmitry Baryshkov 		.rx		= sdx55_qmp_pcie_rx_tbl,
27332566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sdx55_qmp_pcie_rx_tbl),
27342566ad8eSDmitry Baryshkov 		.pcs		= sdx55_qmp_pcie_pcs_tbl,
27352566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sdx55_qmp_pcie_pcs_tbl),
27362566ad8eSDmitry Baryshkov 		.pcs_misc	= sdx55_qmp_pcie_pcs_misc_tbl,
27372566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sdx55_qmp_pcie_pcs_misc_tbl),
27382566ad8eSDmitry Baryshkov 	},
2739458aa820SManivannan Sadhasivam 
2740364c748dSManivannan Sadhasivam 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2741364c748dSManivannan Sadhasivam 		.serdes		= sdx55_qmp_pcie_rc_serdes_tbl,
2742364c748dSManivannan Sadhasivam 		.serdes_num	= ARRAY_SIZE(sdx55_qmp_pcie_rc_serdes_tbl),
2743364c748dSManivannan Sadhasivam 		.pcs_misc	= sdx55_qmp_pcie_rc_pcs_misc_tbl,
2744364c748dSManivannan Sadhasivam 		.pcs_misc_num	= ARRAY_SIZE(sdx55_qmp_pcie_rc_pcs_misc_tbl),
2745364c748dSManivannan Sadhasivam 	},
2746364c748dSManivannan Sadhasivam 
2747458aa820SManivannan Sadhasivam 	.tbls_ep = &(const struct qmp_phy_cfg_tbls) {
2748458aa820SManivannan Sadhasivam 		.serdes		= sdx55_qmp_pcie_ep_serdes_tbl,
2749458aa820SManivannan Sadhasivam 		.serdes_num	= ARRAY_SIZE(sdx55_qmp_pcie_ep_serdes_tbl),
2750458aa820SManivannan Sadhasivam 		.pcs_misc	= sdx55_qmp_pcie_ep_pcs_misc_tbl,
2751458aa820SManivannan Sadhasivam 		.pcs_misc_num	= ARRAY_SIZE(sdx55_qmp_pcie_ep_pcs_misc_tbl),
2752458aa820SManivannan Sadhasivam 	},
2753458aa820SManivannan Sadhasivam 
275494a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
275594a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
275694a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
275794a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
275894a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
275994a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2760bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v4_regs_layout,
276194a407ccSDmitry Baryshkov 
2762364c748dSManivannan Sadhasivam 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
276394a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS_4_20,
276494a407ccSDmitry Baryshkov };
276594a407ccSDmitry Baryshkov 
2766c7005273SDmitry Baryshkov static const struct qmp_phy_cfg sm8350_qmp_gen3x1_pciephy_cfg = {
2767c7005273SDmitry Baryshkov 	.lanes			= 1,
2768c7005273SDmitry Baryshkov 
2769c7005273SDmitry Baryshkov 	.offsets		= &qmp_pcie_offsets_v5,
2770c7005273SDmitry Baryshkov 
2771c7005273SDmitry Baryshkov 	.tbls = {
2772c7005273SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen3_pcie_serdes_tbl,
2773c7005273SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen3_pcie_serdes_tbl),
2774c7005273SDmitry Baryshkov 		.tx		= sm8350_qmp_gen3x1_pcie_tx_tbl,
2775c7005273SDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8350_qmp_gen3x1_pcie_tx_tbl),
2776c7005273SDmitry Baryshkov 		.rx		= sm8450_qmp_gen3_pcie_rx_tbl,
2777c7005273SDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8450_qmp_gen3_pcie_rx_tbl),
2778c7005273SDmitry Baryshkov 		.pcs		= sm8450_qmp_gen3_pcie_pcs_tbl,
2779c7005273SDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8450_qmp_gen3_pcie_pcs_tbl),
2780c7005273SDmitry Baryshkov 		.pcs_misc	= sm8450_qmp_gen3x1_pcie_pcs_misc_tbl,
2781c7005273SDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_pcs_misc_tbl),
2782c7005273SDmitry Baryshkov 	},
2783c7005273SDmitry Baryshkov 
2784c7005273SDmitry Baryshkov 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2785c7005273SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen3x1_pcie_rc_serdes_tbl,
2786c7005273SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_rc_serdes_tbl),
2787c7005273SDmitry Baryshkov 		.rx		= sm8350_qmp_gen3x1_pcie_rc_rx_tbl,
2788c7005273SDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8350_qmp_gen3x1_pcie_rc_rx_tbl),
2789c7005273SDmitry Baryshkov 	},
2790c7005273SDmitry Baryshkov 
2791c7005273SDmitry Baryshkov 	.clk_list		= sc8280xp_pciephy_clk_l,
2792c7005273SDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
2793c7005273SDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
2794c7005273SDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
2795c7005273SDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
2796c7005273SDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2797bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
2798c7005273SDmitry Baryshkov 
2799c7005273SDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
2800c7005273SDmitry Baryshkov 	.phy_status		= PHYSTATUS,
2801c7005273SDmitry Baryshkov };
2802c7005273SDmitry Baryshkov 
2803c7005273SDmitry Baryshkov static const struct qmp_phy_cfg sm8350_qmp_gen3x2_pciephy_cfg = {
2804c7005273SDmitry Baryshkov 	.lanes			= 2,
2805c7005273SDmitry Baryshkov 
2806c7005273SDmitry Baryshkov 	.offsets		= &qmp_pcie_offsets_v5,
2807c7005273SDmitry Baryshkov 
2808c7005273SDmitry Baryshkov 	.tbls = {
2809c7005273SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen3_pcie_serdes_tbl,
2810c7005273SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen3_pcie_serdes_tbl),
2811c7005273SDmitry Baryshkov 		.tx		= sm8350_qmp_gen3x2_pcie_tx_tbl,
2812c7005273SDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8350_qmp_gen3x2_pcie_tx_tbl),
2813c7005273SDmitry Baryshkov 		.rx		= sm8450_qmp_gen3_pcie_rx_tbl,
2814c7005273SDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8450_qmp_gen3_pcie_rx_tbl),
2815c7005273SDmitry Baryshkov 		.pcs		= sm8450_qmp_gen3_pcie_pcs_tbl,
2816c7005273SDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8450_qmp_gen3_pcie_pcs_tbl),
2817c7005273SDmitry Baryshkov 		.pcs_misc	= sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl,
2818c7005273SDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sc8280xp_qmp_gen3x2_pcie_pcs_misc_tbl),
2819c7005273SDmitry Baryshkov 	},
2820c7005273SDmitry Baryshkov 
2821c7005273SDmitry Baryshkov 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2822c7005273SDmitry Baryshkov 		.rx		= sm8350_qmp_gen3x2_pcie_rc_rx_tbl,
2823c7005273SDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8350_qmp_gen3x2_pcie_rc_rx_tbl),
2824c7005273SDmitry Baryshkov 		.pcs		= sm8350_qmp_gen3x2_pcie_rc_pcs_tbl,
2825c7005273SDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8350_qmp_gen3x2_pcie_rc_pcs_tbl),
2826c7005273SDmitry Baryshkov 	},
2827c7005273SDmitry Baryshkov 
2828c7005273SDmitry Baryshkov 	.clk_list		= sc8280xp_pciephy_clk_l,
2829c7005273SDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
2830c7005273SDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
2831c7005273SDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
2832c7005273SDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
2833c7005273SDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2834bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
2835c7005273SDmitry Baryshkov 
2836c7005273SDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
2837c7005273SDmitry Baryshkov 	.phy_status		= PHYSTATUS,
2838c7005273SDmitry Baryshkov };
2839c7005273SDmitry Baryshkov 
284092bd868fSRohit Agarwal static const struct qmp_phy_cfg sdx65_qmp_pciephy_cfg = {
284192bd868fSRohit Agarwal 	.lanes                  = 2,
284292bd868fSRohit Agarwal 
284392bd868fSRohit Agarwal 	.offsets		= &qmp_pcie_offsets_v6_20,
284492bd868fSRohit Agarwal 
284592bd868fSRohit Agarwal 	.tbls = {
284692bd868fSRohit Agarwal 			.serdes         = sdx65_qmp_pcie_serdes_tbl,
284792bd868fSRohit Agarwal 			.serdes_num     = ARRAY_SIZE(sdx65_qmp_pcie_serdes_tbl),
284892bd868fSRohit Agarwal 			.tx             = sdx65_qmp_pcie_tx_tbl,
284992bd868fSRohit Agarwal 			.tx_num         = ARRAY_SIZE(sdx65_qmp_pcie_tx_tbl),
285092bd868fSRohit Agarwal 			.rx             = sdx65_qmp_pcie_rx_tbl,
285192bd868fSRohit Agarwal 			.rx_num         = ARRAY_SIZE(sdx65_qmp_pcie_rx_tbl),
285292bd868fSRohit Agarwal 			.pcs            = sdx65_qmp_pcie_pcs_tbl,
285392bd868fSRohit Agarwal 			.pcs_num        = ARRAY_SIZE(sdx65_qmp_pcie_pcs_tbl),
285492bd868fSRohit Agarwal 			.pcs_misc       = sdx65_qmp_pcie_pcs_misc_tbl,
285592bd868fSRohit Agarwal 			.pcs_misc_num   = ARRAY_SIZE(sdx65_qmp_pcie_pcs_misc_tbl),
285692bd868fSRohit Agarwal 		},
285792bd868fSRohit Agarwal 	.clk_list               = sdm845_pciephy_clk_l,
285892bd868fSRohit Agarwal 	.num_clks               = ARRAY_SIZE(sdm845_pciephy_clk_l),
285992bd868fSRohit Agarwal 	.reset_list             = sdm845_pciephy_reset_l,
286092bd868fSRohit Agarwal 	.num_resets             = ARRAY_SIZE(sdm845_pciephy_reset_l),
286192bd868fSRohit Agarwal 	.vreg_list              = qmp_phy_vreg_l,
286292bd868fSRohit Agarwal 	.num_vregs              = ARRAY_SIZE(qmp_phy_vreg_l),
286392bd868fSRohit Agarwal 	.regs                   = pciephy_v5_regs_layout,
286492bd868fSRohit Agarwal 
286592bd868fSRohit Agarwal 	.pwrdn_ctrl             = SW_PWRDN,
286692bd868fSRohit Agarwal 	.phy_status             = PHYSTATUS_4_20,
286792bd868fSRohit Agarwal };
286892bd868fSRohit Agarwal 
286994a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8450_qmp_gen3x1_pciephy_cfg = {
2870f02543faSJohan Hovold 	.lanes			= 1,
287194a407ccSDmitry Baryshkov 
2872d8c9a1e9SJohan Hovold 	.tbls = {
2873c99649c3SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen3_pcie_serdes_tbl,
2874c99649c3SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen3_pcie_serdes_tbl),
28752566ad8eSDmitry Baryshkov 		.tx		= sm8450_qmp_gen3x1_pcie_tx_tbl,
28762566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_tx_tbl),
2877c99649c3SDmitry Baryshkov 		.rx		= sm8450_qmp_gen3_pcie_rx_tbl,
2878c99649c3SDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8450_qmp_gen3_pcie_rx_tbl),
2879c99649c3SDmitry Baryshkov 		.pcs		= sm8450_qmp_gen3_pcie_pcs_tbl,
2880c99649c3SDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8450_qmp_gen3_pcie_pcs_tbl),
28812566ad8eSDmitry Baryshkov 		.pcs_misc	= sm8450_qmp_gen3x1_pcie_pcs_misc_tbl,
28822566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_pcs_misc_tbl),
28832566ad8eSDmitry Baryshkov 	},
2884d8de49e9SDmitry Baryshkov 
2885d8de49e9SDmitry Baryshkov 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2886d8de49e9SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen3x1_pcie_rc_serdes_tbl,
2887d8de49e9SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_rc_serdes_tbl),
2888d8de49e9SDmitry Baryshkov 		.rx		= sm8450_qmp_gen3x1_pcie_rc_rx_tbl,
2889d8de49e9SDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8450_qmp_gen3x1_pcie_rc_rx_tbl),
2890d8de49e9SDmitry Baryshkov 	},
2891d8de49e9SDmitry Baryshkov 
289294a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
289394a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
289494a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
289594a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
289694a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
289794a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2898c08436c1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
289994a407ccSDmitry Baryshkov 
290094a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
290194a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS,
290294a407ccSDmitry Baryshkov };
290394a407ccSDmitry Baryshkov 
290494a407ccSDmitry Baryshkov static const struct qmp_phy_cfg sm8450_qmp_gen4x2_pciephy_cfg = {
2905f02543faSJohan Hovold 	.lanes			= 2,
290694a407ccSDmitry Baryshkov 
2907d8c9a1e9SJohan Hovold 	.tbls = {
29082566ad8eSDmitry Baryshkov 		.serdes		= sm8450_qmp_gen4x2_pcie_serdes_tbl,
29092566ad8eSDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_serdes_tbl),
29102566ad8eSDmitry Baryshkov 		.tx		= sm8450_qmp_gen4x2_pcie_tx_tbl,
29112566ad8eSDmitry Baryshkov 		.tx_num		= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_tx_tbl),
29122566ad8eSDmitry Baryshkov 		.rx		= sm8450_qmp_gen4x2_pcie_rx_tbl,
29132566ad8eSDmitry Baryshkov 		.rx_num		= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_rx_tbl),
29142566ad8eSDmitry Baryshkov 		.pcs		= sm8450_qmp_gen4x2_pcie_pcs_tbl,
29152566ad8eSDmitry Baryshkov 		.pcs_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_pcs_tbl),
29162566ad8eSDmitry Baryshkov 		.pcs_misc	= sm8450_qmp_gen4x2_pcie_pcs_misc_tbl,
29172566ad8eSDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_pcs_misc_tbl),
29182566ad8eSDmitry Baryshkov 	},
2919f5682f13SDmitry Baryshkov 
2920d8c9a1e9SJohan Hovold 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
2921f5682f13SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen4x2_pcie_rc_serdes_tbl,
2922f5682f13SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_rc_serdes_tbl),
2923f5682f13SDmitry Baryshkov 		.pcs_misc	= sm8450_qmp_gen4x2_pcie_rc_pcs_misc_tbl,
2924f5682f13SDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_rc_pcs_misc_tbl),
2925f5682f13SDmitry Baryshkov 	},
2926f5682f13SDmitry Baryshkov 
2927d8c9a1e9SJohan Hovold 	.tbls_ep = &(const struct qmp_phy_cfg_tbls) {
2928f5682f13SDmitry Baryshkov 		.serdes		= sm8450_qmp_gen4x2_pcie_ep_serdes_tbl,
2929f5682f13SDmitry Baryshkov 		.serdes_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_ep_serdes_tbl),
2930f5682f13SDmitry Baryshkov 		.pcs_misc	= sm8450_qmp_gen4x2_pcie_ep_pcs_misc_tbl,
2931f5682f13SDmitry Baryshkov 		.pcs_misc_num	= ARRAY_SIZE(sm8450_qmp_gen4x2_pcie_ep_pcs_misc_tbl),
2932f5682f13SDmitry Baryshkov 	},
2933f5682f13SDmitry Baryshkov 
293494a407ccSDmitry Baryshkov 	.clk_list		= sdm845_pciephy_clk_l,
293594a407ccSDmitry Baryshkov 	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
293694a407ccSDmitry Baryshkov 	.reset_list		= sdm845_pciephy_reset_l,
293794a407ccSDmitry Baryshkov 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
293894a407ccSDmitry Baryshkov 	.vreg_list		= qmp_phy_vreg_l,
293994a407ccSDmitry Baryshkov 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2940bbe207a1SDmitry Baryshkov 	.regs			= pciephy_v5_regs_layout,
294194a407ccSDmitry Baryshkov 
294294a407ccSDmitry Baryshkov 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
294394a407ccSDmitry Baryshkov 	.phy_status		= PHYSTATUS_4_20,
294494a407ccSDmitry Baryshkov };
294594a407ccSDmitry Baryshkov 
2946269b70e8SAbel Vesa static const struct qmp_phy_cfg sm8550_qmp_gen3x2_pciephy_cfg = {
2947269b70e8SAbel Vesa 	.lanes = 2,
2948269b70e8SAbel Vesa 
2949269b70e8SAbel Vesa 	.offsets		= &qmp_pcie_offsets_v5,
2950269b70e8SAbel Vesa 
2951269b70e8SAbel Vesa 	.tbls = {
2952269b70e8SAbel Vesa 		.serdes		= sm8550_qmp_gen3x2_pcie_serdes_tbl,
2953269b70e8SAbel Vesa 		.serdes_num	= ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_serdes_tbl),
2954269b70e8SAbel Vesa 		.tx		= sm8550_qmp_gen3x2_pcie_tx_tbl,
2955269b70e8SAbel Vesa 		.tx_num		= ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_tx_tbl),
2956269b70e8SAbel Vesa 		.rx		= sm8550_qmp_gen3x2_pcie_rx_tbl,
2957269b70e8SAbel Vesa 		.rx_num		= ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_rx_tbl),
2958269b70e8SAbel Vesa 		.pcs		= sm8550_qmp_gen3x2_pcie_pcs_tbl,
2959269b70e8SAbel Vesa 		.pcs_num	= ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_pcs_tbl),
2960269b70e8SAbel Vesa 		.pcs_misc	= sm8550_qmp_gen3x2_pcie_pcs_misc_tbl,
2961269b70e8SAbel Vesa 		.pcs_misc_num	= ARRAY_SIZE(sm8550_qmp_gen3x2_pcie_pcs_misc_tbl),
2962269b70e8SAbel Vesa 	},
2963269b70e8SAbel Vesa 	.clk_list		= sc8280xp_pciephy_clk_l,
2964269b70e8SAbel Vesa 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
2965269b70e8SAbel Vesa 	.reset_list		= sdm845_pciephy_reset_l,
2966269b70e8SAbel Vesa 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
2967269b70e8SAbel Vesa 	.vreg_list		= qmp_phy_vreg_l,
2968269b70e8SAbel Vesa 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
2969269b70e8SAbel Vesa 	.regs			= pciephy_v5_regs_layout,
2970269b70e8SAbel Vesa 
2971269b70e8SAbel Vesa 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
2972269b70e8SAbel Vesa 	.phy_status		= PHYSTATUS,
2973269b70e8SAbel Vesa };
2974269b70e8SAbel Vesa 
2975269b70e8SAbel Vesa static const struct qmp_phy_cfg sm8550_qmp_gen4x2_pciephy_cfg = {
2976269b70e8SAbel Vesa 	.lanes = 2,
2977269b70e8SAbel Vesa 
2978269b70e8SAbel Vesa 	.offsets		= &qmp_pcie_offsets_v6_20,
2979269b70e8SAbel Vesa 
2980269b70e8SAbel Vesa 	.tbls = {
2981269b70e8SAbel Vesa 		.serdes			= sm8550_qmp_gen4x2_pcie_serdes_tbl,
2982269b70e8SAbel Vesa 		.serdes_num		= ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_serdes_tbl),
2983269b70e8SAbel Vesa 		.tx			= sm8550_qmp_gen4x2_pcie_tx_tbl,
2984269b70e8SAbel Vesa 		.tx_num			= ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_tx_tbl),
2985269b70e8SAbel Vesa 		.rx			= sm8550_qmp_gen4x2_pcie_rx_tbl,
2986269b70e8SAbel Vesa 		.rx_num			= ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_rx_tbl),
2987269b70e8SAbel Vesa 		.pcs			= sm8550_qmp_gen4x2_pcie_pcs_tbl,
2988269b70e8SAbel Vesa 		.pcs_num		= ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_pcs_tbl),
2989269b70e8SAbel Vesa 		.pcs_misc		= sm8550_qmp_gen4x2_pcie_pcs_misc_tbl,
2990269b70e8SAbel Vesa 		.pcs_misc_num		= ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_pcs_misc_tbl),
2991269b70e8SAbel Vesa 		.ln_shrd		= sm8550_qmp_gen4x2_pcie_ln_shrd_tbl,
2992269b70e8SAbel Vesa 		.ln_shrd_num		= ARRAY_SIZE(sm8550_qmp_gen4x2_pcie_ln_shrd_tbl),
2993269b70e8SAbel Vesa 	},
2994269b70e8SAbel Vesa 	.clk_list		= sc8280xp_pciephy_clk_l,
2995269b70e8SAbel Vesa 	.num_clks		= ARRAY_SIZE(sc8280xp_pciephy_clk_l),
2996269b70e8SAbel Vesa 	.reset_list		= sdm845_pciephy_reset_l,
2997269b70e8SAbel Vesa 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
2998269b70e8SAbel Vesa 	.vreg_list		= sm8550_qmp_phy_vreg_l,
2999269b70e8SAbel Vesa 	.num_vregs		= ARRAY_SIZE(sm8550_qmp_phy_vreg_l),
3000269b70e8SAbel Vesa 	.regs			= pciephy_v5_regs_layout,
3001269b70e8SAbel Vesa 
3002269b70e8SAbel Vesa 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
3003269b70e8SAbel Vesa 	.phy_status		= PHYSTATUS_4_20,
3004269b70e8SAbel Vesa 	.has_nocsr_reset	= true,
3005269b70e8SAbel Vesa };
3006269b70e8SAbel Vesa 
3007a05b6d51SMrinmay Sarkar static const struct qmp_phy_cfg sa8775p_qmp_gen4x2_pciephy_cfg = {
3008a05b6d51SMrinmay Sarkar 	.lanes			= 2,
3009a05b6d51SMrinmay Sarkar 	.offsets		= &qmp_pcie_offsets_v5_20,
3010a05b6d51SMrinmay Sarkar 
3011a05b6d51SMrinmay Sarkar 	.tbls = {
3012a05b6d51SMrinmay Sarkar 		.serdes		= sa8775p_qmp_gen4x2_pcie_serdes_alt_tbl,
3013a05b6d51SMrinmay Sarkar 		.serdes_num		= ARRAY_SIZE(sa8775p_qmp_gen4x2_pcie_serdes_alt_tbl),
3014a05b6d51SMrinmay Sarkar 		.tx		= sa8775p_qmp_gen4_pcie_tx_tbl,
3015a05b6d51SMrinmay Sarkar 		.tx_num		= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_tx_tbl),
3016a05b6d51SMrinmay Sarkar 		.rx		= sa8775p_qmp_gen4x2_pcie_rx_alt_tbl,
3017a05b6d51SMrinmay Sarkar 		.rx_num		= ARRAY_SIZE(sa8775p_qmp_gen4x2_pcie_rx_alt_tbl),
3018a05b6d51SMrinmay Sarkar 		.pcs		= sa8775p_qmp_gen4x2_pcie_pcs_alt_tbl,
3019a05b6d51SMrinmay Sarkar 		.pcs_num		= ARRAY_SIZE(sa8775p_qmp_gen4x2_pcie_pcs_alt_tbl),
3020a05b6d51SMrinmay Sarkar 		.pcs_misc		= sa8775p_qmp_gen4_pcie_pcs_misc_tbl,
3021a05b6d51SMrinmay Sarkar 		.pcs_misc_num	= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_pcs_misc_tbl),
3022a05b6d51SMrinmay Sarkar 	},
3023a05b6d51SMrinmay Sarkar 
3024a05b6d51SMrinmay Sarkar 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
3025a05b6d51SMrinmay Sarkar 		.serdes		= sa8775p_qmp_gen4x2_pcie_rc_serdes_alt_tbl,
3026a05b6d51SMrinmay Sarkar 		.serdes_num	= ARRAY_SIZE(sa8775p_qmp_gen4x2_pcie_rc_serdes_alt_tbl),
3027a05b6d51SMrinmay Sarkar 		.pcs_misc	= sa8775p_qmp_gen4_pcie_rc_pcs_misc_tbl,
3028a05b6d51SMrinmay Sarkar 		.pcs_misc_num	= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_rc_pcs_misc_tbl),
3029a05b6d51SMrinmay Sarkar 	},
3030a05b6d51SMrinmay Sarkar 
3031a05b6d51SMrinmay Sarkar 	.clk_list		= sa8775p_pciephy_clk_l,
3032a05b6d51SMrinmay Sarkar 	.num_clks		= ARRAY_SIZE(sa8775p_pciephy_clk_l),
3033a05b6d51SMrinmay Sarkar 	.reset_list		= sdm845_pciephy_reset_l,
3034a05b6d51SMrinmay Sarkar 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
3035a05b6d51SMrinmay Sarkar 	.vreg_list		= qmp_phy_vreg_l,
3036a05b6d51SMrinmay Sarkar 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
3037a05b6d51SMrinmay Sarkar 	.regs			= pciephy_v5_regs_layout,
3038a05b6d51SMrinmay Sarkar 
3039a05b6d51SMrinmay Sarkar 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
3040a05b6d51SMrinmay Sarkar 	.phy_status		= PHYSTATUS_4_20,
3041a05b6d51SMrinmay Sarkar };
3042a05b6d51SMrinmay Sarkar 
3043a05b6d51SMrinmay Sarkar static const struct qmp_phy_cfg sa8775p_qmp_gen4x4_pciephy_cfg = {
3044a05b6d51SMrinmay Sarkar 	.lanes = 4,
3045a05b6d51SMrinmay Sarkar 	.offsets		= &qmp_pcie_offsets_v5_30,
3046a05b6d51SMrinmay Sarkar 
3047a05b6d51SMrinmay Sarkar 	.tbls = {
3048a05b6d51SMrinmay Sarkar 		.serdes		= sa8775p_qmp_gen4x4_pcie_serdes_alt_tbl,
3049a05b6d51SMrinmay Sarkar 		.serdes_num		= ARRAY_SIZE(sa8775p_qmp_gen4x4_pcie_serdes_alt_tbl),
3050a05b6d51SMrinmay Sarkar 		.tx		= sa8775p_qmp_gen4_pcie_tx_tbl,
3051a05b6d51SMrinmay Sarkar 		.tx_num		= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_tx_tbl),
3052a05b6d51SMrinmay Sarkar 		.rx			= sa8775p_qmp_gen4x4_pcie_rx_alt_tbl,
3053a05b6d51SMrinmay Sarkar 		.rx_num		= ARRAY_SIZE(sa8775p_qmp_gen4x4_pcie_rx_alt_tbl),
3054a05b6d51SMrinmay Sarkar 		.pcs		= sa8775p_qmp_gen4x4_pcie_pcs_alt_tbl,
3055a05b6d51SMrinmay Sarkar 		.pcs_num		= ARRAY_SIZE(sa8775p_qmp_gen4x4_pcie_pcs_alt_tbl),
3056a05b6d51SMrinmay Sarkar 		.pcs_misc		= sa8775p_qmp_gen4_pcie_pcs_misc_tbl,
3057a05b6d51SMrinmay Sarkar 		.pcs_misc_num	= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_pcs_misc_tbl),
3058a05b6d51SMrinmay Sarkar 	},
3059a05b6d51SMrinmay Sarkar 
3060a05b6d51SMrinmay Sarkar 	.tbls_rc = &(const struct qmp_phy_cfg_tbls) {
3061a05b6d51SMrinmay Sarkar 		.serdes		= sa8775p_qmp_gen4x4_pcie_rc_serdes_alt_tbl,
3062a05b6d51SMrinmay Sarkar 		.serdes_num	= ARRAY_SIZE(sa8775p_qmp_gen4x4_pcie_rc_serdes_alt_tbl),
3063a05b6d51SMrinmay Sarkar 		.pcs_misc	= sa8775p_qmp_gen4_pcie_rc_pcs_misc_tbl,
3064a05b6d51SMrinmay Sarkar 		.pcs_misc_num	= ARRAY_SIZE(sa8775p_qmp_gen4_pcie_rc_pcs_misc_tbl),
3065a05b6d51SMrinmay Sarkar 	},
3066a05b6d51SMrinmay Sarkar 
3067a05b6d51SMrinmay Sarkar 	.clk_list		= sa8775p_pciephy_clk_l,
3068a05b6d51SMrinmay Sarkar 	.num_clks		= ARRAY_SIZE(sa8775p_pciephy_clk_l),
3069a05b6d51SMrinmay Sarkar 	.reset_list		= sdm845_pciephy_reset_l,
3070a05b6d51SMrinmay Sarkar 	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
3071a05b6d51SMrinmay Sarkar 	.vreg_list		= qmp_phy_vreg_l,
3072a05b6d51SMrinmay Sarkar 	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
3073a05b6d51SMrinmay Sarkar 	.regs			= pciephy_v5_regs_layout,
3074a05b6d51SMrinmay Sarkar 
3075a05b6d51SMrinmay Sarkar 	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
3076a05b6d51SMrinmay Sarkar 	.phy_status		= PHYSTATUS_4_20,
3077a05b6d51SMrinmay Sarkar };
3078a05b6d51SMrinmay Sarkar 
307927878615SJohan Hovold static void qmp_pcie_configure_lane(void __iomem *base,
308094a407ccSDmitry Baryshkov 					const struct qmp_phy_init_tbl tbl[],
308194a407ccSDmitry Baryshkov 					int num,
308294a407ccSDmitry Baryshkov 					u8 lane_mask)
308394a407ccSDmitry Baryshkov {
308494a407ccSDmitry Baryshkov 	int i;
308594a407ccSDmitry Baryshkov 	const struct qmp_phy_init_tbl *t = tbl;
308694a407ccSDmitry Baryshkov 
308794a407ccSDmitry Baryshkov 	if (!t)
308894a407ccSDmitry Baryshkov 		return;
308994a407ccSDmitry Baryshkov 
309094a407ccSDmitry Baryshkov 	for (i = 0; i < num; i++, t++) {
309194a407ccSDmitry Baryshkov 		if (!(t->lane_mask & lane_mask))
309294a407ccSDmitry Baryshkov 			continue;
309394a407ccSDmitry Baryshkov 
309494a407ccSDmitry Baryshkov 		writel(t->val, base + t->offset);
309594a407ccSDmitry Baryshkov 	}
309694a407ccSDmitry Baryshkov }
309794a407ccSDmitry Baryshkov 
309827878615SJohan Hovold static void qmp_pcie_configure(void __iomem *base,
309994a407ccSDmitry Baryshkov 					const struct qmp_phy_init_tbl tbl[],
310094a407ccSDmitry Baryshkov 					int num)
310194a407ccSDmitry Baryshkov {
3102f2175762SJohan Hovold 	qmp_pcie_configure_lane(base, tbl, num, 0xff);
310394a407ccSDmitry Baryshkov }
310494a407ccSDmitry Baryshkov 
31056c37a02bSJohan Hovold static void qmp_pcie_init_port_b(struct qmp_pcie *qmp, const struct qmp_phy_cfg_tbls *tbls)
31066c37a02bSJohan Hovold {
31076c37a02bSJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
31086c37a02bSJohan Hovold 	const struct qmp_pcie_offsets *offs = cfg->offsets;
31096c37a02bSJohan Hovold 	void __iomem *tx3, *rx3, *tx4, *rx4;
31106c37a02bSJohan Hovold 
31116c37a02bSJohan Hovold 	tx3 = qmp->port_b + offs->tx;
31126c37a02bSJohan Hovold 	rx3 = qmp->port_b + offs->rx;
31136c37a02bSJohan Hovold 	tx4 = qmp->port_b + offs->tx2;
31146c37a02bSJohan Hovold 	rx4 = qmp->port_b + offs->rx2;
31156c37a02bSJohan Hovold 
31166c37a02bSJohan Hovold 	qmp_pcie_configure_lane(tx3, tbls->tx, tbls->tx_num, 1);
31176c37a02bSJohan Hovold 	qmp_pcie_configure_lane(rx3, tbls->rx, tbls->rx_num, 1);
31186c37a02bSJohan Hovold 
31196c37a02bSJohan Hovold 	qmp_pcie_configure_lane(tx4, tbls->tx, tbls->tx_num, 2);
31206c37a02bSJohan Hovold 	qmp_pcie_configure_lane(rx4, tbls->rx, tbls->rx_num, 2);
31216c37a02bSJohan Hovold }
31226c37a02bSJohan Hovold 
3123ec7bc1b4SJohan Hovold static void qmp_pcie_init_registers(struct qmp_pcie *qmp, const struct qmp_phy_cfg_tbls *tbls)
312494a407ccSDmitry Baryshkov {
3125ec7bc1b4SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
31262fdedef3SJohan Hovold 	void __iomem *serdes = qmp->serdes;
3127ec7bc1b4SJohan Hovold 	void __iomem *tx = qmp->tx;
3128ec7bc1b4SJohan Hovold 	void __iomem *rx = qmp->rx;
3129ec7bc1b4SJohan Hovold 	void __iomem *tx2 = qmp->tx2;
3130ec7bc1b4SJohan Hovold 	void __iomem *rx2 = qmp->rx2;
3131ec7bc1b4SJohan Hovold 	void __iomem *pcs = qmp->pcs;
3132ec7bc1b4SJohan Hovold 	void __iomem *pcs_misc = qmp->pcs_misc;
3133269b70e8SAbel Vesa 	void __iomem *ln_shrd = qmp->ln_shrd;
313494a407ccSDmitry Baryshkov 
3135d8c9a1e9SJohan Hovold 	if (!tbls)
31362566ad8eSDmitry Baryshkov 		return;
313794a407ccSDmitry Baryshkov 
3138d8c9a1e9SJohan Hovold 	qmp_pcie_configure(serdes, tbls->serdes, tbls->serdes_num);
31392566ad8eSDmitry Baryshkov 
3140d8c9a1e9SJohan Hovold 	qmp_pcie_configure_lane(tx, tbls->tx, tbls->tx_num, 1);
3141d8c9a1e9SJohan Hovold 	qmp_pcie_configure_lane(rx, tbls->rx, tbls->rx_num, 1);
3142f8b64114SJohan Hovold 
3143f8b64114SJohan Hovold 	if (cfg->lanes >= 2) {
3144d8c9a1e9SJohan Hovold 		qmp_pcie_configure_lane(tx2, tbls->tx, tbls->tx_num, 2);
3145d8c9a1e9SJohan Hovold 		qmp_pcie_configure_lane(rx2, tbls->rx, tbls->rx_num, 2);
3146f8b64114SJohan Hovold 	}
31472566ad8eSDmitry Baryshkov 
3148d8c9a1e9SJohan Hovold 	qmp_pcie_configure(pcs, tbls->pcs, tbls->pcs_num);
3149d8c9a1e9SJohan Hovold 	qmp_pcie_configure(pcs_misc, tbls->pcs_misc, tbls->pcs_misc_num);
31506c37a02bSJohan Hovold 
31516c37a02bSJohan Hovold 	if (cfg->lanes >= 4 && qmp->tcsr_4ln_config) {
31526c37a02bSJohan Hovold 		qmp_pcie_configure(serdes, cfg->serdes_4ln_tbl, cfg->serdes_4ln_num);
31536c37a02bSJohan Hovold 		qmp_pcie_init_port_b(qmp, tbls);
31546c37a02bSJohan Hovold 	}
3155269b70e8SAbel Vesa 
3156269b70e8SAbel Vesa 	qmp_pcie_configure(ln_shrd, tbls->ln_shrd, tbls->ln_shrd_num);
315794a407ccSDmitry Baryshkov }
315894a407ccSDmitry Baryshkov 
315991174e2cSJohan Hovold static int qmp_pcie_init(struct phy *phy)
316094a407ccSDmitry Baryshkov {
31612fdedef3SJohan Hovold 	struct qmp_pcie *qmp = phy_get_drvdata(phy);
31622fdedef3SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
3163189ac6b8SDmitry Baryshkov 	int ret;
316494a407ccSDmitry Baryshkov 
316594a407ccSDmitry Baryshkov 	ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs);
316694a407ccSDmitry Baryshkov 	if (ret) {
316794a407ccSDmitry Baryshkov 		dev_err(qmp->dev, "failed to enable regulators, err=%d\n", ret);
31681239fd71SDmitry Baryshkov 		return ret;
316994a407ccSDmitry Baryshkov 	}
317094a407ccSDmitry Baryshkov 
3171189ac6b8SDmitry Baryshkov 	ret = reset_control_bulk_assert(cfg->num_resets, qmp->resets);
317294a407ccSDmitry Baryshkov 	if (ret) {
3173189ac6b8SDmitry Baryshkov 		dev_err(qmp->dev, "reset assert failed\n");
317494a407ccSDmitry Baryshkov 		goto err_disable_regulators;
317594a407ccSDmitry Baryshkov 	}
317694a407ccSDmitry Baryshkov 
3177269b70e8SAbel Vesa 	ret = reset_control_assert(qmp->nocsr_reset);
3178269b70e8SAbel Vesa 	if (ret) {
3179269b70e8SAbel Vesa 		dev_err(qmp->dev, "no-csr reset assert failed\n");
3180269b70e8SAbel Vesa 		goto err_assert_reset;
3181269b70e8SAbel Vesa 	}
3182269b70e8SAbel Vesa 
3183fffdeaf8SJohan Hovold 	usleep_range(200, 300);
3184fffdeaf8SJohan Hovold 
3185189ac6b8SDmitry Baryshkov 	ret = reset_control_bulk_deassert(cfg->num_resets, qmp->resets);
318694a407ccSDmitry Baryshkov 	if (ret) {
3187189ac6b8SDmitry Baryshkov 		dev_err(qmp->dev, "reset deassert failed\n");
3188269b70e8SAbel Vesa 		goto err_assert_reset;
318994a407ccSDmitry Baryshkov 	}
319094a407ccSDmitry Baryshkov 
319194a407ccSDmitry Baryshkov 	ret = clk_bulk_prepare_enable(cfg->num_clks, qmp->clks);
319294a407ccSDmitry Baryshkov 	if (ret)
319394a407ccSDmitry Baryshkov 		goto err_assert_reset;
319494a407ccSDmitry Baryshkov 
319594a407ccSDmitry Baryshkov 	return 0;
319694a407ccSDmitry Baryshkov 
319794a407ccSDmitry Baryshkov err_assert_reset:
3198189ac6b8SDmitry Baryshkov 	reset_control_bulk_assert(cfg->num_resets, qmp->resets);
319994a407ccSDmitry Baryshkov err_disable_regulators:
320094a407ccSDmitry Baryshkov 	regulator_bulk_disable(cfg->num_vregs, qmp->vregs);
320194a407ccSDmitry Baryshkov 
320294a407ccSDmitry Baryshkov 	return ret;
320394a407ccSDmitry Baryshkov }
320494a407ccSDmitry Baryshkov 
320591174e2cSJohan Hovold static int qmp_pcie_exit(struct phy *phy)
320694a407ccSDmitry Baryshkov {
32072fdedef3SJohan Hovold 	struct qmp_pcie *qmp = phy_get_drvdata(phy);
32082fdedef3SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
320994a407ccSDmitry Baryshkov 
3210189ac6b8SDmitry Baryshkov 	reset_control_bulk_assert(cfg->num_resets, qmp->resets);
321194a407ccSDmitry Baryshkov 
321294a407ccSDmitry Baryshkov 	clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks);
321394a407ccSDmitry Baryshkov 
321494a407ccSDmitry Baryshkov 	regulator_bulk_disable(cfg->num_vregs, qmp->vregs);
321594a407ccSDmitry Baryshkov 
321694a407ccSDmitry Baryshkov 	return 0;
321794a407ccSDmitry Baryshkov }
321894a407ccSDmitry Baryshkov 
321927878615SJohan Hovold static int qmp_pcie_power_on(struct phy *phy)
322094a407ccSDmitry Baryshkov {
32212fdedef3SJohan Hovold 	struct qmp_pcie *qmp = phy_get_drvdata(phy);
32222fdedef3SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
3223d8c9a1e9SJohan Hovold 	const struct qmp_phy_cfg_tbls *mode_tbls;
32242fdedef3SJohan Hovold 	void __iomem *pcs = qmp->pcs;
322594a407ccSDmitry Baryshkov 	void __iomem *status;
32262577ba8cSJohan Hovold 	unsigned int mask, val;
322794a407ccSDmitry Baryshkov 	int ret;
322894a407ccSDmitry Baryshkov 
32295b68d95cSJohan Hovold 	qphy_setbits(pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL],
32305b68d95cSJohan Hovold 			cfg->pwrdn_ctrl);
32315b68d95cSJohan Hovold 
32322fdedef3SJohan Hovold 	if (qmp->mode == PHY_MODE_PCIE_RC)
3233d8c9a1e9SJohan Hovold 		mode_tbls = cfg->tbls_rc;
323411bf53a3SDmitry Baryshkov 	else
3235d8c9a1e9SJohan Hovold 		mode_tbls = cfg->tbls_ep;
323611bf53a3SDmitry Baryshkov 
3237ec7bc1b4SJohan Hovold 	qmp_pcie_init_registers(qmp, &cfg->tbls);
3238ec7bc1b4SJohan Hovold 	qmp_pcie_init_registers(qmp, mode_tbls);
323994a407ccSDmitry Baryshkov 
32409e420f1eSJohan Hovold 	ret = clk_bulk_prepare_enable(qmp->num_pipe_clks, qmp->pipe_clks);
32419e420f1eSJohan Hovold 	if (ret)
3242fd926994SDmitry Baryshkov 		return ret;
324394a407ccSDmitry Baryshkov 
3244269b70e8SAbel Vesa 	ret = reset_control_deassert(qmp->nocsr_reset);
3245269b70e8SAbel Vesa 	if (ret) {
3246269b70e8SAbel Vesa 		dev_err(qmp->dev, "no-csr reset deassert failed\n");
3247269b70e8SAbel Vesa 		goto err_disable_pipe_clk;
3248269b70e8SAbel Vesa 	}
3249269b70e8SAbel Vesa 
325094a407ccSDmitry Baryshkov 	/* Pull PHY out of reset state */
325194a407ccSDmitry Baryshkov 	qphy_clrbits(pcs, cfg->regs[QPHY_SW_RESET], SW_RESET);
3252fd926994SDmitry Baryshkov 
325394a407ccSDmitry Baryshkov 	/* start SerDes and Phy-Coding-Sublayer */
32545806b87dSJohan Hovold 	qphy_setbits(pcs, cfg->regs[QPHY_START_CTRL], SERDES_START | PCS_START);
325594a407ccSDmitry Baryshkov 
325651bd3306SJohan Hovold 	if (!cfg->skip_start_delay)
325751bd3306SJohan Hovold 		usleep_range(1000, 1200);
325851bd3306SJohan Hovold 
325994a407ccSDmitry Baryshkov 	status = pcs + cfg->regs[QPHY_PCS_STATUS];
326094a407ccSDmitry Baryshkov 	mask = cfg->phy_status;
32615cbeb75aSJohan Hovold 	ret = readl_poll_timeout(status, val, !(val & mask), 200,
326294a407ccSDmitry Baryshkov 				 PHY_INIT_COMPLETE_TIMEOUT);
326394a407ccSDmitry Baryshkov 	if (ret) {
326494a407ccSDmitry Baryshkov 		dev_err(qmp->dev, "phy initialization timed-out\n");
326594a407ccSDmitry Baryshkov 		goto err_disable_pipe_clk;
326694a407ccSDmitry Baryshkov 	}
3267da07a06bSDmitry Baryshkov 
326894a407ccSDmitry Baryshkov 	return 0;
326994a407ccSDmitry Baryshkov 
327094a407ccSDmitry Baryshkov err_disable_pipe_clk:
32719e420f1eSJohan Hovold 	clk_bulk_disable_unprepare(qmp->num_pipe_clks, qmp->pipe_clks);
327294a407ccSDmitry Baryshkov 
327394a407ccSDmitry Baryshkov 	return ret;
327494a407ccSDmitry Baryshkov }
327594a407ccSDmitry Baryshkov 
327627878615SJohan Hovold static int qmp_pcie_power_off(struct phy *phy)
327794a407ccSDmitry Baryshkov {
32782fdedef3SJohan Hovold 	struct qmp_pcie *qmp = phy_get_drvdata(phy);
32792fdedef3SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
328094a407ccSDmitry Baryshkov 
32819e420f1eSJohan Hovold 	clk_bulk_disable_unprepare(qmp->num_pipe_clks, qmp->pipe_clks);
328294a407ccSDmitry Baryshkov 
328394a407ccSDmitry Baryshkov 	/* PHY reset */
32842fdedef3SJohan Hovold 	qphy_setbits(qmp->pcs, cfg->regs[QPHY_SW_RESET], SW_RESET);
328594a407ccSDmitry Baryshkov 
328694a407ccSDmitry Baryshkov 	/* stop SerDes and Phy-Coding-Sublayer */
32872fdedef3SJohan Hovold 	qphy_clrbits(qmp->pcs, cfg->regs[QPHY_START_CTRL],
32885806b87dSJohan Hovold 			SERDES_START | PCS_START);
328994a407ccSDmitry Baryshkov 
329094a407ccSDmitry Baryshkov 	/* Put PHY into POWER DOWN state: active low */
32912fdedef3SJohan Hovold 	qphy_clrbits(qmp->pcs, cfg->regs[QPHY_PCS_POWER_DOWN_CONTROL],
329294a407ccSDmitry Baryshkov 			cfg->pwrdn_ctrl);
329394a407ccSDmitry Baryshkov 
329494a407ccSDmitry Baryshkov 	return 0;
329594a407ccSDmitry Baryshkov }
329694a407ccSDmitry Baryshkov 
329727878615SJohan Hovold static int qmp_pcie_enable(struct phy *phy)
329894a407ccSDmitry Baryshkov {
329994a407ccSDmitry Baryshkov 	int ret;
330094a407ccSDmitry Baryshkov 
330127878615SJohan Hovold 	ret = qmp_pcie_init(phy);
330294a407ccSDmitry Baryshkov 	if (ret)
330394a407ccSDmitry Baryshkov 		return ret;
330494a407ccSDmitry Baryshkov 
330527878615SJohan Hovold 	ret = qmp_pcie_power_on(phy);
330694a407ccSDmitry Baryshkov 	if (ret)
330727878615SJohan Hovold 		qmp_pcie_exit(phy);
330894a407ccSDmitry Baryshkov 
330994a407ccSDmitry Baryshkov 	return ret;
331094a407ccSDmitry Baryshkov }
331194a407ccSDmitry Baryshkov 
331227878615SJohan Hovold static int qmp_pcie_disable(struct phy *phy)
331394a407ccSDmitry Baryshkov {
331494a407ccSDmitry Baryshkov 	int ret;
331594a407ccSDmitry Baryshkov 
331627878615SJohan Hovold 	ret = qmp_pcie_power_off(phy);
331794a407ccSDmitry Baryshkov 	if (ret)
331894a407ccSDmitry Baryshkov 		return ret;
331927878615SJohan Hovold 
332027878615SJohan Hovold 	return qmp_pcie_exit(phy);
332194a407ccSDmitry Baryshkov }
332294a407ccSDmitry Baryshkov 
332311bf53a3SDmitry Baryshkov static int qmp_pcie_set_mode(struct phy *phy, enum phy_mode mode, int submode)
332411bf53a3SDmitry Baryshkov {
33252fdedef3SJohan Hovold 	struct qmp_pcie *qmp = phy_get_drvdata(phy);
332611bf53a3SDmitry Baryshkov 
332711bf53a3SDmitry Baryshkov 	switch (submode) {
332811bf53a3SDmitry Baryshkov 	case PHY_MODE_PCIE_RC:
332911bf53a3SDmitry Baryshkov 	case PHY_MODE_PCIE_EP:
33302fdedef3SJohan Hovold 		qmp->mode = submode;
333111bf53a3SDmitry Baryshkov 		break;
333211bf53a3SDmitry Baryshkov 	default:
333311bf53a3SDmitry Baryshkov 		dev_err(&phy->dev, "Unsupported submode %d\n", submode);
333411bf53a3SDmitry Baryshkov 		return -EINVAL;
333511bf53a3SDmitry Baryshkov 	}
333611bf53a3SDmitry Baryshkov 
333711bf53a3SDmitry Baryshkov 	return 0;
333811bf53a3SDmitry Baryshkov }
333911bf53a3SDmitry Baryshkov 
334063bf101aSJohan Hovold static const struct phy_ops qmp_pcie_phy_ops = {
334163bf101aSJohan Hovold 	.power_on	= qmp_pcie_enable,
334263bf101aSJohan Hovold 	.power_off	= qmp_pcie_disable,
334363bf101aSJohan Hovold 	.set_mode	= qmp_pcie_set_mode,
334463bf101aSJohan Hovold 	.owner		= THIS_MODULE,
334563bf101aSJohan Hovold };
334663bf101aSJohan Hovold 
334752b99773SJohan Hovold static int qmp_pcie_vreg_init(struct qmp_pcie *qmp)
334894a407ccSDmitry Baryshkov {
334952b99773SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
335052b99773SJohan Hovold 	struct device *dev = qmp->dev;
335194a407ccSDmitry Baryshkov 	int num = cfg->num_vregs;
335294a407ccSDmitry Baryshkov 	int i;
335394a407ccSDmitry Baryshkov 
335494a407ccSDmitry Baryshkov 	qmp->vregs = devm_kcalloc(dev, num, sizeof(*qmp->vregs), GFP_KERNEL);
335594a407ccSDmitry Baryshkov 	if (!qmp->vregs)
335694a407ccSDmitry Baryshkov 		return -ENOMEM;
335794a407ccSDmitry Baryshkov 
335894a407ccSDmitry Baryshkov 	for (i = 0; i < num; i++)
335994a407ccSDmitry Baryshkov 		qmp->vregs[i].supply = cfg->vreg_list[i];
336094a407ccSDmitry Baryshkov 
336194a407ccSDmitry Baryshkov 	return devm_regulator_bulk_get(dev, num, qmp->vregs);
336294a407ccSDmitry Baryshkov }
336394a407ccSDmitry Baryshkov 
336452b99773SJohan Hovold static int qmp_pcie_reset_init(struct qmp_pcie *qmp)
336594a407ccSDmitry Baryshkov {
336652b99773SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
336752b99773SJohan Hovold 	struct device *dev = qmp->dev;
336894a407ccSDmitry Baryshkov 	int i;
3369189ac6b8SDmitry Baryshkov 	int ret;
337094a407ccSDmitry Baryshkov 
337194a407ccSDmitry Baryshkov 	qmp->resets = devm_kcalloc(dev, cfg->num_resets,
337294a407ccSDmitry Baryshkov 				   sizeof(*qmp->resets), GFP_KERNEL);
337394a407ccSDmitry Baryshkov 	if (!qmp->resets)
337494a407ccSDmitry Baryshkov 		return -ENOMEM;
337594a407ccSDmitry Baryshkov 
3376189ac6b8SDmitry Baryshkov 	for (i = 0; i < cfg->num_resets; i++)
3377189ac6b8SDmitry Baryshkov 		qmp->resets[i].id = cfg->reset_list[i];
337894a407ccSDmitry Baryshkov 
3379189ac6b8SDmitry Baryshkov 	ret = devm_reset_control_bulk_get_exclusive(dev, cfg->num_resets, qmp->resets);
3380189ac6b8SDmitry Baryshkov 	if (ret)
3381189ac6b8SDmitry Baryshkov 		return dev_err_probe(dev, ret, "failed to get resets\n");
338294a407ccSDmitry Baryshkov 
3383269b70e8SAbel Vesa 	if (cfg->has_nocsr_reset) {
3384269b70e8SAbel Vesa 		qmp->nocsr_reset = devm_reset_control_get_exclusive(dev, "phy_nocsr");
3385269b70e8SAbel Vesa 		if (IS_ERR(qmp->nocsr_reset))
3386269b70e8SAbel Vesa 			return dev_err_probe(dev, PTR_ERR(qmp->nocsr_reset),
3387269b70e8SAbel Vesa 						"failed to get no-csr reset\n");
3388269b70e8SAbel Vesa 	}
3389269b70e8SAbel Vesa 
339094a407ccSDmitry Baryshkov 	return 0;
339194a407ccSDmitry Baryshkov }
339294a407ccSDmitry Baryshkov 
339352b99773SJohan Hovold static int qmp_pcie_clk_init(struct qmp_pcie *qmp)
339494a407ccSDmitry Baryshkov {
339552b99773SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
339652b99773SJohan Hovold 	struct device *dev = qmp->dev;
339794a407ccSDmitry Baryshkov 	int num = cfg->num_clks;
339894a407ccSDmitry Baryshkov 	int i;
339994a407ccSDmitry Baryshkov 
340094a407ccSDmitry Baryshkov 	qmp->clks = devm_kcalloc(dev, num, sizeof(*qmp->clks), GFP_KERNEL);
340194a407ccSDmitry Baryshkov 	if (!qmp->clks)
340294a407ccSDmitry Baryshkov 		return -ENOMEM;
340394a407ccSDmitry Baryshkov 
340494a407ccSDmitry Baryshkov 	for (i = 0; i < num; i++)
340594a407ccSDmitry Baryshkov 		qmp->clks[i].id = cfg->clk_list[i];
340694a407ccSDmitry Baryshkov 
340794a407ccSDmitry Baryshkov 	return devm_clk_bulk_get(dev, num, qmp->clks);
340894a407ccSDmitry Baryshkov }
340994a407ccSDmitry Baryshkov 
341094a407ccSDmitry Baryshkov static void phy_clk_release_provider(void *res)
341194a407ccSDmitry Baryshkov {
341294a407ccSDmitry Baryshkov 	of_clk_del_provider(res);
341394a407ccSDmitry Baryshkov }
341494a407ccSDmitry Baryshkov 
341594a407ccSDmitry Baryshkov /*
341694a407ccSDmitry Baryshkov  * Register a fixed rate pipe clock.
341794a407ccSDmitry Baryshkov  *
341894a407ccSDmitry Baryshkov  * The <s>_pipe_clksrc generated by PHY goes to the GCC that gate
341994a407ccSDmitry Baryshkov  * controls it. The <s>_pipe_clk coming out of the GCC is requested
342094a407ccSDmitry Baryshkov  * by the PHY driver for its operations.
342194a407ccSDmitry Baryshkov  * We register the <s>_pipe_clksrc here. The gcc driver takes care
342294a407ccSDmitry Baryshkov  * of assigning this <s>_pipe_clksrc as parent to <s>_pipe_clk.
342394a407ccSDmitry Baryshkov  * Below picture shows this relationship.
342494a407ccSDmitry Baryshkov  *
342594a407ccSDmitry Baryshkov  *         +---------------+
342694a407ccSDmitry Baryshkov  *         |   PHY block   |<<---------------------------------------+
342794a407ccSDmitry Baryshkov  *         |               |                                         |
342894a407ccSDmitry Baryshkov  *         |   +-------+   |                   +-----+               |
342994a407ccSDmitry Baryshkov  *   I/P---^-->|  PLL  |---^--->pipe_clksrc--->| GCC |--->pipe_clk---+
343094a407ccSDmitry Baryshkov  *    clk  |   +-------+   |                   +-----+
343194a407ccSDmitry Baryshkov  *         +---------------+
343294a407ccSDmitry Baryshkov  */
34332fdedef3SJohan Hovold static int phy_pipe_clk_register(struct qmp_pcie *qmp, struct device_node *np)
343494a407ccSDmitry Baryshkov {
3435e8511f40SJohan Hovold 	struct clk_fixed_rate *fixed = &qmp->pipe_clk_fixed;
343694a407ccSDmitry Baryshkov 	struct clk_init_data init = { };
343794a407ccSDmitry Baryshkov 	int ret;
343894a407ccSDmitry Baryshkov 
343994a407ccSDmitry Baryshkov 	ret = of_property_read_string(np, "clock-output-names", &init.name);
344094a407ccSDmitry Baryshkov 	if (ret) {
344194a407ccSDmitry Baryshkov 		dev_err(qmp->dev, "%pOFn: No clock-output-names\n", np);
344294a407ccSDmitry Baryshkov 		return ret;
344394a407ccSDmitry Baryshkov 	}
344494a407ccSDmitry Baryshkov 
344594a407ccSDmitry Baryshkov 	init.ops = &clk_fixed_rate_ops;
344694a407ccSDmitry Baryshkov 
34472ec9bc8dSRobert Marko 	/*
34482ec9bc8dSRobert Marko 	 * Controllers using QMP PHY-s use 125MHz pipe clock interface
34492ec9bc8dSRobert Marko 	 * unless other frequency is specified in the PHY config.
34502ec9bc8dSRobert Marko 	 */
34512fdedef3SJohan Hovold 	if (qmp->cfg->pipe_clock_rate)
34522fdedef3SJohan Hovold 		fixed->fixed_rate = qmp->cfg->pipe_clock_rate;
34532ec9bc8dSRobert Marko 	else
345494a407ccSDmitry Baryshkov 		fixed->fixed_rate = 125000000;
34552ec9bc8dSRobert Marko 
345694a407ccSDmitry Baryshkov 	fixed->hw.init = &init;
345794a407ccSDmitry Baryshkov 
345894a407ccSDmitry Baryshkov 	ret = devm_clk_hw_register(qmp->dev, &fixed->hw);
345994a407ccSDmitry Baryshkov 	if (ret)
346094a407ccSDmitry Baryshkov 		return ret;
346194a407ccSDmitry Baryshkov 
346294a407ccSDmitry Baryshkov 	ret = of_clk_add_hw_provider(np, of_clk_hw_simple_get, &fixed->hw);
346394a407ccSDmitry Baryshkov 	if (ret)
346494a407ccSDmitry Baryshkov 		return ret;
346594a407ccSDmitry Baryshkov 
346694a407ccSDmitry Baryshkov 	/*
346794a407ccSDmitry Baryshkov 	 * Roll a devm action because the clock provider is the child node, but
346894a407ccSDmitry Baryshkov 	 * the child node is not actually a device.
346994a407ccSDmitry Baryshkov 	 */
347094a407ccSDmitry Baryshkov 	return devm_add_action_or_reset(qmp->dev, phy_clk_release_provider, np);
347194a407ccSDmitry Baryshkov }
347294a407ccSDmitry Baryshkov 
34737bc609e3SJohan Hovold static int qmp_pcie_parse_dt_legacy(struct qmp_pcie *qmp, struct device_node *np)
347494a407ccSDmitry Baryshkov {
34757bc609e3SJohan Hovold 	struct platform_device *pdev = to_platform_device(qmp->dev);
347652b99773SJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
347752b99773SJohan Hovold 	struct device *dev = qmp->dev;
34789e420f1eSJohan Hovold 	struct clk *clk;
347994a407ccSDmitry Baryshkov 
34807bc609e3SJohan Hovold 	qmp->serdes = devm_platform_ioremap_resource(pdev, 0);
34817bc609e3SJohan Hovold 	if (IS_ERR(qmp->serdes))
34827bc609e3SJohan Hovold 		return PTR_ERR(qmp->serdes);
348394a407ccSDmitry Baryshkov 
348494a407ccSDmitry Baryshkov 	/*
34858d3bf724SJohan Hovold 	 * Get memory resources for the PHY:
348694a407ccSDmitry Baryshkov 	 * Resources are indexed as: tx -> 0; rx -> 1; pcs -> 2.
348794a407ccSDmitry Baryshkov 	 * For dual lane PHYs: tx2 -> 3, rx2 -> 4, pcs_misc (optional) -> 5
348894a407ccSDmitry Baryshkov 	 * For single lane PHYs: pcs_misc (optional) -> 3.
348994a407ccSDmitry Baryshkov 	 */
34902fdedef3SJohan Hovold 	qmp->tx = devm_of_iomap(dev, np, 0, NULL);
34912fdedef3SJohan Hovold 	if (IS_ERR(qmp->tx))
34922fdedef3SJohan Hovold 		return PTR_ERR(qmp->tx);
349394a407ccSDmitry Baryshkov 
34940a40891bSDmitry Baryshkov 	if (of_device_is_compatible(dev->of_node, "qcom,sdm845-qhp-pcie-phy"))
34952fdedef3SJohan Hovold 		qmp->rx = qmp->tx;
34960a40891bSDmitry Baryshkov 	else
34972fdedef3SJohan Hovold 		qmp->rx = devm_of_iomap(dev, np, 1, NULL);
34982fdedef3SJohan Hovold 	if (IS_ERR(qmp->rx))
34992fdedef3SJohan Hovold 		return PTR_ERR(qmp->rx);
350094a407ccSDmitry Baryshkov 
35012fdedef3SJohan Hovold 	qmp->pcs = devm_of_iomap(dev, np, 2, NULL);
35022fdedef3SJohan Hovold 	if (IS_ERR(qmp->pcs))
35032fdedef3SJohan Hovold 		return PTR_ERR(qmp->pcs);
350494a407ccSDmitry Baryshkov 
3505f02543faSJohan Hovold 	if (cfg->lanes >= 2) {
35062fdedef3SJohan Hovold 		qmp->tx2 = devm_of_iomap(dev, np, 3, NULL);
35072fdedef3SJohan Hovold 		if (IS_ERR(qmp->tx2))
35082fdedef3SJohan Hovold 			return PTR_ERR(qmp->tx2);
350969c90cb5SJohan Hovold 
35102fdedef3SJohan Hovold 		qmp->rx2 = devm_of_iomap(dev, np, 4, NULL);
35112fdedef3SJohan Hovold 		if (IS_ERR(qmp->rx2))
35122fdedef3SJohan Hovold 			return PTR_ERR(qmp->rx2);
351394a407ccSDmitry Baryshkov 
35142fdedef3SJohan Hovold 		qmp->pcs_misc = devm_of_iomap(dev, np, 5, NULL);
351594a407ccSDmitry Baryshkov 	} else {
35162fdedef3SJohan Hovold 		qmp->pcs_misc = devm_of_iomap(dev, np, 3, NULL);
351794a407ccSDmitry Baryshkov 	}
351894a407ccSDmitry Baryshkov 
35192fdedef3SJohan Hovold 	if (IS_ERR(qmp->pcs_misc) &&
3520af664324SDmitry Baryshkov 	    of_device_is_compatible(dev->of_node, "qcom,ipq6018-qmp-pcie-phy"))
35212fdedef3SJohan Hovold 		qmp->pcs_misc = qmp->pcs + 0x400;
3522af664324SDmitry Baryshkov 
35232fdedef3SJohan Hovold 	if (IS_ERR(qmp->pcs_misc)) {
3524d8c9a1e9SJohan Hovold 		if (cfg->tbls.pcs_misc ||
3525d8c9a1e9SJohan Hovold 		    (cfg->tbls_rc && cfg->tbls_rc->pcs_misc) ||
3526d8c9a1e9SJohan Hovold 		    (cfg->tbls_ep && cfg->tbls_ep->pcs_misc)) {
35272fdedef3SJohan Hovold 			return PTR_ERR(qmp->pcs_misc);
35282fdedef3SJohan Hovold 		}
3529ecd5507eSJohan Hovold 	}
353094a407ccSDmitry Baryshkov 
35319e420f1eSJohan Hovold 	clk = devm_get_clk_from_child(dev, np, NULL);
35329e420f1eSJohan Hovold 	if (IS_ERR(clk)) {
35339e420f1eSJohan Hovold 		return dev_err_probe(dev, PTR_ERR(clk),
35342fdedef3SJohan Hovold 				     "failed to get pipe clock\n");
353594a407ccSDmitry Baryshkov 	}
353694a407ccSDmitry Baryshkov 
35379e420f1eSJohan Hovold 	qmp->num_pipe_clks = 1;
35389e420f1eSJohan Hovold 	qmp->pipe_clks[0].id = "pipe";
35399e420f1eSJohan Hovold 	qmp->pipe_clks[0].clk = clk;
35409e420f1eSJohan Hovold 
354194a407ccSDmitry Baryshkov 	return 0;
354294a407ccSDmitry Baryshkov }
354394a407ccSDmitry Baryshkov 
35446c37a02bSJohan Hovold static int qmp_pcie_get_4ln_config(struct qmp_pcie *qmp)
35456c37a02bSJohan Hovold {
35466c37a02bSJohan Hovold 	struct regmap *tcsr;
35476c37a02bSJohan Hovold 	unsigned int args[2];
35486c37a02bSJohan Hovold 	int ret;
35496c37a02bSJohan Hovold 
35506c37a02bSJohan Hovold 	tcsr = syscon_regmap_lookup_by_phandle_args(qmp->dev->of_node,
35516c37a02bSJohan Hovold 						    "qcom,4ln-config-sel",
35526c37a02bSJohan Hovold 						    ARRAY_SIZE(args), args);
35536c37a02bSJohan Hovold 	if (IS_ERR(tcsr)) {
35546c37a02bSJohan Hovold 		ret = PTR_ERR(tcsr);
35556c37a02bSJohan Hovold 		if (ret == -ENOENT)
35566c37a02bSJohan Hovold 			return 0;
35576c37a02bSJohan Hovold 
35586c37a02bSJohan Hovold 		dev_err(qmp->dev, "failed to lookup syscon: %d\n", ret);
35596c37a02bSJohan Hovold 		return ret;
35606c37a02bSJohan Hovold 	}
35616c37a02bSJohan Hovold 
35626c37a02bSJohan Hovold 	ret = regmap_test_bits(tcsr, args[0], BIT(args[1]));
35636c37a02bSJohan Hovold 	if (ret < 0) {
35646c37a02bSJohan Hovold 		dev_err(qmp->dev, "failed to read tcsr: %d\n", ret);
35656c37a02bSJohan Hovold 		return ret;
35666c37a02bSJohan Hovold 	}
35676c37a02bSJohan Hovold 
35686c37a02bSJohan Hovold 	qmp->tcsr_4ln_config = ret;
35696c37a02bSJohan Hovold 
35706c37a02bSJohan Hovold 	dev_dbg(qmp->dev, "4ln_config_sel = %d\n", qmp->tcsr_4ln_config);
35716c37a02bSJohan Hovold 
35726c37a02bSJohan Hovold 	return 0;
35736c37a02bSJohan Hovold }
35746c37a02bSJohan Hovold 
3575d0a846baSJohan Hovold static int qmp_pcie_parse_dt(struct qmp_pcie *qmp)
3576d0a846baSJohan Hovold {
3577d0a846baSJohan Hovold 	struct platform_device *pdev = to_platform_device(qmp->dev);
3578d0a846baSJohan Hovold 	const struct qmp_phy_cfg *cfg = qmp->cfg;
3579d0a846baSJohan Hovold 	const struct qmp_pcie_offsets *offs = cfg->offsets;
3580d0a846baSJohan Hovold 	struct device *dev = qmp->dev;
3581d0a846baSJohan Hovold 	void __iomem *base;
3582d0a846baSJohan Hovold 	int ret;
3583d0a846baSJohan Hovold 
3584d0a846baSJohan Hovold 	if (!offs)
3585d0a846baSJohan Hovold 		return -EINVAL;
3586d0a846baSJohan Hovold 
35876c37a02bSJohan Hovold 	ret = qmp_pcie_get_4ln_config(qmp);
35886c37a02bSJohan Hovold 	if (ret)
35896c37a02bSJohan Hovold 		return ret;
35906c37a02bSJohan Hovold 
3591d0a846baSJohan Hovold 	base = devm_platform_ioremap_resource(pdev, 0);
3592d0a846baSJohan Hovold 	if (IS_ERR(base))
3593d0a846baSJohan Hovold 		return PTR_ERR(base);
3594d0a846baSJohan Hovold 
3595d0a846baSJohan Hovold 	qmp->serdes = base + offs->serdes;
3596d0a846baSJohan Hovold 	qmp->pcs = base + offs->pcs;
3597d0a846baSJohan Hovold 	qmp->pcs_misc = base + offs->pcs_misc;
3598d0a846baSJohan Hovold 	qmp->tx = base + offs->tx;
3599d0a846baSJohan Hovold 	qmp->rx = base + offs->rx;
3600d0a846baSJohan Hovold 
3601d0a846baSJohan Hovold 	if (cfg->lanes >= 2) {
3602d0a846baSJohan Hovold 		qmp->tx2 = base + offs->tx2;
3603d0a846baSJohan Hovold 		qmp->rx2 = base + offs->rx2;
3604d0a846baSJohan Hovold 	}
3605d0a846baSJohan Hovold 
36066c37a02bSJohan Hovold 	if (qmp->cfg->lanes >= 4 && qmp->tcsr_4ln_config) {
36076c37a02bSJohan Hovold 		qmp->port_b = devm_platform_ioremap_resource(pdev, 1);
36086c37a02bSJohan Hovold 		if (IS_ERR(qmp->port_b))
36096c37a02bSJohan Hovold 			return PTR_ERR(qmp->port_b);
36106c37a02bSJohan Hovold 	}
36116c37a02bSJohan Hovold 
3612269b70e8SAbel Vesa 	if (cfg->tbls.ln_shrd)
3613269b70e8SAbel Vesa 		qmp->ln_shrd = base + offs->ln_shrd;
3614269b70e8SAbel Vesa 
3615d0a846baSJohan Hovold 	qmp->num_pipe_clks = 2;
3616d0a846baSJohan Hovold 	qmp->pipe_clks[0].id = "pipe";
3617d0a846baSJohan Hovold 	qmp->pipe_clks[1].id = "pipediv2";
3618d0a846baSJohan Hovold 
3619c7005273SDmitry Baryshkov 	ret = devm_clk_bulk_get(dev, 1, qmp->pipe_clks);
3620c7005273SDmitry Baryshkov 	if (ret)
3621c7005273SDmitry Baryshkov 		return ret;
3622c7005273SDmitry Baryshkov 
3623c7005273SDmitry Baryshkov 	ret = devm_clk_bulk_get_optional(dev, qmp->num_pipe_clks - 1, qmp->pipe_clks + 1);
3624d0a846baSJohan Hovold 	if (ret)
3625d0a846baSJohan Hovold 		return ret;
3626d0a846baSJohan Hovold 
3627d0a846baSJohan Hovold 	return 0;
3628d0a846baSJohan Hovold }
3629d0a846baSJohan Hovold 
363027878615SJohan Hovold static int qmp_pcie_probe(struct platform_device *pdev)
363194a407ccSDmitry Baryshkov {
363294a407ccSDmitry Baryshkov 	struct device *dev = &pdev->dev;
363394a407ccSDmitry Baryshkov 	struct phy_provider *phy_provider;
3634d0a846baSJohan Hovold 	struct device_node *np;
36352fdedef3SJohan Hovold 	struct qmp_pcie *qmp;
363694a407ccSDmitry Baryshkov 	int ret;
363794a407ccSDmitry Baryshkov 
363894a407ccSDmitry Baryshkov 	qmp = devm_kzalloc(dev, sizeof(*qmp), GFP_KERNEL);
363994a407ccSDmitry Baryshkov 	if (!qmp)
364094a407ccSDmitry Baryshkov 		return -ENOMEM;
364194a407ccSDmitry Baryshkov 
364294a407ccSDmitry Baryshkov 	qmp->dev = dev;
364394a407ccSDmitry Baryshkov 
364452b99773SJohan Hovold 	qmp->cfg = of_device_get_match_data(dev);
364552b99773SJohan Hovold 	if (!qmp->cfg)
364694a407ccSDmitry Baryshkov 		return -EINVAL;
364794a407ccSDmitry Baryshkov 
364852b99773SJohan Hovold 	WARN_ON_ONCE(!qmp->cfg->pwrdn_ctrl);
364952b99773SJohan Hovold 	WARN_ON_ONCE(!qmp->cfg->phy_status);
365073ad6a9dSJohan Hovold 
365152b99773SJohan Hovold 	ret = qmp_pcie_clk_init(qmp);
365294a407ccSDmitry Baryshkov 	if (ret)
365394a407ccSDmitry Baryshkov 		return ret;
365494a407ccSDmitry Baryshkov 
365552b99773SJohan Hovold 	ret = qmp_pcie_reset_init(qmp);
365694a407ccSDmitry Baryshkov 	if (ret)
365794a407ccSDmitry Baryshkov 		return ret;
365894a407ccSDmitry Baryshkov 
365952b99773SJohan Hovold 	ret = qmp_pcie_vreg_init(qmp);
3660a548b6b4SYuan Can 	if (ret)
366128d74fc3SJohan Hovold 		return ret;
366294a407ccSDmitry Baryshkov 
3663d0a846baSJohan Hovold 	/* Check for legacy binding with child node. */
3664d0a846baSJohan Hovold 	np = of_get_next_available_child(dev->of_node, NULL);
3665d0a846baSJohan Hovold 	if (np) {
3666d0a846baSJohan Hovold 		ret = qmp_pcie_parse_dt_legacy(qmp, np);
3667d0a846baSJohan Hovold 	} else {
3668d0a846baSJohan Hovold 		np = of_node_get(dev->of_node);
3669d0a846baSJohan Hovold 		ret = qmp_pcie_parse_dt(qmp);
3670d0a846baSJohan Hovold 	}
3671393ed5d5SJohan Hovold 	if (ret)
367294a407ccSDmitry Baryshkov 		goto err_node_put;
367394a407ccSDmitry Baryshkov 
3674d0a846baSJohan Hovold 	ret = phy_pipe_clk_register(qmp, np);
3675393ed5d5SJohan Hovold 	if (ret)
367694a407ccSDmitry Baryshkov 		goto err_node_put;
3677da07a06bSDmitry Baryshkov 
36787bc609e3SJohan Hovold 	qmp->mode = PHY_MODE_PCIE_RC;
36797bc609e3SJohan Hovold 
3680d0a846baSJohan Hovold 	qmp->phy = devm_phy_create(dev, np, &qmp_pcie_phy_ops);
36817bc609e3SJohan Hovold 	if (IS_ERR(qmp->phy)) {
36827bc609e3SJohan Hovold 		ret = PTR_ERR(qmp->phy);
36837bc609e3SJohan Hovold 		dev_err(dev, "failed to create PHY: %d\n", ret);
36847bc609e3SJohan Hovold 		goto err_node_put;
36857bc609e3SJohan Hovold 	}
36867bc609e3SJohan Hovold 
36877bc609e3SJohan Hovold 	phy_set_drvdata(qmp->phy, qmp);
36887bc609e3SJohan Hovold 
3689d0a846baSJohan Hovold 	of_node_put(np);
369094a407ccSDmitry Baryshkov 
369194a407ccSDmitry Baryshkov 	phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
369294a407ccSDmitry Baryshkov 
369394a407ccSDmitry Baryshkov 	return PTR_ERR_OR_ZERO(phy_provider);
369494a407ccSDmitry Baryshkov 
369594a407ccSDmitry Baryshkov err_node_put:
3696d0a846baSJohan Hovold 	of_node_put(np);
369794a407ccSDmitry Baryshkov 	return ret;
369894a407ccSDmitry Baryshkov }
369994a407ccSDmitry Baryshkov 
3700cebc6ca7SJohan Hovold static const struct of_device_id qmp_pcie_of_match_table[] = {
3701cebc6ca7SJohan Hovold 	{
3702cebc6ca7SJohan Hovold 		.compatible = "qcom,ipq6018-qmp-pcie-phy",
3703cebc6ca7SJohan Hovold 		.data = &ipq6018_pciephy_cfg,
3704cebc6ca7SJohan Hovold 	}, {
3705cebc6ca7SJohan Hovold 		.compatible = "qcom,ipq8074-qmp-gen3-pcie-phy",
3706cebc6ca7SJohan Hovold 		.data = &ipq8074_pciephy_gen3_cfg,
3707cebc6ca7SJohan Hovold 	}, {
3708cebc6ca7SJohan Hovold 		.compatible = "qcom,ipq8074-qmp-pcie-phy",
3709cebc6ca7SJohan Hovold 		.data = &ipq8074_pciephy_cfg,
3710cebc6ca7SJohan Hovold 	}, {
3711cebc6ca7SJohan Hovold 		.compatible = "qcom,msm8998-qmp-pcie-phy",
3712cebc6ca7SJohan Hovold 		.data = &msm8998_pciephy_cfg,
3713cebc6ca7SJohan Hovold 	}, {
3714a05b6d51SMrinmay Sarkar 		.compatible = "qcom,sa8775p-qmp-gen4x2-pcie-phy",
3715a05b6d51SMrinmay Sarkar 		.data = &sa8775p_qmp_gen4x2_pciephy_cfg,
3716a05b6d51SMrinmay Sarkar 	}, {
3717a05b6d51SMrinmay Sarkar 		.compatible = "qcom,sa8775p-qmp-gen4x4-pcie-phy",
3718a05b6d51SMrinmay Sarkar 		.data = &sa8775p_qmp_gen4x4_pciephy_cfg,
3719a05b6d51SMrinmay Sarkar 	}, {
3720cebc6ca7SJohan Hovold 		.compatible = "qcom,sc8180x-qmp-pcie-phy",
3721cebc6ca7SJohan Hovold 		.data = &sc8180x_pciephy_cfg,
3722cebc6ca7SJohan Hovold 	}, {
3723d0a846baSJohan Hovold 		.compatible = "qcom,sc8280xp-qmp-gen3x1-pcie-phy",
3724d0a846baSJohan Hovold 		.data = &sc8280xp_qmp_gen3x1_pciephy_cfg,
3725d0a846baSJohan Hovold 	}, {
3726d0a846baSJohan Hovold 		.compatible = "qcom,sc8280xp-qmp-gen3x2-pcie-phy",
3727d0a846baSJohan Hovold 		.data = &sc8280xp_qmp_gen3x2_pciephy_cfg,
3728d0a846baSJohan Hovold 	}, {
37296c37a02bSJohan Hovold 		.compatible = "qcom,sc8280xp-qmp-gen3x4-pcie-phy",
37306c37a02bSJohan Hovold 		.data = &sc8280xp_qmp_gen3x4_pciephy_cfg,
37316c37a02bSJohan Hovold 	}, {
3732cebc6ca7SJohan Hovold 		.compatible = "qcom,sdm845-qhp-pcie-phy",
3733cebc6ca7SJohan Hovold 		.data = &sdm845_qhp_pciephy_cfg,
3734cebc6ca7SJohan Hovold 	}, {
3735cebc6ca7SJohan Hovold 		.compatible = "qcom,sdm845-qmp-pcie-phy",
3736cebc6ca7SJohan Hovold 		.data = &sdm845_qmp_pciephy_cfg,
3737cebc6ca7SJohan Hovold 	}, {
3738cebc6ca7SJohan Hovold 		.compatible = "qcom,sdx55-qmp-pcie-phy",
3739cebc6ca7SJohan Hovold 		.data = &sdx55_qmp_pciephy_cfg,
3740cebc6ca7SJohan Hovold 	}, {
374192bd868fSRohit Agarwal 		.compatible = "qcom,sdx65-qmp-gen4x2-pcie-phy",
374292bd868fSRohit Agarwal 		.data = &sdx65_qmp_pciephy_cfg,
374392bd868fSRohit Agarwal 	}, {
3744cebc6ca7SJohan Hovold 		.compatible = "qcom,sm8250-qmp-gen3x1-pcie-phy",
3745cebc6ca7SJohan Hovold 		.data = &sm8250_qmp_gen3x1_pciephy_cfg,
3746cebc6ca7SJohan Hovold 	}, {
3747cebc6ca7SJohan Hovold 		.compatible = "qcom,sm8250-qmp-gen3x2-pcie-phy",
3748cebc6ca7SJohan Hovold 		.data = &sm8250_qmp_gen3x2_pciephy_cfg,
3749cebc6ca7SJohan Hovold 	}, {
3750cebc6ca7SJohan Hovold 		.compatible = "qcom,sm8250-qmp-modem-pcie-phy",
3751cebc6ca7SJohan Hovold 		.data = &sm8250_qmp_gen3x2_pciephy_cfg,
3752cebc6ca7SJohan Hovold 	}, {
3753c7005273SDmitry Baryshkov 		.compatible = "qcom,sm8350-qmp-gen3x1-pcie-phy",
3754c7005273SDmitry Baryshkov 		.data = &sm8350_qmp_gen3x1_pciephy_cfg,
3755c7005273SDmitry Baryshkov 	}, {
3756c7005273SDmitry Baryshkov 		.compatible = "qcom,sm8350-qmp-gen3x2-pcie-phy",
3757c7005273SDmitry Baryshkov 		.data = &sm8350_qmp_gen3x2_pciephy_cfg,
3758c7005273SDmitry Baryshkov 	}, {
3759cebc6ca7SJohan Hovold 		.compatible = "qcom,sm8450-qmp-gen3x1-pcie-phy",
3760cebc6ca7SJohan Hovold 		.data = &sm8450_qmp_gen3x1_pciephy_cfg,
3761cebc6ca7SJohan Hovold 	}, {
3762cebc6ca7SJohan Hovold 		.compatible = "qcom,sm8450-qmp-gen4x2-pcie-phy",
3763cebc6ca7SJohan Hovold 		.data = &sm8450_qmp_gen4x2_pciephy_cfg,
3764269b70e8SAbel Vesa 	}, {
3765269b70e8SAbel Vesa 		.compatible = "qcom,sm8550-qmp-gen3x2-pcie-phy",
3766269b70e8SAbel Vesa 		.data = &sm8550_qmp_gen3x2_pciephy_cfg,
3767269b70e8SAbel Vesa 	}, {
3768269b70e8SAbel Vesa 		.compatible = "qcom,sm8550-qmp-gen4x2-pcie-phy",
3769269b70e8SAbel Vesa 		.data = &sm8550_qmp_gen4x2_pciephy_cfg,
3770cebc6ca7SJohan Hovold 	},
3771cebc6ca7SJohan Hovold 	{ },
3772cebc6ca7SJohan Hovold };
3773cebc6ca7SJohan Hovold MODULE_DEVICE_TABLE(of, qmp_pcie_of_match_table);
3774cebc6ca7SJohan Hovold 
377527878615SJohan Hovold static struct platform_driver qmp_pcie_driver = {
377627878615SJohan Hovold 	.probe		= qmp_pcie_probe,
377794a407ccSDmitry Baryshkov 	.driver = {
3778b35a5311SDmitry Baryshkov 		.name	= "qcom-qmp-pcie-phy",
377927878615SJohan Hovold 		.of_match_table = qmp_pcie_of_match_table,
378094a407ccSDmitry Baryshkov 	},
378194a407ccSDmitry Baryshkov };
378294a407ccSDmitry Baryshkov 
378327878615SJohan Hovold module_platform_driver(qmp_pcie_driver);
378494a407ccSDmitry Baryshkov 
378594a407ccSDmitry Baryshkov MODULE_AUTHOR("Vivek Gautam <vivek.gautam@codeaurora.org>");
3786b35a5311SDmitry Baryshkov MODULE_DESCRIPTION("Qualcomm QMP PCIe PHY driver");
378794a407ccSDmitry Baryshkov MODULE_LICENSE("GPL v2");
3788