xref: /linux/drivers/phy/cadence/phy-cadence-sierra.c (revision a1d12987c38fd97b5e9f266dc849c2d2c6a5bd54)
144d30d62SAlan Douglas // SPDX-License-Identifier: GPL-2.0
244d30d62SAlan Douglas /*
344d30d62SAlan Douglas  * Cadence Sierra PHY Driver
444d30d62SAlan Douglas  *
544d30d62SAlan Douglas  * Copyright (c) 2018 Cadence Design Systems
644d30d62SAlan Douglas  * Author: Alan Douglas <adouglas@cadence.com>
744d30d62SAlan Douglas  *
844d30d62SAlan Douglas  */
944d30d62SAlan Douglas #include <linux/clk.h>
1028081b72SKishon Vijay Abraham I #include <linux/clk-provider.h>
1144d30d62SAlan Douglas #include <linux/delay.h>
1244d30d62SAlan Douglas #include <linux/err.h>
1344d30d62SAlan Douglas #include <linux/io.h>
1444d30d62SAlan Douglas #include <linux/module.h>
1544d30d62SAlan Douglas #include <linux/phy/phy.h>
1644d30d62SAlan Douglas #include <linux/platform_device.h>
1744d30d62SAlan Douglas #include <linux/pm_runtime.h>
1844d30d62SAlan Douglas #include <linux/regmap.h>
1944d30d62SAlan Douglas #include <linux/reset.h>
2044d30d62SAlan Douglas #include <linux/slab.h>
2144d30d62SAlan Douglas #include <linux/of.h>
2244d30d62SAlan Douglas #include <linux/of_platform.h>
2344d30d62SAlan Douglas #include <dt-bindings/phy/phy.h>
2428081b72SKishon Vijay Abraham I #include <dt-bindings/phy/phy-cadence.h>
2544d30d62SAlan Douglas 
26078e9e92SSwapnil Jakhade #define NUM_SSC_MODE		3
270cfa43abSSwapnil Jakhade #define NUM_PHY_TYPE		5
28078e9e92SSwapnil Jakhade 
2944d30d62SAlan Douglas /* PHY register offsets */
30380f5708SKishon Vijay Abraham I #define SIERRA_COMMON_CDB_OFFSET			0x0
31380f5708SKishon Vijay Abraham I #define SIERRA_MACRO_ID_REG				0x0
3228081b72SKishon Vijay Abraham I #define SIERRA_CMN_PLLLC_GEN_PREG			0x42
33*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC_FBDIV_INT_MODE0_PREG		0x43
34*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC_DCOCAL_CTRL_PREG		0x45
35*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC_INIT_PREG			0x46
36*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC_ITERTMR_PREG			0x47
37871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_MODE_PREG			0x48
38871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG		0x49
39871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG		0x4A
40871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_LOCK_CNTSTART_PREG		0x4B
41*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC_LOCKSEARCH_PREG		0x4C
4209d976b3SSwapnil Jakhade #define SIERRA_CMN_PLLLC_CLK1_PREG			0x4D
43*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC_CLK0_PREG			0x4E
44871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG		0x4F
45871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG		0x50
467a5ad9b4SSwapnil Jakhade #define SIERRA_CMN_PLLLC_DSMCORR_PREG			0x51
477a5ad9b4SSwapnil Jakhade #define SIERRA_CMN_PLLLC_SS_PREG			0x52
487a5ad9b4SSwapnil Jakhade #define SIERRA_CMN_PLLLC_SS_AMP_STEP_SIZE_PREG		0x53
497a5ad9b4SSwapnil Jakhade #define SIERRA_CMN_PLLLC_SSTWOPT_PREG			0x54
50*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLCSM_PLLEN_TMR_PREG		0x5D
51*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLCSM_PLLPRE_TMR_PREG		0x5E
52871002d7SAnil Varughese #define SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG	0x62
537a5ad9b4SSwapnil Jakhade #define SIERRA_CMN_PLLLC_LOCK_DELAY_CTRL_PREG		0x63
54*a1d12987SMarcin Wierzbicki #define SIERRA_SDOSCCAL_CLK_CNT_PREG			0x6E
5528081b72SKishon Vijay Abraham I #define SIERRA_CMN_REFRCV_PREG				0x98
56*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_RESCAL_CTRLA_PREG			0xA0
5728081b72SKishon Vijay Abraham I #define SIERRA_CMN_REFRCV1_PREG				0xB8
5828081b72SKishon Vijay Abraham I #define SIERRA_CMN_PLLLC1_GEN_PREG			0xC2
590cfa43abSSwapnil Jakhade #define SIERRA_CMN_PLLLC1_FBDIV_INT_PREG		0xC3
60*a1d12987SMarcin Wierzbicki #define SIERRA_CMN_PLLLC1_DCOCAL_CTRL_PREG		0xC5
618a1b82d7SSwapnil Jakhade #define SIERRA_CMN_PLLLC1_LF_COEFF_MODE0_PREG		0xCA
620cfa43abSSwapnil Jakhade #define SIERRA_CMN_PLLLC1_CLK0_PREG			0xCE
638a1b82d7SSwapnil Jakhade #define SIERRA_CMN_PLLLC1_BWCAL_MODE0_PREG		0xD0
648a1b82d7SSwapnil Jakhade #define SIERRA_CMN_PLLLC1_SS_TIME_STEPSIZE_MODE_PREG	0xE2
65380f5708SKishon Vijay Abraham I 
66380f5708SKishon Vijay Abraham I #define SIERRA_LANE_CDB_OFFSET(ln, block_offset, reg_offset)	\
67380f5708SKishon Vijay Abraham I 				((0x4000 << (block_offset)) + \
68380f5708SKishon Vijay Abraham I 				 (((ln) << 9) << (reg_offset)))
69aead5fd6SKishon Vijay Abraham I 
70aead5fd6SKishon Vijay Abraham I #define SIERRA_DET_STANDEC_A_PREG			0x000
71aead5fd6SKishon Vijay Abraham I #define SIERRA_DET_STANDEC_B_PREG			0x001
72aead5fd6SKishon Vijay Abraham I #define SIERRA_DET_STANDEC_C_PREG			0x002
73aead5fd6SKishon Vijay Abraham I #define SIERRA_DET_STANDEC_D_PREG			0x003
74aead5fd6SKishon Vijay Abraham I #define SIERRA_DET_STANDEC_E_PREG			0x004
75871002d7SAnil Varughese #define SIERRA_PSM_LANECAL_DLY_A1_RESETS_PREG		0x008
76871002d7SAnil Varughese #define SIERRA_PSM_A0IN_TMR_PREG			0x009
777a5ad9b4SSwapnil Jakhade #define SIERRA_PSM_A3IN_TMR_PREG			0x00C
78aead5fd6SKishon Vijay Abraham I #define SIERRA_PSM_DIAG_PREG				0x015
798a1b82d7SSwapnil Jakhade #define SIERRA_PSC_LN_A3_PREG				0x023
808a1b82d7SSwapnil Jakhade #define SIERRA_PSC_LN_A4_PREG				0x024
818a1b82d7SSwapnil Jakhade #define SIERRA_PSC_LN_IDLE_PREG				0x026
82aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_TX_A0_PREG				0x028
83aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_TX_A1_PREG				0x029
84aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_TX_A2_PREG				0x02A
85aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_TX_A3_PREG				0x02B
86aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_RX_A0_PREG				0x030
87aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_RX_A1_PREG				0x031
88aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_RX_A2_PREG				0x032
89aead5fd6SKishon Vijay Abraham I #define SIERRA_PSC_RX_A3_PREG				0x033
900cfa43abSSwapnil Jakhade #define SIERRA_PLLCTRL_FBDIV_MODE01_PREG		0x039
91aead5fd6SKishon Vijay Abraham I #define SIERRA_PLLCTRL_SUBRATE_PREG			0x03A
928a1b82d7SSwapnil Jakhade #define SIERRA_PLLCTRL_GEN_A_PREG			0x03B
93aead5fd6SKishon Vijay Abraham I #define SIERRA_PLLCTRL_GEN_D_PREG			0x03E
94871002d7SAnil Varughese #define SIERRA_PLLCTRL_CPGAIN_MODE_PREG			0x03F
95adc4bd6fSKishon Vijay Abraham I #define SIERRA_PLLCTRL_STATUS_PREG			0x044
96871002d7SAnil Varughese #define SIERRA_CLKPATH_BIASTRIM_PREG			0x04B
97871002d7SAnil Varughese #define SIERRA_DFE_BIASTRIM_PREG			0x04C
98aead5fd6SKishon Vijay Abraham I #define SIERRA_DRVCTRL_ATTEN_PREG			0x06A
997a5ad9b4SSwapnil Jakhade #define SIERRA_DRVCTRL_BOOST_PREG			0x06F
100*a1d12987SMarcin Wierzbicki #define SIERRA_LANE_TX_RECEIVER_DETECT_PREG		0x071
101e72659b6SSwapnil Jakhade #define SIERRA_TX_RCVDET_OVRD_PREG			0x072
102aead5fd6SKishon Vijay Abraham I #define SIERRA_CLKPATHCTRL_TMR_PREG			0x081
103871002d7SAnil Varughese #define SIERRA_RX_CREQ_FLTR_A_MODE3_PREG		0x085
104871002d7SAnil Varughese #define SIERRA_RX_CREQ_FLTR_A_MODE2_PREG		0x086
105aead5fd6SKishon Vijay Abraham I #define SIERRA_RX_CREQ_FLTR_A_MODE1_PREG		0x087
106aead5fd6SKishon Vijay Abraham I #define SIERRA_RX_CREQ_FLTR_A_MODE0_PREG		0x088
1077a5ad9b4SSwapnil Jakhade #define SIERRA_CREQ_DCBIASATTEN_OVR_PREG		0x08C
108aead5fd6SKishon Vijay Abraham I #define SIERRA_CREQ_CCLKDET_MODE01_PREG			0x08E
1097a5ad9b4SSwapnil Jakhade #define SIERRA_RX_CTLE_CAL_PREG				0x08F
110aead5fd6SKishon Vijay Abraham I #define SIERRA_RX_CTLE_MAINTENANCE_PREG			0x091
111aead5fd6SKishon Vijay Abraham I #define SIERRA_CREQ_FSMCLK_SEL_PREG			0x092
112871002d7SAnil Varughese #define SIERRA_CREQ_EQ_CTRL_PREG			0x093
113871002d7SAnil Varughese #define SIERRA_CREQ_SPARE_PREG				0x096
114871002d7SAnil Varughese #define SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG		0x097
115aead5fd6SKishon Vijay Abraham I #define SIERRA_CTLELUT_CTRL_PREG			0x098
116*a1d12987SMarcin Wierzbicki #define SIERRA_DEQ_BLK_TAU_CTRL1_PREG			0x0AC
117*a1d12987SMarcin Wierzbicki #define SIERRA_DEQ_BLK_TAU_CTRL4_PREG			0x0AF
118aead5fd6SKishon Vijay Abraham I #define SIERRA_DFE_ECMP_RATESEL_PREG			0x0C0
119aead5fd6SKishon Vijay Abraham I #define SIERRA_DFE_SMP_RATESEL_PREG			0x0C1
120871002d7SAnil Varughese #define SIERRA_DEQ_PHALIGN_CTRL				0x0C4
121871002d7SAnil Varughese #define SIERRA_DEQ_CONCUR_CTRL1_PREG			0x0C8
122871002d7SAnil Varughese #define SIERRA_DEQ_CONCUR_CTRL2_PREG			0x0C9
123871002d7SAnil Varughese #define SIERRA_DEQ_EPIPWR_CTRL2_PREG			0x0CD
124871002d7SAnil Varughese #define SIERRA_DEQ_FAST_MAINT_CYCLES_PREG		0x0CE
125871002d7SAnil Varughese #define SIERRA_DEQ_ERRCMP_CTRL_PREG			0x0D0
126871002d7SAnil Varughese #define SIERRA_DEQ_OFFSET_CTRL_PREG			0x0D8
127871002d7SAnil Varughese #define SIERRA_DEQ_GAIN_CTRL_PREG			0x0E0
128aead5fd6SKishon Vijay Abraham I #define SIERRA_DEQ_VGATUNE_CTRL_PREG			0x0E1
129871002d7SAnil Varughese #define SIERRA_DEQ_GLUT0				0x0E8
130871002d7SAnil Varughese #define SIERRA_DEQ_GLUT1				0x0E9
131871002d7SAnil Varughese #define SIERRA_DEQ_GLUT2				0x0EA
132871002d7SAnil Varughese #define SIERRA_DEQ_GLUT3				0x0EB
133871002d7SAnil Varughese #define SIERRA_DEQ_GLUT4				0x0EC
134871002d7SAnil Varughese #define SIERRA_DEQ_GLUT5				0x0ED
135871002d7SAnil Varughese #define SIERRA_DEQ_GLUT6				0x0EE
136871002d7SAnil Varughese #define SIERRA_DEQ_GLUT7				0x0EF
137871002d7SAnil Varughese #define SIERRA_DEQ_GLUT8				0x0F0
138871002d7SAnil Varughese #define SIERRA_DEQ_GLUT9				0x0F1
139871002d7SAnil Varughese #define SIERRA_DEQ_GLUT10				0x0F2
140871002d7SAnil Varughese #define SIERRA_DEQ_GLUT11				0x0F3
141871002d7SAnil Varughese #define SIERRA_DEQ_GLUT12				0x0F4
142871002d7SAnil Varughese #define SIERRA_DEQ_GLUT13				0x0F5
143871002d7SAnil Varughese #define SIERRA_DEQ_GLUT14				0x0F6
144871002d7SAnil Varughese #define SIERRA_DEQ_GLUT15				0x0F7
145871002d7SAnil Varughese #define SIERRA_DEQ_GLUT16				0x0F8
146*a1d12987SMarcin Wierzbicki #define SIERRA_POSTPRECUR_EN_CEPH_CTRL_PREG		0x0F9
147*a1d12987SMarcin Wierzbicki #define SIERRA_TAU_EN_CEPH2TO0_PREG			0x0FB
148*a1d12987SMarcin Wierzbicki #define SIERRA_TAU_EN_CEPH5TO3_PREG			0x0FC
149871002d7SAnil Varughese #define SIERRA_DEQ_ALUT0				0x108
150871002d7SAnil Varughese #define SIERRA_DEQ_ALUT1				0x109
151871002d7SAnil Varughese #define SIERRA_DEQ_ALUT2				0x10A
152871002d7SAnil Varughese #define SIERRA_DEQ_ALUT3				0x10B
153871002d7SAnil Varughese #define SIERRA_DEQ_ALUT4				0x10C
154871002d7SAnil Varughese #define SIERRA_DEQ_ALUT5				0x10D
155871002d7SAnil Varughese #define SIERRA_DEQ_ALUT6				0x10E
156871002d7SAnil Varughese #define SIERRA_DEQ_ALUT7				0x10F
157871002d7SAnil Varughese #define SIERRA_DEQ_ALUT8				0x110
158871002d7SAnil Varughese #define SIERRA_DEQ_ALUT9				0x111
159871002d7SAnil Varughese #define SIERRA_DEQ_ALUT10				0x112
160871002d7SAnil Varughese #define SIERRA_DEQ_ALUT11				0x113
161871002d7SAnil Varughese #define SIERRA_DEQ_ALUT12				0x114
162871002d7SAnil Varughese #define SIERRA_DEQ_ALUT13				0x115
163*a1d12987SMarcin Wierzbicki #define SIERRA_OEPH_EN_CTRL_PREG			0x124
164871002d7SAnil Varughese #define SIERRA_DEQ_DFETAP_CTRL_PREG			0x128
1657a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_DFETAP0				0x129
1667a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_DFETAP1				0x12B
1677a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_DFETAP2				0x12D
1687a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_DFETAP3				0x12F
1697a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_DFETAP4				0x131
170871002d7SAnil Varughese #define SIERRA_DFE_EN_1010_IGNORE_PREG			0x134
1717a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_PRECUR_PREG				0x138
1727a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_POSTCUR_PREG				0x140
1737a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_POSTCUR_DECR_PREG			0x142
174871002d7SAnil Varughese #define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG		0x150
175871002d7SAnil Varughese #define SIERRA_DEQ_TAU_CTRL2_PREG			0x151
1767a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_TAU_CTRL3_PREG			0x152
1777a5ad9b4SSwapnil Jakhade #define SIERRA_DEQ_OPENEYE_CTRL_PREG			0x158
178*a1d12987SMarcin Wierzbicki #define SIERRA_DEQ_CONCUR_EPIOFFSET_MODE_PREG		0x159
179871002d7SAnil Varughese #define SIERRA_DEQ_PICTRL_PREG				0x161
180871002d7SAnil Varughese #define SIERRA_CPICAL_TMRVAL_MODE1_PREG			0x170
181871002d7SAnil Varughese #define SIERRA_CPICAL_TMRVAL_MODE0_PREG			0x171
182871002d7SAnil Varughese #define SIERRA_CPICAL_PICNT_MODE1_PREG			0x174
183aead5fd6SKishon Vijay Abraham I #define SIERRA_CPI_OUTBUF_RATESEL_PREG			0x17C
1848a1b82d7SSwapnil Jakhade #define SIERRA_CPI_RESBIAS_BIN_PREG			0x17E
1857a5ad9b4SSwapnil Jakhade #define SIERRA_CPI_TRIM_PREG				0x17F
186871002d7SAnil Varughese #define SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG		0x183
187*a1d12987SMarcin Wierzbicki #define SIERRA_CPICAL_RES_STARTCODE_MODE01_PREG		0x184
1887a5ad9b4SSwapnil Jakhade #define SIERRA_EPI_CTRL_PREG				0x187
189871002d7SAnil Varughese #define SIERRA_LFPSDET_SUPPORT_PREG			0x188
190aead5fd6SKishon Vijay Abraham I #define SIERRA_LFPSFILT_NS_PREG				0x18A
191aead5fd6SKishon Vijay Abraham I #define SIERRA_LFPSFILT_RD_PREG				0x18B
192aead5fd6SKishon Vijay Abraham I #define SIERRA_LFPSFILT_MP_PREG				0x18C
193871002d7SAnil Varughese #define SIERRA_SIGDET_SUPPORT_PREG			0x190
194aead5fd6SKishon Vijay Abraham I #define SIERRA_SDFILT_H2L_A_PREG			0x191
195871002d7SAnil Varughese #define SIERRA_SDFILT_L2H_PREG				0x193
196871002d7SAnil Varughese #define SIERRA_RXBUFFER_CTLECTRL_PREG			0x19E
197871002d7SAnil Varughese #define SIERRA_RXBUFFER_RCDFECTRL_PREG			0x19F
198871002d7SAnil Varughese #define SIERRA_RXBUFFER_DFECTRL_PREG			0x1A0
199*a1d12987SMarcin Wierzbicki #define SIERRA_LN_SPARE_REG_PREG			0x1B0
200871002d7SAnil Varughese #define SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG		0x14F
201871002d7SAnil Varughese #define SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG		0x150
202380f5708SKishon Vijay Abraham I 
2038c95e172SSwapnil Jakhade /* PHY PCS common registers */
2048c95e172SSwapnil Jakhade #define SIERRA_PHY_PCS_COMMON_OFFSET(block_offset)	\
205380f5708SKishon Vijay Abraham I 				     (0xc000 << (block_offset))
206fa105172SSwapnil Jakhade #define SIERRA_PHY_PIPE_CMN_CTRL1			0x0
207380f5708SKishon Vijay Abraham I #define SIERRA_PHY_PLL_CFG				0xe
20844d30d62SAlan Douglas 
20936ce4163SSwapnil Jakhade /* PHY PCS lane registers */
21036ce4163SSwapnil Jakhade #define SIERRA_PHY_PCS_LANE_CDB_OFFSET(ln, block_offset, reg_offset)	\
21136ce4163SSwapnil Jakhade 				       ((0xD000 << (block_offset)) +	\
21236ce4163SSwapnil Jakhade 				       (((ln) << 8) << (reg_offset)))
21336ce4163SSwapnil Jakhade 
21436ce4163SSwapnil Jakhade #define SIERRA_PHY_ISO_LINK_CTRL			0xB
21536ce4163SSwapnil Jakhade 
216f1cc6c3fSSwapnil Jakhade /* PHY PMA common registers */
217f1cc6c3fSSwapnil Jakhade #define SIERRA_PHY_PMA_COMMON_OFFSET(block_offset)	\
218f1cc6c3fSSwapnil Jakhade 				     (0xE000 << (block_offset))
219f1cc6c3fSSwapnil Jakhade #define SIERRA_PHY_PMA_CMN_CTRL				0x000
220f1cc6c3fSSwapnil Jakhade 
2216b81f05aSSwapnil Jakhade /* PHY PMA lane registers */
2226b81f05aSSwapnil Jakhade #define SIERRA_PHY_PMA_LANE_CDB_OFFSET(ln, block_offset, reg_offset)	\
2236b81f05aSSwapnil Jakhade 				       ((0xF000 << (block_offset)) +	\
2246b81f05aSSwapnil Jakhade 				       (((ln) << 8) << (reg_offset)))
2256b81f05aSSwapnil Jakhade 
2266b81f05aSSwapnil Jakhade #define SIERRA_PHY_PMA_XCVR_CTRL			0x000
2276b81f05aSSwapnil Jakhade 
22844d30d62SAlan Douglas #define SIERRA_MACRO_ID					0x00007364
229a43f72aeSKishon Vijay Abraham I #define SIERRA_MAX_LANES				16
230adc4bd6fSKishon Vijay Abraham I #define PLL_LOCK_TIME					100000
23144d30d62SAlan Douglas 
23209d976b3SSwapnil Jakhade #define CDNS_SIERRA_OUTPUT_CLOCKS			3
233a59f6006SLars-Peter Clausen #define CDNS_SIERRA_INPUT_CLOCKS			3
234a0c30cd7SKishon Vijay Abraham I enum cdns_sierra_clock_input {
235a0c30cd7SKishon Vijay Abraham I 	PHY_CLK,
236a0c30cd7SKishon Vijay Abraham I 	CMN_REFCLK_DIG_DIV,
237a0c30cd7SKishon Vijay Abraham I 	CMN_REFCLK1_DIG_DIV,
238a0c30cd7SKishon Vijay Abraham I };
239a0c30cd7SKishon Vijay Abraham I 
24028081b72SKishon Vijay Abraham I #define SIERRA_NUM_CMN_PLLC				2
24128081b72SKishon Vijay Abraham I #define SIERRA_NUM_CMN_PLLC_PARENTS			2
24228081b72SKishon Vijay Abraham I 
243380f5708SKishon Vijay Abraham I static const struct reg_field macro_id_type =
244380f5708SKishon Vijay Abraham I 				REG_FIELD(SIERRA_MACRO_ID_REG, 0, 15);
245380f5708SKishon Vijay Abraham I static const struct reg_field phy_pll_cfg_1 =
246380f5708SKishon Vijay Abraham I 				REG_FIELD(SIERRA_PHY_PLL_CFG, 1, 1);
247f1cc6c3fSSwapnil Jakhade static const struct reg_field pma_cmn_ready =
248f1cc6c3fSSwapnil Jakhade 				REG_FIELD(SIERRA_PHY_PMA_CMN_CTRL, 0, 0);
249adc4bd6fSKishon Vijay Abraham I static const struct reg_field pllctrl_lock =
250adc4bd6fSKishon Vijay Abraham I 				REG_FIELD(SIERRA_PLLCTRL_STATUS_PREG, 0, 0);
25136ce4163SSwapnil Jakhade static const struct reg_field phy_iso_link_ctrl_1 =
25236ce4163SSwapnil Jakhade 				REG_FIELD(SIERRA_PHY_ISO_LINK_CTRL, 1, 1);
25309d976b3SSwapnil Jakhade static const struct reg_field cmn_plllc_clk1outdiv_preg =
25409d976b3SSwapnil Jakhade 				REG_FIELD(SIERRA_CMN_PLLLC_CLK1_PREG, 0, 6);
25509d976b3SSwapnil Jakhade static const struct reg_field cmn_plllc_clk1_en_preg =
25609d976b3SSwapnil Jakhade 				REG_FIELD(SIERRA_CMN_PLLLC_CLK1_PREG, 12, 12);
257380f5708SKishon Vijay Abraham I 
25828081b72SKishon Vijay Abraham I static const char * const clk_names[] = {
25928081b72SKishon Vijay Abraham I 	[CDNS_SIERRA_PLL_CMNLC] = "pll_cmnlc",
26028081b72SKishon Vijay Abraham I 	[CDNS_SIERRA_PLL_CMNLC1] = "pll_cmnlc1",
26109d976b3SSwapnil Jakhade 	[CDNS_SIERRA_DERIVED_REFCLK] = "refclk_der",
26228081b72SKishon Vijay Abraham I };
26328081b72SKishon Vijay Abraham I 
26428081b72SKishon Vijay Abraham I enum cdns_sierra_cmn_plllc {
26528081b72SKishon Vijay Abraham I 	CMN_PLLLC,
26628081b72SKishon Vijay Abraham I 	CMN_PLLLC1,
26728081b72SKishon Vijay Abraham I };
26828081b72SKishon Vijay Abraham I 
26928081b72SKishon Vijay Abraham I struct cdns_sierra_pll_mux_reg_fields {
27028081b72SKishon Vijay Abraham I 	struct reg_field	pfdclk_sel_preg;
27128081b72SKishon Vijay Abraham I 	struct reg_field	plllc1en_field;
27228081b72SKishon Vijay Abraham I 	struct reg_field	termen_field;
27328081b72SKishon Vijay Abraham I };
27428081b72SKishon Vijay Abraham I 
27528081b72SKishon Vijay Abraham I static const struct cdns_sierra_pll_mux_reg_fields cmn_plllc_pfdclk1_sel_preg[] = {
27628081b72SKishon Vijay Abraham I 	[CMN_PLLLC] = {
27728081b72SKishon Vijay Abraham I 		.pfdclk_sel_preg = REG_FIELD(SIERRA_CMN_PLLLC_GEN_PREG, 1, 1),
27828081b72SKishon Vijay Abraham I 		.plllc1en_field = REG_FIELD(SIERRA_CMN_REFRCV1_PREG, 8, 8),
27928081b72SKishon Vijay Abraham I 		.termen_field = REG_FIELD(SIERRA_CMN_REFRCV1_PREG, 0, 0),
28028081b72SKishon Vijay Abraham I 	},
28128081b72SKishon Vijay Abraham I 	[CMN_PLLLC1] = {
28228081b72SKishon Vijay Abraham I 		.pfdclk_sel_preg = REG_FIELD(SIERRA_CMN_PLLLC1_GEN_PREG, 1, 1),
28328081b72SKishon Vijay Abraham I 		.plllc1en_field = REG_FIELD(SIERRA_CMN_REFRCV_PREG, 8, 8),
28428081b72SKishon Vijay Abraham I 		.termen_field = REG_FIELD(SIERRA_CMN_REFRCV_PREG, 0, 0),
28528081b72SKishon Vijay Abraham I 	},
28628081b72SKishon Vijay Abraham I };
28728081b72SKishon Vijay Abraham I 
28828081b72SKishon Vijay Abraham I struct cdns_sierra_pll_mux {
28928081b72SKishon Vijay Abraham I 	struct clk_hw		hw;
29028081b72SKishon Vijay Abraham I 	struct regmap_field	*pfdclk_sel_preg;
29128081b72SKishon Vijay Abraham I 	struct regmap_field	*plllc1en_field;
29228081b72SKishon Vijay Abraham I 	struct regmap_field	*termen_field;
29328081b72SKishon Vijay Abraham I 	struct clk_init_data	clk_data;
29428081b72SKishon Vijay Abraham I };
29528081b72SKishon Vijay Abraham I 
29628081b72SKishon Vijay Abraham I #define to_cdns_sierra_pll_mux(_hw)	\
29728081b72SKishon Vijay Abraham I 			container_of(_hw, struct cdns_sierra_pll_mux, hw)
29828081b72SKishon Vijay Abraham I 
299a59f6006SLars-Peter Clausen #define PLL0_REFCLK_NAME "pll0_refclk"
300a59f6006SLars-Peter Clausen #define PLL1_REFCLK_NAME "pll1_refclk"
301a59f6006SLars-Peter Clausen 
302a59f6006SLars-Peter Clausen static const struct clk_parent_data pll_mux_parent_data[][SIERRA_NUM_CMN_PLLC_PARENTS] = {
303a59f6006SLars-Peter Clausen 	[CMN_PLLLC] = {
304a59f6006SLars-Peter Clausen 		{ .fw_name = PLL0_REFCLK_NAME },
305a59f6006SLars-Peter Clausen 		{ .fw_name = PLL1_REFCLK_NAME }
306a59f6006SLars-Peter Clausen 	},
307a59f6006SLars-Peter Clausen 	[CMN_PLLLC1] = {
308a59f6006SLars-Peter Clausen 		{ .fw_name = PLL1_REFCLK_NAME },
309a59f6006SLars-Peter Clausen 		{ .fw_name = PLL0_REFCLK_NAME }
310a59f6006SLars-Peter Clausen 	},
31128081b72SKishon Vijay Abraham I };
31228081b72SKishon Vijay Abraham I 
313da08aab9SSwapnil Jakhade static u32 cdns_sierra_pll_mux_table[][SIERRA_NUM_CMN_PLLC_PARENTS] = {
314da08aab9SSwapnil Jakhade 	[CMN_PLLLC] = { 0, 1 },
315da08aab9SSwapnil Jakhade 	[CMN_PLLLC1] = { 1, 0 },
316da08aab9SSwapnil Jakhade };
31728081b72SKishon Vijay Abraham I 
31809d976b3SSwapnil Jakhade struct cdns_sierra_derived_refclk {
31909d976b3SSwapnil Jakhade 	struct clk_hw           hw;
32009d976b3SSwapnil Jakhade 	struct regmap_field     *cmn_plllc_clk1outdiv_preg;
32109d976b3SSwapnil Jakhade 	struct regmap_field     *cmn_plllc_clk1_en_preg;
32209d976b3SSwapnil Jakhade 	struct clk_init_data	clk_data;
32309d976b3SSwapnil Jakhade };
32409d976b3SSwapnil Jakhade 
32509d976b3SSwapnil Jakhade #define to_cdns_sierra_derived_refclk(_hw)	\
32609d976b3SSwapnil Jakhade 			container_of(_hw, struct cdns_sierra_derived_refclk, hw)
32709d976b3SSwapnil Jakhade 
328078e9e92SSwapnil Jakhade enum cdns_sierra_phy_type {
329078e9e92SSwapnil Jakhade 	TYPE_NONE,
330078e9e92SSwapnil Jakhade 	TYPE_PCIE,
3318a1b82d7SSwapnil Jakhade 	TYPE_USB,
3320cfa43abSSwapnil Jakhade 	TYPE_SGMII,
3338a1b82d7SSwapnil Jakhade 	TYPE_QSGMII
334078e9e92SSwapnil Jakhade };
335078e9e92SSwapnil Jakhade 
336078e9e92SSwapnil Jakhade enum cdns_sierra_ssc_mode {
337078e9e92SSwapnil Jakhade 	NO_SSC,
338078e9e92SSwapnil Jakhade 	EXTERNAL_SSC,
339078e9e92SSwapnil Jakhade 	INTERNAL_SSC
340078e9e92SSwapnil Jakhade };
341078e9e92SSwapnil Jakhade 
34244d30d62SAlan Douglas struct cdns_sierra_inst {
34344d30d62SAlan Douglas 	struct phy *phy;
344078e9e92SSwapnil Jakhade 	enum cdns_sierra_phy_type phy_type;
34544d30d62SAlan Douglas 	u32 num_lanes;
34644d30d62SAlan Douglas 	u32 mlane;
34744d30d62SAlan Douglas 	struct reset_control *lnk_rst;
3481e902b2aSSwapnil Jakhade 	enum cdns_sierra_ssc_mode ssc_mode;
34944d30d62SAlan Douglas };
35044d30d62SAlan Douglas 
35144d30d62SAlan Douglas struct cdns_reg_pairs {
35244d30d62SAlan Douglas 	u16 val;
35344d30d62SAlan Douglas 	u32 off;
35444d30d62SAlan Douglas };
35544d30d62SAlan Douglas 
356078e9e92SSwapnil Jakhade struct cdns_sierra_vals {
357078e9e92SSwapnil Jakhade 	const struct cdns_reg_pairs *reg_pairs;
358078e9e92SSwapnil Jakhade 	u32 num_regs;
359078e9e92SSwapnil Jakhade };
360078e9e92SSwapnil Jakhade 
36144d30d62SAlan Douglas struct cdns_sierra_data {
36244d30d62SAlan Douglas 	u32 id_value;
363380f5708SKishon Vijay Abraham I 	u8 block_offset_shift;
364380f5708SKishon Vijay Abraham I 	u8 reg_offset_shift;
365fa105172SSwapnil Jakhade 	struct cdns_sierra_vals *pcs_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
366fa105172SSwapnil Jakhade 					     [NUM_SSC_MODE];
3676b81f05aSSwapnil Jakhade 	struct cdns_sierra_vals *phy_pma_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
3686b81f05aSSwapnil Jakhade 						[NUM_SSC_MODE];
369078e9e92SSwapnil Jakhade 	struct cdns_sierra_vals *pma_cmn_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
370078e9e92SSwapnil Jakhade 					     [NUM_SSC_MODE];
371078e9e92SSwapnil Jakhade 	struct cdns_sierra_vals *pma_ln_vals[NUM_PHY_TYPE][NUM_PHY_TYPE]
372078e9e92SSwapnil Jakhade 					    [NUM_SSC_MODE];
37344d30d62SAlan Douglas };
37444d30d62SAlan Douglas 
375380f5708SKishon Vijay Abraham I struct cdns_regmap_cdb_context {
37644d30d62SAlan Douglas 	struct device *dev;
37744d30d62SAlan Douglas 	void __iomem *base;
378380f5708SKishon Vijay Abraham I 	u8 reg_offset_shift;
379380f5708SKishon Vijay Abraham I };
380380f5708SKishon Vijay Abraham I 
381380f5708SKishon Vijay Abraham I struct cdns_sierra_phy {
382380f5708SKishon Vijay Abraham I 	struct device *dev;
383c3c11d55SSwapnil Jakhade 	const struct cdns_sierra_data *init_data;
38444d30d62SAlan Douglas 	struct cdns_sierra_inst phys[SIERRA_MAX_LANES];
38544d30d62SAlan Douglas 	struct reset_control *phy_rst;
38644d30d62SAlan Douglas 	struct reset_control *apb_rst;
387380f5708SKishon Vijay Abraham I 	struct regmap *regmap_lane_cdb[SIERRA_MAX_LANES];
3888c95e172SSwapnil Jakhade 	struct regmap *regmap_phy_pcs_common_cdb;
38936ce4163SSwapnil Jakhade 	struct regmap *regmap_phy_pcs_lane_cdb[SIERRA_MAX_LANES];
390f1cc6c3fSSwapnil Jakhade 	struct regmap *regmap_phy_pma_common_cdb;
3916b81f05aSSwapnil Jakhade 	struct regmap *regmap_phy_pma_lane_cdb[SIERRA_MAX_LANES];
392380f5708SKishon Vijay Abraham I 	struct regmap *regmap_common_cdb;
393380f5708SKishon Vijay Abraham I 	struct regmap_field *macro_id_type;
394380f5708SKishon Vijay Abraham I 	struct regmap_field *phy_pll_cfg_1;
395f1cc6c3fSSwapnil Jakhade 	struct regmap_field *pma_cmn_ready;
396adc4bd6fSKishon Vijay Abraham I 	struct regmap_field *pllctrl_lock[SIERRA_MAX_LANES];
39736ce4163SSwapnil Jakhade 	struct regmap_field *phy_iso_link_ctrl_1[SIERRA_MAX_LANES];
39828081b72SKishon Vijay Abraham I 	struct regmap_field *cmn_refrcv_refclk_plllc1en_preg[SIERRA_NUM_CMN_PLLC];
39928081b72SKishon Vijay Abraham I 	struct regmap_field *cmn_refrcv_refclk_termen_preg[SIERRA_NUM_CMN_PLLC];
40028081b72SKishon Vijay Abraham I 	struct regmap_field *cmn_plllc_pfdclk1_sel_preg[SIERRA_NUM_CMN_PLLC];
401a0c30cd7SKishon Vijay Abraham I 	struct clk *input_clks[CDNS_SIERRA_INPUT_CLOCKS];
40244d30d62SAlan Douglas 	int nsubnodes;
403a43f72aeSKishon Vijay Abraham I 	u32 num_lanes;
40444d30d62SAlan Douglas 	bool autoconf;
405d88ca22dSAswath Govindraju 	int already_configured;
4066ef7aa32SLars-Peter Clausen 	struct clk *pll_clks[SIERRA_NUM_CMN_PLLC];
4076ef7aa32SLars-Peter Clausen 	struct clk_hw_onecell_data clk_data;
40844d30d62SAlan Douglas };
40944d30d62SAlan Douglas 
410380f5708SKishon Vijay Abraham I static int cdns_regmap_write(void *context, unsigned int reg, unsigned int val)
411380f5708SKishon Vijay Abraham I {
412380f5708SKishon Vijay Abraham I 	struct cdns_regmap_cdb_context *ctx = context;
413380f5708SKishon Vijay Abraham I 	u32 offset = reg << ctx->reg_offset_shift;
414380f5708SKishon Vijay Abraham I 
415380f5708SKishon Vijay Abraham I 	writew(val, ctx->base + offset);
416380f5708SKishon Vijay Abraham I 
417380f5708SKishon Vijay Abraham I 	return 0;
418380f5708SKishon Vijay Abraham I }
419380f5708SKishon Vijay Abraham I 
420380f5708SKishon Vijay Abraham I static int cdns_regmap_read(void *context, unsigned int reg, unsigned int *val)
421380f5708SKishon Vijay Abraham I {
422380f5708SKishon Vijay Abraham I 	struct cdns_regmap_cdb_context *ctx = context;
423380f5708SKishon Vijay Abraham I 	u32 offset = reg << ctx->reg_offset_shift;
424380f5708SKishon Vijay Abraham I 
425380f5708SKishon Vijay Abraham I 	*val = readw(ctx->base + offset);
426380f5708SKishon Vijay Abraham I 	return 0;
427380f5708SKishon Vijay Abraham I }
428380f5708SKishon Vijay Abraham I 
429380f5708SKishon Vijay Abraham I #define SIERRA_LANE_CDB_REGMAP_CONF(n) \
430380f5708SKishon Vijay Abraham I { \
431380f5708SKishon Vijay Abraham I 	.name = "sierra_lane" n "_cdb", \
432380f5708SKishon Vijay Abraham I 	.reg_stride = 1, \
433380f5708SKishon Vijay Abraham I 	.fast_io = true, \
434380f5708SKishon Vijay Abraham I 	.reg_write = cdns_regmap_write, \
435380f5708SKishon Vijay Abraham I 	.reg_read = cdns_regmap_read, \
436380f5708SKishon Vijay Abraham I }
437380f5708SKishon Vijay Abraham I 
4383cfb0e8eSRikard Falkeborn static const struct regmap_config cdns_sierra_lane_cdb_config[] = {
439380f5708SKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("0"),
440380f5708SKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("1"),
441380f5708SKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("2"),
442380f5708SKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("3"),
443a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("4"),
444a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("5"),
445a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("6"),
446a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("7"),
447a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("8"),
448a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("9"),
449a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("10"),
450a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("11"),
451a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("12"),
452a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("13"),
453a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("14"),
454a43f72aeSKishon Vijay Abraham I 	SIERRA_LANE_CDB_REGMAP_CONF("15"),
455380f5708SKishon Vijay Abraham I };
456380f5708SKishon Vijay Abraham I 
4573cfb0e8eSRikard Falkeborn static const struct regmap_config cdns_sierra_common_cdb_config = {
458380f5708SKishon Vijay Abraham I 	.name = "sierra_common_cdb",
459380f5708SKishon Vijay Abraham I 	.reg_stride = 1,
460380f5708SKishon Vijay Abraham I 	.fast_io = true,
461380f5708SKishon Vijay Abraham I 	.reg_write = cdns_regmap_write,
462380f5708SKishon Vijay Abraham I 	.reg_read = cdns_regmap_read,
463380f5708SKishon Vijay Abraham I };
464380f5708SKishon Vijay Abraham I 
4658c95e172SSwapnil Jakhade static const struct regmap_config cdns_sierra_phy_pcs_cmn_cdb_config = {
4668c95e172SSwapnil Jakhade 	.name = "sierra_phy_pcs_cmn_cdb",
467380f5708SKishon Vijay Abraham I 	.reg_stride = 1,
468380f5708SKishon Vijay Abraham I 	.fast_io = true,
469380f5708SKishon Vijay Abraham I 	.reg_write = cdns_regmap_write,
470380f5708SKishon Vijay Abraham I 	.reg_read = cdns_regmap_read,
471380f5708SKishon Vijay Abraham I };
472380f5708SKishon Vijay Abraham I 
47336ce4163SSwapnil Jakhade #define SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF(n) \
47436ce4163SSwapnil Jakhade { \
47536ce4163SSwapnil Jakhade 	.name = "sierra_phy_pcs_lane" n "_cdb", \
47636ce4163SSwapnil Jakhade 	.reg_stride = 1, \
47736ce4163SSwapnil Jakhade 	.fast_io = true, \
47836ce4163SSwapnil Jakhade 	.reg_write = cdns_regmap_write, \
47936ce4163SSwapnil Jakhade 	.reg_read = cdns_regmap_read, \
48036ce4163SSwapnil Jakhade }
48136ce4163SSwapnil Jakhade 
48236ce4163SSwapnil Jakhade static const struct regmap_config cdns_sierra_phy_pcs_lane_cdb_config[] = {
48336ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("0"),
48436ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("1"),
48536ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("2"),
48636ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("3"),
48736ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("4"),
48836ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("5"),
48936ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("6"),
49036ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("7"),
49136ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("8"),
49236ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("9"),
49336ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("10"),
49436ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("11"),
49536ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("12"),
49636ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("13"),
49736ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("14"),
49836ce4163SSwapnil Jakhade 	SIERRA_PHY_PCS_LANE_CDB_REGMAP_CONF("15"),
49936ce4163SSwapnil Jakhade };
50036ce4163SSwapnil Jakhade 
501f1cc6c3fSSwapnil Jakhade static const struct regmap_config cdns_sierra_phy_pma_cmn_cdb_config = {
502f1cc6c3fSSwapnil Jakhade 	.name = "sierra_phy_pma_cmn_cdb",
503f1cc6c3fSSwapnil Jakhade 	.reg_stride = 1,
504f1cc6c3fSSwapnil Jakhade 	.fast_io = true,
505f1cc6c3fSSwapnil Jakhade 	.reg_write = cdns_regmap_write,
506f1cc6c3fSSwapnil Jakhade 	.reg_read = cdns_regmap_read,
507f1cc6c3fSSwapnil Jakhade };
508f1cc6c3fSSwapnil Jakhade 
5096b81f05aSSwapnil Jakhade #define SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF(n) \
5106b81f05aSSwapnil Jakhade { \
5116b81f05aSSwapnil Jakhade 	.name = "sierra_phy_pma_lane" n "_cdb", \
5126b81f05aSSwapnil Jakhade 	.reg_stride = 1, \
5136b81f05aSSwapnil Jakhade 	.fast_io = true, \
5146b81f05aSSwapnil Jakhade 	.reg_write = cdns_regmap_write, \
5156b81f05aSSwapnil Jakhade 	.reg_read = cdns_regmap_read, \
5166b81f05aSSwapnil Jakhade }
5176b81f05aSSwapnil Jakhade 
5186b81f05aSSwapnil Jakhade static const struct regmap_config cdns_sierra_phy_pma_lane_cdb_config[] = {
5196b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("0"),
5206b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("1"),
5216b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("2"),
5226b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("3"),
5236b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("4"),
5246b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("5"),
5256b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("6"),
5266b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("7"),
5276b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("8"),
5286b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("9"),
5296b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("10"),
5306b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("11"),
5316b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("12"),
5326b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("13"),
5336b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("14"),
5346b81f05aSSwapnil Jakhade 	SIERRA_PHY_PMA_LANE_CDB_REGMAP_CONF("15"),
5356b81f05aSSwapnil Jakhade };
5366b81f05aSSwapnil Jakhade 
537cedcc2e2SKishon Vijay Abraham I static int cdns_sierra_phy_init(struct phy *gphy)
53844d30d62SAlan Douglas {
53944d30d62SAlan Douglas 	struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
54044d30d62SAlan Douglas 	struct cdns_sierra_phy *phy = dev_get_drvdata(gphy->dev.parent);
541078e9e92SSwapnil Jakhade 	const struct cdns_sierra_data *init_data = phy->init_data;
542078e9e92SSwapnil Jakhade 	struct cdns_sierra_vals *pma_cmn_vals, *pma_ln_vals;
543078e9e92SSwapnil Jakhade 	enum cdns_sierra_phy_type phy_type = ins->phy_type;
5441e902b2aSSwapnil Jakhade 	enum cdns_sierra_ssc_mode ssc = ins->ssc_mode;
5456b81f05aSSwapnil Jakhade 	struct cdns_sierra_vals *phy_pma_ln_vals;
546078e9e92SSwapnil Jakhade 	const struct cdns_reg_pairs *reg_pairs;
547fa105172SSwapnil Jakhade 	struct cdns_sierra_vals *pcs_cmn_vals;
54880f96fb1SColin Ian King 	struct regmap *regmap;
549078e9e92SSwapnil Jakhade 	u32 num_regs;
55044d30d62SAlan Douglas 	int i, j;
55144d30d62SAlan Douglas 
552cedcc2e2SKishon Vijay Abraham I 	/* Initialise the PHY registers, unless auto configured */
553d88ca22dSAswath Govindraju 	if (phy->autoconf || phy->already_configured || phy->nsubnodes > 1)
554cedcc2e2SKishon Vijay Abraham I 		return 0;
555cedcc2e2SKishon Vijay Abraham I 
556a0c30cd7SKishon Vijay Abraham I 	clk_set_rate(phy->input_clks[CMN_REFCLK_DIG_DIV], 25000000);
557a0c30cd7SKishon Vijay Abraham I 	clk_set_rate(phy->input_clks[CMN_REFCLK1_DIG_DIV], 25000000);
558078e9e92SSwapnil Jakhade 
559fa105172SSwapnil Jakhade 	/* PHY PCS common registers configurations */
560fa105172SSwapnil Jakhade 	pcs_cmn_vals = init_data->pcs_cmn_vals[phy_type][TYPE_NONE][ssc];
561fa105172SSwapnil Jakhade 	if (pcs_cmn_vals) {
562fa105172SSwapnil Jakhade 		reg_pairs = pcs_cmn_vals->reg_pairs;
563fa105172SSwapnil Jakhade 		num_regs = pcs_cmn_vals->num_regs;
564fa105172SSwapnil Jakhade 		regmap = phy->regmap_phy_pcs_common_cdb;
565fa105172SSwapnil Jakhade 		for (i = 0; i < num_regs; i++)
566fa105172SSwapnil Jakhade 			regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
567fa105172SSwapnil Jakhade 	}
568fa105172SSwapnil Jakhade 
5696b81f05aSSwapnil Jakhade 	/* PHY PMA lane registers configurations */
5706b81f05aSSwapnil Jakhade 	phy_pma_ln_vals = init_data->phy_pma_ln_vals[phy_type][TYPE_NONE][ssc];
5716b81f05aSSwapnil Jakhade 	if (phy_pma_ln_vals) {
5726b81f05aSSwapnil Jakhade 		reg_pairs = phy_pma_ln_vals->reg_pairs;
5736b81f05aSSwapnil Jakhade 		num_regs = phy_pma_ln_vals->num_regs;
5746b81f05aSSwapnil Jakhade 		for (i = 0; i < ins->num_lanes; i++) {
5756b81f05aSSwapnil Jakhade 			regmap = phy->regmap_phy_pma_lane_cdb[i + ins->mlane];
5766b81f05aSSwapnil Jakhade 			for (j = 0; j < num_regs; j++)
5776b81f05aSSwapnil Jakhade 				regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
5786b81f05aSSwapnil Jakhade 		}
5796b81f05aSSwapnil Jakhade 	}
5806b81f05aSSwapnil Jakhade 
581078e9e92SSwapnil Jakhade 	/* PMA common registers configurations */
582078e9e92SSwapnil Jakhade 	pma_cmn_vals = init_data->pma_cmn_vals[phy_type][TYPE_NONE][ssc];
583078e9e92SSwapnil Jakhade 	if (pma_cmn_vals) {
584078e9e92SSwapnil Jakhade 		reg_pairs = pma_cmn_vals->reg_pairs;
585078e9e92SSwapnil Jakhade 		num_regs = pma_cmn_vals->num_regs;
586078e9e92SSwapnil Jakhade 		regmap = phy->regmap_common_cdb;
587078e9e92SSwapnil Jakhade 		for (i = 0; i < num_regs; i++)
588078e9e92SSwapnil Jakhade 			regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
58944d30d62SAlan Douglas 	}
590871002d7SAnil Varughese 
591078e9e92SSwapnil Jakhade 	/* PMA lane registers configurations */
592078e9e92SSwapnil Jakhade 	pma_ln_vals = init_data->pma_ln_vals[phy_type][TYPE_NONE][ssc];
593078e9e92SSwapnil Jakhade 	if (pma_ln_vals) {
594078e9e92SSwapnil Jakhade 		reg_pairs = pma_ln_vals->reg_pairs;
595078e9e92SSwapnil Jakhade 		num_regs = pma_ln_vals->num_regs;
596380f5708SKishon Vijay Abraham I 		for (i = 0; i < ins->num_lanes; i++) {
597380f5708SKishon Vijay Abraham I 			regmap = phy->regmap_lane_cdb[i + ins->mlane];
598078e9e92SSwapnil Jakhade 			for (j = 0; j < num_regs; j++)
599078e9e92SSwapnil Jakhade 				regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
600380f5708SKishon Vijay Abraham I 		}
601380f5708SKishon Vijay Abraham I 	}
602cedcc2e2SKishon Vijay Abraham I 
603cedcc2e2SKishon Vijay Abraham I 	return 0;
60444d30d62SAlan Douglas }
60544d30d62SAlan Douglas 
60644d30d62SAlan Douglas static int cdns_sierra_phy_on(struct phy *gphy)
60744d30d62SAlan Douglas {
608adc4bd6fSKishon Vijay Abraham I 	struct cdns_sierra_phy *sp = dev_get_drvdata(gphy->dev.parent);
60944d30d62SAlan Douglas 	struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
610adc4bd6fSKishon Vijay Abraham I 	struct device *dev = sp->dev;
611adc4bd6fSKishon Vijay Abraham I 	u32 val;
612adc4bd6fSKishon Vijay Abraham I 	int ret;
61344d30d62SAlan Douglas 
6146b81f05aSSwapnil Jakhade 	if (sp->nsubnodes == 1) {
6156b81f05aSSwapnil Jakhade 		/* Take the PHY out of reset */
6165b4f5757SKishon Vijay Abraham I 		ret = reset_control_deassert(sp->phy_rst);
6175b4f5757SKishon Vijay Abraham I 		if (ret) {
6185b4f5757SKishon Vijay Abraham I 			dev_err(dev, "Failed to take the PHY out of reset\n");
6195b4f5757SKishon Vijay Abraham I 			return ret;
6205b4f5757SKishon Vijay Abraham I 		}
6216b81f05aSSwapnil Jakhade 	}
6225b4f5757SKishon Vijay Abraham I 
62344d30d62SAlan Douglas 	/* Take the PHY lane group out of reset */
624adc4bd6fSKishon Vijay Abraham I 	ret = reset_control_deassert(ins->lnk_rst);
625adc4bd6fSKishon Vijay Abraham I 	if (ret) {
626adc4bd6fSKishon Vijay Abraham I 		dev_err(dev, "Failed to take the PHY lane out of reset\n");
627adc4bd6fSKishon Vijay Abraham I 		return ret;
628adc4bd6fSKishon Vijay Abraham I 	}
629adc4bd6fSKishon Vijay Abraham I 
63036ce4163SSwapnil Jakhade 	if (ins->phy_type == TYPE_PCIE || ins->phy_type == TYPE_USB) {
63136ce4163SSwapnil Jakhade 		ret = regmap_field_read_poll_timeout(sp->phy_iso_link_ctrl_1[ins->mlane],
63236ce4163SSwapnil Jakhade 						     val, !val, 1000, PLL_LOCK_TIME);
63336ce4163SSwapnil Jakhade 		if (ret) {
63436ce4163SSwapnil Jakhade 			dev_err(dev, "Timeout waiting for PHY status ready\n");
63536ce4163SSwapnil Jakhade 			return ret;
63636ce4163SSwapnil Jakhade 		}
63736ce4163SSwapnil Jakhade 	}
63836ce4163SSwapnil Jakhade 
639f1cc6c3fSSwapnil Jakhade 	/*
640f1cc6c3fSSwapnil Jakhade 	 * Wait for cmn_ready assertion
641f1cc6c3fSSwapnil Jakhade 	 * PHY_PMA_CMN_CTRL[0] == 1
642f1cc6c3fSSwapnil Jakhade 	 */
643f1cc6c3fSSwapnil Jakhade 	ret = regmap_field_read_poll_timeout(sp->pma_cmn_ready, val, val,
644f1cc6c3fSSwapnil Jakhade 					     1000, PLL_LOCK_TIME);
645f1cc6c3fSSwapnil Jakhade 	if (ret) {
646f1cc6c3fSSwapnil Jakhade 		dev_err(dev, "Timeout waiting for CMN ready\n");
647f1cc6c3fSSwapnil Jakhade 		return ret;
648f1cc6c3fSSwapnil Jakhade 	}
649f1cc6c3fSSwapnil Jakhade 
650adc4bd6fSKishon Vijay Abraham I 	ret = regmap_field_read_poll_timeout(sp->pllctrl_lock[ins->mlane],
651adc4bd6fSKishon Vijay Abraham I 					     val, val, 1000, PLL_LOCK_TIME);
652adc4bd6fSKishon Vijay Abraham I 	if (ret < 0)
653adc4bd6fSKishon Vijay Abraham I 		dev_err(dev, "PLL lock of lane failed\n");
654adc4bd6fSKishon Vijay Abraham I 
655adc4bd6fSKishon Vijay Abraham I 	return ret;
65644d30d62SAlan Douglas }
65744d30d62SAlan Douglas 
65844d30d62SAlan Douglas static int cdns_sierra_phy_off(struct phy *gphy)
65944d30d62SAlan Douglas {
66044d30d62SAlan Douglas 	struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
66144d30d62SAlan Douglas 
66244d30d62SAlan Douglas 	return reset_control_assert(ins->lnk_rst);
66344d30d62SAlan Douglas }
66444d30d62SAlan Douglas 
6657904e15bSRoger Quadros static int cdns_sierra_phy_reset(struct phy *gphy)
6667904e15bSRoger Quadros {
6677904e15bSRoger Quadros 	struct cdns_sierra_phy *sp = dev_get_drvdata(gphy->dev.parent);
6687904e15bSRoger Quadros 
6697904e15bSRoger Quadros 	reset_control_assert(sp->phy_rst);
6707904e15bSRoger Quadros 	reset_control_deassert(sp->phy_rst);
6717904e15bSRoger Quadros 	return 0;
6727904e15bSRoger Quadros };
6737904e15bSRoger Quadros 
67444d30d62SAlan Douglas static const struct phy_ops ops = {
675cedcc2e2SKishon Vijay Abraham I 	.init		= cdns_sierra_phy_init,
67644d30d62SAlan Douglas 	.power_on	= cdns_sierra_phy_on,
67744d30d62SAlan Douglas 	.power_off	= cdns_sierra_phy_off,
6787904e15bSRoger Quadros 	.reset		= cdns_sierra_phy_reset,
67944d30d62SAlan Douglas 	.owner		= THIS_MODULE,
68044d30d62SAlan Douglas };
68144d30d62SAlan Douglas 
682d88ca22dSAswath Govindraju static int cdns_sierra_noop_phy_on(struct phy *gphy)
683d88ca22dSAswath Govindraju {
684d88ca22dSAswath Govindraju 	usleep_range(5000, 10000);
685d88ca22dSAswath Govindraju 
686d88ca22dSAswath Govindraju 	return 0;
687d88ca22dSAswath Govindraju }
688d88ca22dSAswath Govindraju 
689d88ca22dSAswath Govindraju static const struct phy_ops noop_ops = {
690d88ca22dSAswath Govindraju 	.power_on	= cdns_sierra_noop_phy_on,
691d88ca22dSAswath Govindraju 	.owner		= THIS_MODULE,
692d88ca22dSAswath Govindraju };
693d88ca22dSAswath Govindraju 
69428081b72SKishon Vijay Abraham I static u8 cdns_sierra_pll_mux_get_parent(struct clk_hw *hw)
69528081b72SKishon Vijay Abraham I {
69628081b72SKishon Vijay Abraham I 	struct cdns_sierra_pll_mux *mux = to_cdns_sierra_pll_mux(hw);
697da08aab9SSwapnil Jakhade 	struct regmap_field *plllc1en_field = mux->plllc1en_field;
698da08aab9SSwapnil Jakhade 	struct regmap_field *termen_field = mux->termen_field;
69928081b72SKishon Vijay Abraham I 	struct regmap_field *field = mux->pfdclk_sel_preg;
70028081b72SKishon Vijay Abraham I 	unsigned int val;
701da08aab9SSwapnil Jakhade 	int index;
70228081b72SKishon Vijay Abraham I 
70328081b72SKishon Vijay Abraham I 	regmap_field_read(field, &val);
704da08aab9SSwapnil Jakhade 
705da08aab9SSwapnil Jakhade 	if (strstr(clk_hw_get_name(hw), clk_names[CDNS_SIERRA_PLL_CMNLC1])) {
706da08aab9SSwapnil Jakhade 		index = clk_mux_val_to_index(hw, cdns_sierra_pll_mux_table[CMN_PLLLC1], 0, val);
707da08aab9SSwapnil Jakhade 		if (index == 1) {
708da08aab9SSwapnil Jakhade 			regmap_field_write(plllc1en_field, 1);
709da08aab9SSwapnil Jakhade 			regmap_field_write(termen_field, 1);
710da08aab9SSwapnil Jakhade 		}
711da08aab9SSwapnil Jakhade 	} else {
712da08aab9SSwapnil Jakhade 		index = clk_mux_val_to_index(hw, cdns_sierra_pll_mux_table[CMN_PLLLC], 0, val);
713da08aab9SSwapnil Jakhade 	}
714da08aab9SSwapnil Jakhade 
715da08aab9SSwapnil Jakhade 	return index;
71628081b72SKishon Vijay Abraham I }
71728081b72SKishon Vijay Abraham I 
71828081b72SKishon Vijay Abraham I static int cdns_sierra_pll_mux_set_parent(struct clk_hw *hw, u8 index)
71928081b72SKishon Vijay Abraham I {
72028081b72SKishon Vijay Abraham I 	struct cdns_sierra_pll_mux *mux = to_cdns_sierra_pll_mux(hw);
72128081b72SKishon Vijay Abraham I 	struct regmap_field *plllc1en_field = mux->plllc1en_field;
72228081b72SKishon Vijay Abraham I 	struct regmap_field *termen_field = mux->termen_field;
72328081b72SKishon Vijay Abraham I 	struct regmap_field *field = mux->pfdclk_sel_preg;
72428081b72SKishon Vijay Abraham I 	int val, ret;
72528081b72SKishon Vijay Abraham I 
72628081b72SKishon Vijay Abraham I 	ret = regmap_field_write(plllc1en_field, 0);
72728081b72SKishon Vijay Abraham I 	ret |= regmap_field_write(termen_field, 0);
72828081b72SKishon Vijay Abraham I 	if (index == 1) {
72928081b72SKishon Vijay Abraham I 		ret |= regmap_field_write(plllc1en_field, 1);
73028081b72SKishon Vijay Abraham I 		ret |= regmap_field_write(termen_field, 1);
73128081b72SKishon Vijay Abraham I 	}
73228081b72SKishon Vijay Abraham I 
733da08aab9SSwapnil Jakhade 	if (strstr(clk_hw_get_name(hw), clk_names[CDNS_SIERRA_PLL_CMNLC1]))
734da08aab9SSwapnil Jakhade 		val = cdns_sierra_pll_mux_table[CMN_PLLLC1][index];
735da08aab9SSwapnil Jakhade 	else
736da08aab9SSwapnil Jakhade 		val = cdns_sierra_pll_mux_table[CMN_PLLLC][index];
737da08aab9SSwapnil Jakhade 
73828081b72SKishon Vijay Abraham I 	ret |= regmap_field_write(field, val);
73928081b72SKishon Vijay Abraham I 
74028081b72SKishon Vijay Abraham I 	return ret;
74128081b72SKishon Vijay Abraham I }
74228081b72SKishon Vijay Abraham I 
74328081b72SKishon Vijay Abraham I static const struct clk_ops cdns_sierra_pll_mux_ops = {
7441ca48301SMaxime Ripard 	.determine_rate = __clk_mux_determine_rate,
74528081b72SKishon Vijay Abraham I 	.set_parent = cdns_sierra_pll_mux_set_parent,
74628081b72SKishon Vijay Abraham I 	.get_parent = cdns_sierra_pll_mux_get_parent,
74728081b72SKishon Vijay Abraham I };
74828081b72SKishon Vijay Abraham I 
74928081b72SKishon Vijay Abraham I static int cdns_sierra_pll_mux_register(struct cdns_sierra_phy *sp,
75028081b72SKishon Vijay Abraham I 					struct regmap_field *pfdclk1_sel_field,
75128081b72SKishon Vijay Abraham I 					struct regmap_field *plllc1en_field,
75228081b72SKishon Vijay Abraham I 					struct regmap_field *termen_field,
75328081b72SKishon Vijay Abraham I 					int clk_index)
75428081b72SKishon Vijay Abraham I {
75528081b72SKishon Vijay Abraham I 	struct cdns_sierra_pll_mux *mux;
75628081b72SKishon Vijay Abraham I 	struct device *dev = sp->dev;
75728081b72SKishon Vijay Abraham I 	struct clk_init_data *init;
75828081b72SKishon Vijay Abraham I 	char clk_name[100];
7596ef7aa32SLars-Peter Clausen 	int ret;
76028081b72SKishon Vijay Abraham I 
76128081b72SKishon Vijay Abraham I 	mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL);
76228081b72SKishon Vijay Abraham I 	if (!mux)
76328081b72SKishon Vijay Abraham I 		return -ENOMEM;
76428081b72SKishon Vijay Abraham I 
76528081b72SKishon Vijay Abraham I 	snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev), clk_names[clk_index]);
76628081b72SKishon Vijay Abraham I 
76728081b72SKishon Vijay Abraham I 	init = &mux->clk_data;
76828081b72SKishon Vijay Abraham I 
76928081b72SKishon Vijay Abraham I 	init->ops = &cdns_sierra_pll_mux_ops;
77028081b72SKishon Vijay Abraham I 	init->flags = CLK_SET_RATE_NO_REPARENT;
771a59f6006SLars-Peter Clausen 	init->parent_data = pll_mux_parent_data[clk_index];
772a59f6006SLars-Peter Clausen 	init->num_parents = SIERRA_NUM_CMN_PLLC_PARENTS;
77328081b72SKishon Vijay Abraham I 	init->name = clk_name;
77428081b72SKishon Vijay Abraham I 
77528081b72SKishon Vijay Abraham I 	mux->pfdclk_sel_preg = pfdclk1_sel_field;
77628081b72SKishon Vijay Abraham I 	mux->plllc1en_field = plllc1en_field;
77728081b72SKishon Vijay Abraham I 	mux->termen_field = termen_field;
77828081b72SKishon Vijay Abraham I 	mux->hw.init = init;
77928081b72SKishon Vijay Abraham I 
7806ef7aa32SLars-Peter Clausen 	ret = devm_clk_hw_register(dev, &mux->hw);
7816ef7aa32SLars-Peter Clausen 	if (ret)
7826ef7aa32SLars-Peter Clausen 		return ret;
78328081b72SKishon Vijay Abraham I 
7846ef7aa32SLars-Peter Clausen 	sp->clk_data.hws[clk_index] = &mux->hw;
7856ef7aa32SLars-Peter Clausen 
7866ef7aa32SLars-Peter Clausen 	sp->pll_clks[clk_index] = devm_clk_hw_get_clk(dev, &mux->hw,
7876ef7aa32SLars-Peter Clausen 						      clk_names[clk_index]);
78828081b72SKishon Vijay Abraham I 
78928081b72SKishon Vijay Abraham I 	return 0;
79028081b72SKishon Vijay Abraham I }
79128081b72SKishon Vijay Abraham I 
79228081b72SKishon Vijay Abraham I static int cdns_sierra_phy_register_pll_mux(struct cdns_sierra_phy *sp)
79328081b72SKishon Vijay Abraham I {
79428081b72SKishon Vijay Abraham I 	struct regmap_field *pfdclk1_sel_field;
79528081b72SKishon Vijay Abraham I 	struct regmap_field *plllc1en_field;
79628081b72SKishon Vijay Abraham I 	struct regmap_field *termen_field;
79728081b72SKishon Vijay Abraham I 	struct device *dev = sp->dev;
79828081b72SKishon Vijay Abraham I 	int ret = 0, i, clk_index;
79928081b72SKishon Vijay Abraham I 
80028081b72SKishon Vijay Abraham I 	clk_index = CDNS_SIERRA_PLL_CMNLC;
80128081b72SKishon Vijay Abraham I 	for (i = 0; i < SIERRA_NUM_CMN_PLLC; i++, clk_index++) {
80228081b72SKishon Vijay Abraham I 		pfdclk1_sel_field = sp->cmn_plllc_pfdclk1_sel_preg[i];
80328081b72SKishon Vijay Abraham I 		plllc1en_field = sp->cmn_refrcv_refclk_plllc1en_preg[i];
80428081b72SKishon Vijay Abraham I 		termen_field = sp->cmn_refrcv_refclk_termen_preg[i];
80528081b72SKishon Vijay Abraham I 
80628081b72SKishon Vijay Abraham I 		ret = cdns_sierra_pll_mux_register(sp, pfdclk1_sel_field, plllc1en_field,
80728081b72SKishon Vijay Abraham I 						   termen_field, clk_index);
80828081b72SKishon Vijay Abraham I 		if (ret) {
80928081b72SKishon Vijay Abraham I 			dev_err(dev, "Fail to register cmn plllc mux\n");
81028081b72SKishon Vijay Abraham I 			return ret;
81128081b72SKishon Vijay Abraham I 		}
81228081b72SKishon Vijay Abraham I 	}
81328081b72SKishon Vijay Abraham I 
81428081b72SKishon Vijay Abraham I 	return 0;
81528081b72SKishon Vijay Abraham I }
81628081b72SKishon Vijay Abraham I 
81709d976b3SSwapnil Jakhade static int cdns_sierra_derived_refclk_enable(struct clk_hw *hw)
81809d976b3SSwapnil Jakhade {
81909d976b3SSwapnil Jakhade 	struct cdns_sierra_derived_refclk *derived_refclk = to_cdns_sierra_derived_refclk(hw);
82009d976b3SSwapnil Jakhade 
82109d976b3SSwapnil Jakhade 	regmap_field_write(derived_refclk->cmn_plllc_clk1_en_preg, 0x1);
82209d976b3SSwapnil Jakhade 
82309d976b3SSwapnil Jakhade 	/* Programming to get 100Mhz clock output in ref_der_clk_out 5GHz VCO/50 = 100MHz */
82409d976b3SSwapnil Jakhade 	regmap_field_write(derived_refclk->cmn_plllc_clk1outdiv_preg, 0x2E);
82509d976b3SSwapnil Jakhade 
82609d976b3SSwapnil Jakhade 	return 0;
82709d976b3SSwapnil Jakhade }
82809d976b3SSwapnil Jakhade 
82909d976b3SSwapnil Jakhade static void cdns_sierra_derived_refclk_disable(struct clk_hw *hw)
83009d976b3SSwapnil Jakhade {
83109d976b3SSwapnil Jakhade 	struct cdns_sierra_derived_refclk *derived_refclk = to_cdns_sierra_derived_refclk(hw);
83209d976b3SSwapnil Jakhade 
83309d976b3SSwapnil Jakhade 	regmap_field_write(derived_refclk->cmn_plllc_clk1_en_preg, 0);
83409d976b3SSwapnil Jakhade }
83509d976b3SSwapnil Jakhade 
83609d976b3SSwapnil Jakhade static int cdns_sierra_derived_refclk_is_enabled(struct clk_hw *hw)
83709d976b3SSwapnil Jakhade {
83809d976b3SSwapnil Jakhade 	struct cdns_sierra_derived_refclk *derived_refclk = to_cdns_sierra_derived_refclk(hw);
83909d976b3SSwapnil Jakhade 	int val;
84009d976b3SSwapnil Jakhade 
84109d976b3SSwapnil Jakhade 	regmap_field_read(derived_refclk->cmn_plllc_clk1_en_preg, &val);
84209d976b3SSwapnil Jakhade 
84309d976b3SSwapnil Jakhade 	return !!val;
84409d976b3SSwapnil Jakhade }
84509d976b3SSwapnil Jakhade 
84609d976b3SSwapnil Jakhade static const struct clk_ops cdns_sierra_derived_refclk_ops = {
84709d976b3SSwapnil Jakhade 	.enable = cdns_sierra_derived_refclk_enable,
84809d976b3SSwapnil Jakhade 	.disable = cdns_sierra_derived_refclk_disable,
84909d976b3SSwapnil Jakhade 	.is_enabled = cdns_sierra_derived_refclk_is_enabled,
85009d976b3SSwapnil Jakhade };
85109d976b3SSwapnil Jakhade 
85209d976b3SSwapnil Jakhade static int cdns_sierra_derived_refclk_register(struct cdns_sierra_phy *sp)
85309d976b3SSwapnil Jakhade {
85409d976b3SSwapnil Jakhade 	struct cdns_sierra_derived_refclk *derived_refclk;
85509d976b3SSwapnil Jakhade 	struct device *dev = sp->dev;
85609d976b3SSwapnil Jakhade 	struct regmap_field *field;
85709d976b3SSwapnil Jakhade 	struct clk_init_data *init;
85809d976b3SSwapnil Jakhade 	struct regmap *regmap;
85909d976b3SSwapnil Jakhade 	char clk_name[100];
8606ef7aa32SLars-Peter Clausen 	int ret;
86109d976b3SSwapnil Jakhade 
86209d976b3SSwapnil Jakhade 	derived_refclk = devm_kzalloc(dev, sizeof(*derived_refclk), GFP_KERNEL);
86309d976b3SSwapnil Jakhade 	if (!derived_refclk)
86409d976b3SSwapnil Jakhade 		return -ENOMEM;
86509d976b3SSwapnil Jakhade 
86609d976b3SSwapnil Jakhade 	snprintf(clk_name, sizeof(clk_name), "%s_%s", dev_name(dev),
86709d976b3SSwapnil Jakhade 		 clk_names[CDNS_SIERRA_DERIVED_REFCLK]);
86809d976b3SSwapnil Jakhade 
86909d976b3SSwapnil Jakhade 	init = &derived_refclk->clk_data;
87009d976b3SSwapnil Jakhade 
87109d976b3SSwapnil Jakhade 	init->ops = &cdns_sierra_derived_refclk_ops;
87209d976b3SSwapnil Jakhade 	init->flags = 0;
87309d976b3SSwapnil Jakhade 	init->name = clk_name;
87409d976b3SSwapnil Jakhade 
87509d976b3SSwapnil Jakhade 	regmap = sp->regmap_common_cdb;
87609d976b3SSwapnil Jakhade 
87709d976b3SSwapnil Jakhade 	field = devm_regmap_field_alloc(dev, regmap, cmn_plllc_clk1outdiv_preg);
87809d976b3SSwapnil Jakhade 	if (IS_ERR(field)) {
87909d976b3SSwapnil Jakhade 		dev_err(dev, "cmn_plllc_clk1outdiv_preg reg field init failed\n");
88009d976b3SSwapnil Jakhade 		return PTR_ERR(field);
88109d976b3SSwapnil Jakhade 	}
88209d976b3SSwapnil Jakhade 	derived_refclk->cmn_plllc_clk1outdiv_preg = field;
88309d976b3SSwapnil Jakhade 
88409d976b3SSwapnil Jakhade 	field = devm_regmap_field_alloc(dev, regmap, cmn_plllc_clk1_en_preg);
88509d976b3SSwapnil Jakhade 	if (IS_ERR(field)) {
88609d976b3SSwapnil Jakhade 		dev_err(dev, "cmn_plllc_clk1_en_preg reg field init failed\n");
88709d976b3SSwapnil Jakhade 		return PTR_ERR(field);
88809d976b3SSwapnil Jakhade 	}
88909d976b3SSwapnil Jakhade 	derived_refclk->cmn_plllc_clk1_en_preg = field;
89009d976b3SSwapnil Jakhade 
89109d976b3SSwapnil Jakhade 	derived_refclk->hw.init = init;
89209d976b3SSwapnil Jakhade 
8936ef7aa32SLars-Peter Clausen 	ret = devm_clk_hw_register(dev, &derived_refclk->hw);
8946ef7aa32SLars-Peter Clausen 	if (ret)
8956ef7aa32SLars-Peter Clausen 		return ret;
89609d976b3SSwapnil Jakhade 
8976ef7aa32SLars-Peter Clausen 	sp->clk_data.hws[CDNS_SIERRA_DERIVED_REFCLK] = &derived_refclk->hw;
89809d976b3SSwapnil Jakhade 
89909d976b3SSwapnil Jakhade 	return 0;
90009d976b3SSwapnil Jakhade }
90109d976b3SSwapnil Jakhade 
90228081b72SKishon Vijay Abraham I static void cdns_sierra_clk_unregister(struct cdns_sierra_phy *sp)
90328081b72SKishon Vijay Abraham I {
90428081b72SKishon Vijay Abraham I 	struct device *dev = sp->dev;
90528081b72SKishon Vijay Abraham I 	struct device_node *node = dev->of_node;
90628081b72SKishon Vijay Abraham I 
90728081b72SKishon Vijay Abraham I 	of_clk_del_provider(node);
90828081b72SKishon Vijay Abraham I }
90928081b72SKishon Vijay Abraham I 
91028081b72SKishon Vijay Abraham I static int cdns_sierra_clk_register(struct cdns_sierra_phy *sp)
91128081b72SKishon Vijay Abraham I {
91228081b72SKishon Vijay Abraham I 	struct device *dev = sp->dev;
91328081b72SKishon Vijay Abraham I 	struct device_node *node = dev->of_node;
91428081b72SKishon Vijay Abraham I 	int ret;
91528081b72SKishon Vijay Abraham I 
91628081b72SKishon Vijay Abraham I 	ret = cdns_sierra_phy_register_pll_mux(sp);
91728081b72SKishon Vijay Abraham I 	if (ret) {
91828081b72SKishon Vijay Abraham I 		dev_err(dev, "Failed to pll mux clocks\n");
91928081b72SKishon Vijay Abraham I 		return ret;
92028081b72SKishon Vijay Abraham I 	}
92128081b72SKishon Vijay Abraham I 
92209d976b3SSwapnil Jakhade 	ret = cdns_sierra_derived_refclk_register(sp);
92309d976b3SSwapnil Jakhade 	if (ret) {
92409d976b3SSwapnil Jakhade 		dev_err(dev, "Failed to register derived refclk\n");
92509d976b3SSwapnil Jakhade 		return ret;
92609d976b3SSwapnil Jakhade 	}
92709d976b3SSwapnil Jakhade 
9286ef7aa32SLars-Peter Clausen 	sp->clk_data.num = CDNS_SIERRA_OUTPUT_CLOCKS;
9296ef7aa32SLars-Peter Clausen 	ret = of_clk_add_hw_provider(node, of_clk_hw_onecell_get,
9306ef7aa32SLars-Peter Clausen 				     &sp->clk_data);
93128081b72SKishon Vijay Abraham I 	if (ret)
93228081b72SKishon Vijay Abraham I 		dev_err(dev, "Failed to add clock provider: %s\n", node->name);
93328081b72SKishon Vijay Abraham I 
93428081b72SKishon Vijay Abraham I 	return ret;
93528081b72SKishon Vijay Abraham I }
93628081b72SKishon Vijay Abraham I 
93744d30d62SAlan Douglas static int cdns_sierra_get_optional(struct cdns_sierra_inst *inst,
93844d30d62SAlan Douglas 				    struct device_node *child)
93944d30d62SAlan Douglas {
940078e9e92SSwapnil Jakhade 	u32 phy_type;
941078e9e92SSwapnil Jakhade 
94244d30d62SAlan Douglas 	if (of_property_read_u32(child, "reg", &inst->mlane))
94344d30d62SAlan Douglas 		return -EINVAL;
94444d30d62SAlan Douglas 
94544d30d62SAlan Douglas 	if (of_property_read_u32(child, "cdns,num-lanes", &inst->num_lanes))
94644d30d62SAlan Douglas 		return -EINVAL;
94744d30d62SAlan Douglas 
948078e9e92SSwapnil Jakhade 	if (of_property_read_u32(child, "cdns,phy-type", &phy_type))
94944d30d62SAlan Douglas 		return -EINVAL;
95044d30d62SAlan Douglas 
951078e9e92SSwapnil Jakhade 	switch (phy_type) {
952078e9e92SSwapnil Jakhade 	case PHY_TYPE_PCIE:
953078e9e92SSwapnil Jakhade 		inst->phy_type = TYPE_PCIE;
954078e9e92SSwapnil Jakhade 		break;
955078e9e92SSwapnil Jakhade 	case PHY_TYPE_USB3:
956078e9e92SSwapnil Jakhade 		inst->phy_type = TYPE_USB;
957078e9e92SSwapnil Jakhade 		break;
9580cfa43abSSwapnil Jakhade 	case PHY_TYPE_SGMII:
9590cfa43abSSwapnil Jakhade 		inst->phy_type = TYPE_SGMII;
9600cfa43abSSwapnil Jakhade 		break;
9618a1b82d7SSwapnil Jakhade 	case PHY_TYPE_QSGMII:
9628a1b82d7SSwapnil Jakhade 		inst->phy_type = TYPE_QSGMII;
9638a1b82d7SSwapnil Jakhade 		break;
964078e9e92SSwapnil Jakhade 	default:
965078e9e92SSwapnil Jakhade 		return -EINVAL;
966078e9e92SSwapnil Jakhade 	}
967078e9e92SSwapnil Jakhade 
9681e902b2aSSwapnil Jakhade 	inst->ssc_mode = EXTERNAL_SSC;
9691e902b2aSSwapnil Jakhade 	of_property_read_u32(child, "cdns,ssc-mode", &inst->ssc_mode);
9701e902b2aSSwapnil Jakhade 
97144d30d62SAlan Douglas 	return 0;
97244d30d62SAlan Douglas }
97344d30d62SAlan Douglas 
974380f5708SKishon Vijay Abraham I static struct regmap *cdns_regmap_init(struct device *dev, void __iomem *base,
975380f5708SKishon Vijay Abraham I 				       u32 block_offset, u8 reg_offset_shift,
976380f5708SKishon Vijay Abraham I 				       const struct regmap_config *config)
977380f5708SKishon Vijay Abraham I {
978380f5708SKishon Vijay Abraham I 	struct cdns_regmap_cdb_context *ctx;
979380f5708SKishon Vijay Abraham I 
980380f5708SKishon Vijay Abraham I 	ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
981380f5708SKishon Vijay Abraham I 	if (!ctx)
982380f5708SKishon Vijay Abraham I 		return ERR_PTR(-ENOMEM);
983380f5708SKishon Vijay Abraham I 
984380f5708SKishon Vijay Abraham I 	ctx->dev = dev;
985380f5708SKishon Vijay Abraham I 	ctx->base = base + block_offset;
986380f5708SKishon Vijay Abraham I 	ctx->reg_offset_shift = reg_offset_shift;
987380f5708SKishon Vijay Abraham I 
988380f5708SKishon Vijay Abraham I 	return devm_regmap_init(dev, NULL, ctx, config);
989380f5708SKishon Vijay Abraham I }
990380f5708SKishon Vijay Abraham I 
991380f5708SKishon Vijay Abraham I static int cdns_regfield_init(struct cdns_sierra_phy *sp)
992380f5708SKishon Vijay Abraham I {
993380f5708SKishon Vijay Abraham I 	struct device *dev = sp->dev;
994380f5708SKishon Vijay Abraham I 	struct regmap_field *field;
99528081b72SKishon Vijay Abraham I 	struct reg_field reg_field;
996380f5708SKishon Vijay Abraham I 	struct regmap *regmap;
997adc4bd6fSKishon Vijay Abraham I 	int i;
998380f5708SKishon Vijay Abraham I 
999380f5708SKishon Vijay Abraham I 	regmap = sp->regmap_common_cdb;
1000380f5708SKishon Vijay Abraham I 	field = devm_regmap_field_alloc(dev, regmap, macro_id_type);
1001380f5708SKishon Vijay Abraham I 	if (IS_ERR(field)) {
1002380f5708SKishon Vijay Abraham I 		dev_err(dev, "MACRO_ID_TYPE reg field init failed\n");
1003380f5708SKishon Vijay Abraham I 		return PTR_ERR(field);
1004380f5708SKishon Vijay Abraham I 	}
1005380f5708SKishon Vijay Abraham I 	sp->macro_id_type = field;
1006380f5708SKishon Vijay Abraham I 
100728081b72SKishon Vijay Abraham I 	for (i = 0; i < SIERRA_NUM_CMN_PLLC; i++) {
100828081b72SKishon Vijay Abraham I 		reg_field = cmn_plllc_pfdclk1_sel_preg[i].pfdclk_sel_preg;
100928081b72SKishon Vijay Abraham I 		field = devm_regmap_field_alloc(dev, regmap, reg_field);
101028081b72SKishon Vijay Abraham I 		if (IS_ERR(field)) {
101128081b72SKishon Vijay Abraham I 			dev_err(dev, "PLLLC%d_PFDCLK1_SEL failed\n", i);
101228081b72SKishon Vijay Abraham I 			return PTR_ERR(field);
101328081b72SKishon Vijay Abraham I 		}
101428081b72SKishon Vijay Abraham I 		sp->cmn_plllc_pfdclk1_sel_preg[i] = field;
101528081b72SKishon Vijay Abraham I 
101628081b72SKishon Vijay Abraham I 		reg_field = cmn_plllc_pfdclk1_sel_preg[i].plllc1en_field;
101728081b72SKishon Vijay Abraham I 		field = devm_regmap_field_alloc(dev, regmap, reg_field);
101828081b72SKishon Vijay Abraham I 		if (IS_ERR(field)) {
101928081b72SKishon Vijay Abraham I 			dev_err(dev, "REFRCV%d_REFCLK_PLLLC1EN failed\n", i);
102028081b72SKishon Vijay Abraham I 			return PTR_ERR(field);
102128081b72SKishon Vijay Abraham I 		}
102228081b72SKishon Vijay Abraham I 		sp->cmn_refrcv_refclk_plllc1en_preg[i] = field;
102328081b72SKishon Vijay Abraham I 
102428081b72SKishon Vijay Abraham I 		reg_field = cmn_plllc_pfdclk1_sel_preg[i].termen_field;
102528081b72SKishon Vijay Abraham I 		field = devm_regmap_field_alloc(dev, regmap, reg_field);
102628081b72SKishon Vijay Abraham I 		if (IS_ERR(field)) {
102728081b72SKishon Vijay Abraham I 			dev_err(dev, "REFRCV%d_REFCLK_TERMEN failed\n", i);
102828081b72SKishon Vijay Abraham I 			return PTR_ERR(field);
102928081b72SKishon Vijay Abraham I 		}
103028081b72SKishon Vijay Abraham I 		sp->cmn_refrcv_refclk_termen_preg[i] = field;
103128081b72SKishon Vijay Abraham I 	}
103228081b72SKishon Vijay Abraham I 
10338c95e172SSwapnil Jakhade 	regmap = sp->regmap_phy_pcs_common_cdb;
1034380f5708SKishon Vijay Abraham I 	field = devm_regmap_field_alloc(dev, regmap, phy_pll_cfg_1);
1035380f5708SKishon Vijay Abraham I 	if (IS_ERR(field)) {
1036380f5708SKishon Vijay Abraham I 		dev_err(dev, "PHY_PLL_CFG_1 reg field init failed\n");
1037380f5708SKishon Vijay Abraham I 		return PTR_ERR(field);
1038380f5708SKishon Vijay Abraham I 	}
1039380f5708SKishon Vijay Abraham I 	sp->phy_pll_cfg_1 = field;
1040380f5708SKishon Vijay Abraham I 
1041f1cc6c3fSSwapnil Jakhade 	regmap = sp->regmap_phy_pma_common_cdb;
1042f1cc6c3fSSwapnil Jakhade 	field = devm_regmap_field_alloc(dev, regmap, pma_cmn_ready);
1043f1cc6c3fSSwapnil Jakhade 	if (IS_ERR(field)) {
1044f1cc6c3fSSwapnil Jakhade 		dev_err(dev, "PHY_PMA_CMN_CTRL reg field init failed\n");
1045f1cc6c3fSSwapnil Jakhade 		return PTR_ERR(field);
1046f1cc6c3fSSwapnil Jakhade 	}
1047f1cc6c3fSSwapnil Jakhade 	sp->pma_cmn_ready = field;
1048f1cc6c3fSSwapnil Jakhade 
1049adc4bd6fSKishon Vijay Abraham I 	for (i = 0; i < SIERRA_MAX_LANES; i++) {
1050adc4bd6fSKishon Vijay Abraham I 		regmap = sp->regmap_lane_cdb[i];
1051adc4bd6fSKishon Vijay Abraham I 		field = devm_regmap_field_alloc(dev, regmap, pllctrl_lock);
1052adc4bd6fSKishon Vijay Abraham I 		if (IS_ERR(field)) {
1053adc4bd6fSKishon Vijay Abraham I 			dev_err(dev, "P%d_ENABLE reg field init failed\n", i);
1054adc4bd6fSKishon Vijay Abraham I 			return PTR_ERR(field);
1055adc4bd6fSKishon Vijay Abraham I 		}
1056adc4bd6fSKishon Vijay Abraham I 		sp->pllctrl_lock[i] = field;
1057adc4bd6fSKishon Vijay Abraham I 	}
1058adc4bd6fSKishon Vijay Abraham I 
105936ce4163SSwapnil Jakhade 	for (i = 0; i < SIERRA_MAX_LANES; i++) {
106036ce4163SSwapnil Jakhade 		regmap = sp->regmap_phy_pcs_lane_cdb[i];
106136ce4163SSwapnil Jakhade 		field = devm_regmap_field_alloc(dev, regmap, phy_iso_link_ctrl_1);
106236ce4163SSwapnil Jakhade 		if (IS_ERR(field)) {
106336ce4163SSwapnil Jakhade 			dev_err(dev, "PHY_ISO_LINK_CTRL reg field init for lane %d failed\n", i);
106436ce4163SSwapnil Jakhade 			return PTR_ERR(field);
106536ce4163SSwapnil Jakhade 		}
106636ce4163SSwapnil Jakhade 		sp->phy_iso_link_ctrl_1[i] = field;
106736ce4163SSwapnil Jakhade 	}
106836ce4163SSwapnil Jakhade 
1069380f5708SKishon Vijay Abraham I 	return 0;
1070380f5708SKishon Vijay Abraham I }
1071380f5708SKishon Vijay Abraham I 
1072380f5708SKishon Vijay Abraham I static int cdns_regmap_init_blocks(struct cdns_sierra_phy *sp,
1073380f5708SKishon Vijay Abraham I 				   void __iomem *base, u8 block_offset_shift,
1074380f5708SKishon Vijay Abraham I 				   u8 reg_offset_shift)
1075380f5708SKishon Vijay Abraham I {
1076380f5708SKishon Vijay Abraham I 	struct device *dev = sp->dev;
1077380f5708SKishon Vijay Abraham I 	struct regmap *regmap;
1078380f5708SKishon Vijay Abraham I 	u32 block_offset;
1079380f5708SKishon Vijay Abraham I 	int i;
1080380f5708SKishon Vijay Abraham I 
1081380f5708SKishon Vijay Abraham I 	for (i = 0; i < SIERRA_MAX_LANES; i++) {
1082380f5708SKishon Vijay Abraham I 		block_offset = SIERRA_LANE_CDB_OFFSET(i, block_offset_shift,
1083380f5708SKishon Vijay Abraham I 						      reg_offset_shift);
1084380f5708SKishon Vijay Abraham I 		regmap = cdns_regmap_init(dev, base, block_offset,
1085380f5708SKishon Vijay Abraham I 					  reg_offset_shift,
1086380f5708SKishon Vijay Abraham I 					  &cdns_sierra_lane_cdb_config[i]);
1087380f5708SKishon Vijay Abraham I 		if (IS_ERR(regmap)) {
1088380f5708SKishon Vijay Abraham I 			dev_err(dev, "Failed to init lane CDB regmap\n");
1089380f5708SKishon Vijay Abraham I 			return PTR_ERR(regmap);
1090380f5708SKishon Vijay Abraham I 		}
1091380f5708SKishon Vijay Abraham I 		sp->regmap_lane_cdb[i] = regmap;
1092380f5708SKishon Vijay Abraham I 	}
1093380f5708SKishon Vijay Abraham I 
1094380f5708SKishon Vijay Abraham I 	regmap = cdns_regmap_init(dev, base, SIERRA_COMMON_CDB_OFFSET,
1095380f5708SKishon Vijay Abraham I 				  reg_offset_shift,
1096380f5708SKishon Vijay Abraham I 				  &cdns_sierra_common_cdb_config);
1097380f5708SKishon Vijay Abraham I 	if (IS_ERR(regmap)) {
1098380f5708SKishon Vijay Abraham I 		dev_err(dev, "Failed to init common CDB regmap\n");
1099380f5708SKishon Vijay Abraham I 		return PTR_ERR(regmap);
1100380f5708SKishon Vijay Abraham I 	}
1101380f5708SKishon Vijay Abraham I 	sp->regmap_common_cdb = regmap;
1102380f5708SKishon Vijay Abraham I 
11038c95e172SSwapnil Jakhade 	block_offset = SIERRA_PHY_PCS_COMMON_OFFSET(block_offset_shift);
1104380f5708SKishon Vijay Abraham I 	regmap = cdns_regmap_init(dev, base, block_offset, reg_offset_shift,
11058c95e172SSwapnil Jakhade 				  &cdns_sierra_phy_pcs_cmn_cdb_config);
1106380f5708SKishon Vijay Abraham I 	if (IS_ERR(regmap)) {
11078c95e172SSwapnil Jakhade 		dev_err(dev, "Failed to init PHY PCS common CDB regmap\n");
1108380f5708SKishon Vijay Abraham I 		return PTR_ERR(regmap);
1109380f5708SKishon Vijay Abraham I 	}
11108c95e172SSwapnil Jakhade 	sp->regmap_phy_pcs_common_cdb = regmap;
1111380f5708SKishon Vijay Abraham I 
111236ce4163SSwapnil Jakhade 	for (i = 0; i < SIERRA_MAX_LANES; i++) {
111336ce4163SSwapnil Jakhade 		block_offset = SIERRA_PHY_PCS_LANE_CDB_OFFSET(i, block_offset_shift,
111436ce4163SSwapnil Jakhade 							      reg_offset_shift);
111536ce4163SSwapnil Jakhade 		regmap = cdns_regmap_init(dev, base, block_offset,
111636ce4163SSwapnil Jakhade 					  reg_offset_shift,
111736ce4163SSwapnil Jakhade 					  &cdns_sierra_phy_pcs_lane_cdb_config[i]);
111836ce4163SSwapnil Jakhade 		if (IS_ERR(regmap)) {
111936ce4163SSwapnil Jakhade 			dev_err(dev, "Failed to init PHY PCS lane CDB regmap\n");
112036ce4163SSwapnil Jakhade 			return PTR_ERR(regmap);
112136ce4163SSwapnil Jakhade 		}
112236ce4163SSwapnil Jakhade 		sp->regmap_phy_pcs_lane_cdb[i] = regmap;
112336ce4163SSwapnil Jakhade 	}
112436ce4163SSwapnil Jakhade 
1125f1cc6c3fSSwapnil Jakhade 	block_offset = SIERRA_PHY_PMA_COMMON_OFFSET(block_offset_shift);
1126f1cc6c3fSSwapnil Jakhade 	regmap = cdns_regmap_init(dev, base, block_offset, reg_offset_shift,
1127f1cc6c3fSSwapnil Jakhade 				  &cdns_sierra_phy_pma_cmn_cdb_config);
1128f1cc6c3fSSwapnil Jakhade 	if (IS_ERR(regmap)) {
1129f1cc6c3fSSwapnil Jakhade 		dev_err(dev, "Failed to init PHY PMA common CDB regmap\n");
1130f1cc6c3fSSwapnil Jakhade 		return PTR_ERR(regmap);
1131f1cc6c3fSSwapnil Jakhade 	}
1132f1cc6c3fSSwapnil Jakhade 	sp->regmap_phy_pma_common_cdb = regmap;
1133f1cc6c3fSSwapnil Jakhade 
11346b81f05aSSwapnil Jakhade 	for (i = 0; i < SIERRA_MAX_LANES; i++) {
11356b81f05aSSwapnil Jakhade 		block_offset = SIERRA_PHY_PMA_LANE_CDB_OFFSET(i, block_offset_shift,
11366b81f05aSSwapnil Jakhade 							      reg_offset_shift);
11376b81f05aSSwapnil Jakhade 		regmap = cdns_regmap_init(dev, base, block_offset,
11386b81f05aSSwapnil Jakhade 					  reg_offset_shift,
11396b81f05aSSwapnil Jakhade 					  &cdns_sierra_phy_pma_lane_cdb_config[i]);
11406b81f05aSSwapnil Jakhade 		if (IS_ERR(regmap)) {
11416b81f05aSSwapnil Jakhade 			dev_err(dev, "Failed to init PHY PMA lane CDB regmap\n");
11426b81f05aSSwapnil Jakhade 			return PTR_ERR(regmap);
11436b81f05aSSwapnil Jakhade 		}
11446b81f05aSSwapnil Jakhade 		sp->regmap_phy_pma_lane_cdb[i] = regmap;
11456b81f05aSSwapnil Jakhade 	}
11466b81f05aSSwapnil Jakhade 
1147380f5708SKishon Vijay Abraham I 	return 0;
1148380f5708SKishon Vijay Abraham I }
1149380f5708SKishon Vijay Abraham I 
11507e016cbcSKishon Vijay Abraham I static int cdns_sierra_phy_get_clocks(struct cdns_sierra_phy *sp,
11517e016cbcSKishon Vijay Abraham I 				      struct device *dev)
11527e016cbcSKishon Vijay Abraham I {
11537e016cbcSKishon Vijay Abraham I 	struct clk *clk;
11547e016cbcSKishon Vijay Abraham I 	int ret;
11557e016cbcSKishon Vijay Abraham I 
11567e016cbcSKishon Vijay Abraham I 	clk = devm_clk_get_optional(dev, "cmn_refclk_dig_div");
11577e016cbcSKishon Vijay Abraham I 	if (IS_ERR(clk)) {
11587e016cbcSKishon Vijay Abraham I 		dev_err(dev, "cmn_refclk_dig_div clock not found\n");
11597e016cbcSKishon Vijay Abraham I 		ret = PTR_ERR(clk);
11607e016cbcSKishon Vijay Abraham I 		return ret;
11617e016cbcSKishon Vijay Abraham I 	}
1162a0c30cd7SKishon Vijay Abraham I 	sp->input_clks[CMN_REFCLK_DIG_DIV] = clk;
11637e016cbcSKishon Vijay Abraham I 
11647e016cbcSKishon Vijay Abraham I 	clk = devm_clk_get_optional(dev, "cmn_refclk1_dig_div");
11657e016cbcSKishon Vijay Abraham I 	if (IS_ERR(clk)) {
11667e016cbcSKishon Vijay Abraham I 		dev_err(dev, "cmn_refclk1_dig_div clock not found\n");
11677e016cbcSKishon Vijay Abraham I 		ret = PTR_ERR(clk);
11687e016cbcSKishon Vijay Abraham I 		return ret;
11697e016cbcSKishon Vijay Abraham I 	}
1170a0c30cd7SKishon Vijay Abraham I 	sp->input_clks[CMN_REFCLK1_DIG_DIV] = clk;
11717e016cbcSKishon Vijay Abraham I 
11727e016cbcSKishon Vijay Abraham I 	return 0;
11737e016cbcSKishon Vijay Abraham I }
11747e016cbcSKishon Vijay Abraham I 
1175d88ca22dSAswath Govindraju static int cdns_sierra_phy_clk(struct cdns_sierra_phy *sp)
11761436ec30SKishon Vijay Abraham I {
1177d88ca22dSAswath Govindraju 	struct device *dev = sp->dev;
1178d88ca22dSAswath Govindraju 	struct clk *clk;
11791436ec30SKishon Vijay Abraham I 	int ret;
11801436ec30SKishon Vijay Abraham I 
1181d88ca22dSAswath Govindraju 	clk = devm_clk_get_optional(dev, "phy_clk");
1182d88ca22dSAswath Govindraju 	if (IS_ERR(clk)) {
1183d88ca22dSAswath Govindraju 		dev_err(dev, "failed to get clock phy_clk\n");
1184d88ca22dSAswath Govindraju 		return PTR_ERR(clk);
1185d88ca22dSAswath Govindraju 	}
1186d88ca22dSAswath Govindraju 	sp->input_clks[PHY_CLK] = clk;
1187d88ca22dSAswath Govindraju 
11881436ec30SKishon Vijay Abraham I 	ret = clk_prepare_enable(sp->input_clks[PHY_CLK]);
11891436ec30SKishon Vijay Abraham I 	if (ret)
11901436ec30SKishon Vijay Abraham I 		return ret;
11911436ec30SKishon Vijay Abraham I 
1192d88ca22dSAswath Govindraju 	return 0;
1193d88ca22dSAswath Govindraju }
1194d88ca22dSAswath Govindraju 
1195d88ca22dSAswath Govindraju static int cdns_sierra_phy_enable_clocks(struct cdns_sierra_phy *sp)
1196d88ca22dSAswath Govindraju {
1197d88ca22dSAswath Govindraju 	int ret;
1198d88ca22dSAswath Govindraju 
11996ef7aa32SLars-Peter Clausen 	ret = clk_prepare_enable(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC]);
12001436ec30SKishon Vijay Abraham I 	if (ret)
1201d88ca22dSAswath Govindraju 		return ret;
12021436ec30SKishon Vijay Abraham I 
12036ef7aa32SLars-Peter Clausen 	ret = clk_prepare_enable(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC1]);
12041436ec30SKishon Vijay Abraham I 	if (ret)
12051436ec30SKishon Vijay Abraham I 		goto err_pll_cmnlc1;
12061436ec30SKishon Vijay Abraham I 
12071436ec30SKishon Vijay Abraham I 	return 0;
12081436ec30SKishon Vijay Abraham I 
12091436ec30SKishon Vijay Abraham I err_pll_cmnlc1:
12106ef7aa32SLars-Peter Clausen 	clk_disable_unprepare(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC]);
12111436ec30SKishon Vijay Abraham I 
12121436ec30SKishon Vijay Abraham I 	return ret;
12131436ec30SKishon Vijay Abraham I }
12141436ec30SKishon Vijay Abraham I 
12151436ec30SKishon Vijay Abraham I static void cdns_sierra_phy_disable_clocks(struct cdns_sierra_phy *sp)
12161436ec30SKishon Vijay Abraham I {
12176ef7aa32SLars-Peter Clausen 	clk_disable_unprepare(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC1]);
12186ef7aa32SLars-Peter Clausen 	clk_disable_unprepare(sp->pll_clks[CDNS_SIERRA_PLL_CMNLC]);
1219d88ca22dSAswath Govindraju 	if (!sp->already_configured)
12201436ec30SKishon Vijay Abraham I 		clk_disable_unprepare(sp->input_clks[PHY_CLK]);
12211436ec30SKishon Vijay Abraham I }
12221436ec30SKishon Vijay Abraham I 
12231d5f40e0SKishon Vijay Abraham I static int cdns_sierra_phy_get_resets(struct cdns_sierra_phy *sp,
12241d5f40e0SKishon Vijay Abraham I 				      struct device *dev)
12251d5f40e0SKishon Vijay Abraham I {
12261d5f40e0SKishon Vijay Abraham I 	struct reset_control *rst;
12271d5f40e0SKishon Vijay Abraham I 
122815b0b82dSKishon Vijay Abraham I 	rst = devm_reset_control_get_exclusive(dev, "sierra_reset");
12291d5f40e0SKishon Vijay Abraham I 	if (IS_ERR(rst)) {
12301d5f40e0SKishon Vijay Abraham I 		dev_err(dev, "failed to get reset\n");
12311d5f40e0SKishon Vijay Abraham I 		return PTR_ERR(rst);
12321d5f40e0SKishon Vijay Abraham I 	}
12331d5f40e0SKishon Vijay Abraham I 	sp->phy_rst = rst;
12341d5f40e0SKishon Vijay Abraham I 
123515b0b82dSKishon Vijay Abraham I 	rst = devm_reset_control_get_optional_exclusive(dev, "sierra_apb");
12361d5f40e0SKishon Vijay Abraham I 	if (IS_ERR(rst)) {
12371d5f40e0SKishon Vijay Abraham I 		dev_err(dev, "failed to get apb reset\n");
12381d5f40e0SKishon Vijay Abraham I 		return PTR_ERR(rst);
12391d5f40e0SKishon Vijay Abraham I 	}
12401d5f40e0SKishon Vijay Abraham I 	sp->apb_rst = rst;
12411d5f40e0SKishon Vijay Abraham I 
12421d5f40e0SKishon Vijay Abraham I 	return 0;
12431d5f40e0SKishon Vijay Abraham I }
12441d5f40e0SKishon Vijay Abraham I 
12456b81f05aSSwapnil Jakhade static int cdns_sierra_phy_configure_multilink(struct cdns_sierra_phy *sp)
12466b81f05aSSwapnil Jakhade {
12476b81f05aSSwapnil Jakhade 	const struct cdns_sierra_data *init_data = sp->init_data;
12486b81f05aSSwapnil Jakhade 	struct cdns_sierra_vals *pma_cmn_vals, *pma_ln_vals;
12496b81f05aSSwapnil Jakhade 	enum cdns_sierra_phy_type phy_t1, phy_t2;
12506b81f05aSSwapnil Jakhade 	struct cdns_sierra_vals *phy_pma_ln_vals;
12516b81f05aSSwapnil Jakhade 	const struct cdns_reg_pairs *reg_pairs;
12526b81f05aSSwapnil Jakhade 	struct cdns_sierra_vals *pcs_cmn_vals;
12536b81f05aSSwapnil Jakhade 	int i, j, node, mlane, num_lanes, ret;
12546b81f05aSSwapnil Jakhade 	enum cdns_sierra_ssc_mode ssc;
12556b81f05aSSwapnil Jakhade 	struct regmap *regmap;
12566b81f05aSSwapnil Jakhade 	u32 num_regs;
12576b81f05aSSwapnil Jakhade 
12586b81f05aSSwapnil Jakhade 	/* Maximum 2 links (subnodes) are supported */
12596b81f05aSSwapnil Jakhade 	if (sp->nsubnodes != 2)
12606b81f05aSSwapnil Jakhade 		return -EINVAL;
12616b81f05aSSwapnil Jakhade 
12626b81f05aSSwapnil Jakhade 	clk_set_rate(sp->input_clks[CMN_REFCLK_DIG_DIV], 25000000);
12636b81f05aSSwapnil Jakhade 	clk_set_rate(sp->input_clks[CMN_REFCLK1_DIG_DIV], 25000000);
12646b81f05aSSwapnil Jakhade 
12656b81f05aSSwapnil Jakhade 	/* PHY configured to use both PLL LC and LC1 */
12666b81f05aSSwapnil Jakhade 	regmap_field_write(sp->phy_pll_cfg_1, 0x1);
12676b81f05aSSwapnil Jakhade 
12686b81f05aSSwapnil Jakhade 	phy_t1 = sp->phys[0].phy_type;
12696b81f05aSSwapnil Jakhade 	phy_t2 = sp->phys[1].phy_type;
12706b81f05aSSwapnil Jakhade 
12716b81f05aSSwapnil Jakhade 	/*
12726b81f05aSSwapnil Jakhade 	 * PHY configuration for multi-link operation is done in two steps.
12736b81f05aSSwapnil Jakhade 	 * e.g. Consider a case for a 4 lane PHY with PCIe using 2 lanes and QSGMII other 2 lanes.
12746b81f05aSSwapnil Jakhade 	 * Sierra PHY has 2 PLLs, viz. PLLLC and PLLLC1. So in this case, PLLLC is used for PCIe
12756b81f05aSSwapnil Jakhade 	 * and PLLLC1 is used for QSGMII. PHY is configured in two steps as described below.
12766b81f05aSSwapnil Jakhade 	 *
12776b81f05aSSwapnil Jakhade 	 * [1] For first step, phy_t1 = TYPE_PCIE and phy_t2 = TYPE_QSGMII
12786b81f05aSSwapnil Jakhade 	 *     So the register values are selected as [TYPE_PCIE][TYPE_QSGMII][ssc].
12796b81f05aSSwapnil Jakhade 	 *     This will configure PHY registers associated for PCIe (i.e. first protocol)
12806b81f05aSSwapnil Jakhade 	 *     involving PLLLC registers and registers for first 2 lanes of PHY.
12816b81f05aSSwapnil Jakhade 	 * [2] In second step, the variables phy_t1 and phy_t2 are swapped. So now,
12826b81f05aSSwapnil Jakhade 	 *     phy_t1 = TYPE_QSGMII and phy_t2 = TYPE_PCIE. And the register values are selected as
12836b81f05aSSwapnil Jakhade 	 *     [TYPE_QSGMII][TYPE_PCIE][ssc].
12846b81f05aSSwapnil Jakhade 	 *     This will configure PHY registers associated for QSGMII (i.e. second protocol)
12856b81f05aSSwapnil Jakhade 	 *     involving PLLLC1 registers and registers for other 2 lanes of PHY.
12866b81f05aSSwapnil Jakhade 	 *
12876b81f05aSSwapnil Jakhade 	 * This completes the PHY configuration for multilink operation. This approach enables
12886b81f05aSSwapnil Jakhade 	 * dividing the large number of PHY register configurations into protocol specific
12896b81f05aSSwapnil Jakhade 	 * smaller groups.
12906b81f05aSSwapnil Jakhade 	 */
12916b81f05aSSwapnil Jakhade 	for (node = 0; node < sp->nsubnodes; node++) {
12926b81f05aSSwapnil Jakhade 		if (node == 1) {
12936b81f05aSSwapnil Jakhade 			/*
12946b81f05aSSwapnil Jakhade 			 * If first link with phy_t1 is configured, then configure the PHY for
12956b81f05aSSwapnil Jakhade 			 * second link with phy_t2. Get the array values as [phy_t2][phy_t1][ssc].
12966b81f05aSSwapnil Jakhade 			 */
12976b81f05aSSwapnil Jakhade 			swap(phy_t1, phy_t2);
12986b81f05aSSwapnil Jakhade 		}
12996b81f05aSSwapnil Jakhade 
13006b81f05aSSwapnil Jakhade 		mlane = sp->phys[node].mlane;
13016b81f05aSSwapnil Jakhade 		ssc = sp->phys[node].ssc_mode;
13026b81f05aSSwapnil Jakhade 		num_lanes = sp->phys[node].num_lanes;
13036b81f05aSSwapnil Jakhade 
13046b81f05aSSwapnil Jakhade 		/* PHY PCS common registers configurations */
13056b81f05aSSwapnil Jakhade 		pcs_cmn_vals = init_data->pcs_cmn_vals[phy_t1][phy_t2][ssc];
13066b81f05aSSwapnil Jakhade 		if (pcs_cmn_vals) {
13076b81f05aSSwapnil Jakhade 			reg_pairs = pcs_cmn_vals->reg_pairs;
13086b81f05aSSwapnil Jakhade 			num_regs = pcs_cmn_vals->num_regs;
13096b81f05aSSwapnil Jakhade 			regmap = sp->regmap_phy_pcs_common_cdb;
13106b81f05aSSwapnil Jakhade 			for (i = 0; i < num_regs; i++)
13116b81f05aSSwapnil Jakhade 				regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
13126b81f05aSSwapnil Jakhade 		}
13136b81f05aSSwapnil Jakhade 
13146b81f05aSSwapnil Jakhade 		/* PHY PMA lane registers configurations */
13156b81f05aSSwapnil Jakhade 		phy_pma_ln_vals = init_data->phy_pma_ln_vals[phy_t1][phy_t2][ssc];
13166b81f05aSSwapnil Jakhade 		if (phy_pma_ln_vals) {
13176b81f05aSSwapnil Jakhade 			reg_pairs = phy_pma_ln_vals->reg_pairs;
13186b81f05aSSwapnil Jakhade 			num_regs = phy_pma_ln_vals->num_regs;
13196b81f05aSSwapnil Jakhade 			for (i = 0; i < num_lanes; i++) {
13206b81f05aSSwapnil Jakhade 				regmap = sp->regmap_phy_pma_lane_cdb[i + mlane];
13216b81f05aSSwapnil Jakhade 				for (j = 0; j < num_regs; j++)
13226b81f05aSSwapnil Jakhade 					regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
13236b81f05aSSwapnil Jakhade 			}
13246b81f05aSSwapnil Jakhade 		}
13256b81f05aSSwapnil Jakhade 
13266b81f05aSSwapnil Jakhade 		/* PMA common registers configurations */
13276b81f05aSSwapnil Jakhade 		pma_cmn_vals = init_data->pma_cmn_vals[phy_t1][phy_t2][ssc];
13286b81f05aSSwapnil Jakhade 		if (pma_cmn_vals) {
13296b81f05aSSwapnil Jakhade 			reg_pairs = pma_cmn_vals->reg_pairs;
13306b81f05aSSwapnil Jakhade 			num_regs = pma_cmn_vals->num_regs;
13316b81f05aSSwapnil Jakhade 			regmap = sp->regmap_common_cdb;
13326b81f05aSSwapnil Jakhade 			for (i = 0; i < num_regs; i++)
13336b81f05aSSwapnil Jakhade 				regmap_write(regmap, reg_pairs[i].off, reg_pairs[i].val);
13346b81f05aSSwapnil Jakhade 		}
13356b81f05aSSwapnil Jakhade 
13366b81f05aSSwapnil Jakhade 		/* PMA lane registers configurations */
13376b81f05aSSwapnil Jakhade 		pma_ln_vals = init_data->pma_ln_vals[phy_t1][phy_t2][ssc];
13386b81f05aSSwapnil Jakhade 		if (pma_ln_vals) {
13396b81f05aSSwapnil Jakhade 			reg_pairs = pma_ln_vals->reg_pairs;
13406b81f05aSSwapnil Jakhade 			num_regs = pma_ln_vals->num_regs;
13416b81f05aSSwapnil Jakhade 			for (i = 0; i < num_lanes; i++) {
13426b81f05aSSwapnil Jakhade 				regmap = sp->regmap_lane_cdb[i + mlane];
13436b81f05aSSwapnil Jakhade 				for (j = 0; j < num_regs; j++)
13446b81f05aSSwapnil Jakhade 					regmap_write(regmap, reg_pairs[j].off, reg_pairs[j].val);
13456b81f05aSSwapnil Jakhade 			}
13466b81f05aSSwapnil Jakhade 		}
13478a1b82d7SSwapnil Jakhade 
13480cfa43abSSwapnil Jakhade 		if (phy_t1 == TYPE_SGMII || phy_t1 == TYPE_QSGMII)
13498a1b82d7SSwapnil Jakhade 			reset_control_deassert(sp->phys[node].lnk_rst);
13506b81f05aSSwapnil Jakhade 	}
13516b81f05aSSwapnil Jakhade 
13526b81f05aSSwapnil Jakhade 	/* Take the PHY out of reset */
13536b81f05aSSwapnil Jakhade 	ret = reset_control_deassert(sp->phy_rst);
13546b81f05aSSwapnil Jakhade 	if (ret)
13556b81f05aSSwapnil Jakhade 		return ret;
13566b81f05aSSwapnil Jakhade 
13576b81f05aSSwapnil Jakhade 	return 0;
13586b81f05aSSwapnil Jakhade }
13596b81f05aSSwapnil Jakhade 
136044d30d62SAlan Douglas static int cdns_sierra_phy_probe(struct platform_device *pdev)
136144d30d62SAlan Douglas {
136244d30d62SAlan Douglas 	struct cdns_sierra_phy *sp;
136344d30d62SAlan Douglas 	struct phy_provider *phy_provider;
136444d30d62SAlan Douglas 	struct device *dev = &pdev->dev;
1365c3c11d55SSwapnil Jakhade 	const struct cdns_sierra_data *data;
1366380f5708SKishon Vijay Abraham I 	unsigned int id_value;
136729afbd76SDan Carpenter 	int ret, node = 0;
1368380f5708SKishon Vijay Abraham I 	void __iomem *base;
136944d30d62SAlan Douglas 	struct device_node *dn = dev->of_node, *child;
137044d30d62SAlan Douglas 
137144d30d62SAlan Douglas 	if (of_get_child_count(dn) == 0)
137244d30d62SAlan Douglas 		return -ENODEV;
137344d30d62SAlan Douglas 
1374380f5708SKishon Vijay Abraham I 	/* Get init data for this PHY */
1375c3c11d55SSwapnil Jakhade 	data = of_device_get_match_data(dev);
1376c3c11d55SSwapnil Jakhade 	if (!data)
1377380f5708SKishon Vijay Abraham I 		return -EINVAL;
1378380f5708SKishon Vijay Abraham I 
13796ef7aa32SLars-Peter Clausen 	sp = devm_kzalloc(dev, struct_size(sp, clk_data.hws,
13806ef7aa32SLars-Peter Clausen 					   CDNS_SIERRA_OUTPUT_CLOCKS),
13816ef7aa32SLars-Peter Clausen 			  GFP_KERNEL);
138244d30d62SAlan Douglas 	if (!sp)
138344d30d62SAlan Douglas 		return -ENOMEM;
138444d30d62SAlan Douglas 	dev_set_drvdata(dev, sp);
138544d30d62SAlan Douglas 	sp->dev = dev;
1386380f5708SKishon Vijay Abraham I 	sp->init_data = data;
138744d30d62SAlan Douglas 
1388fa629094SChunfeng Yun 	base = devm_platform_ioremap_resource(pdev, 0);
1389380f5708SKishon Vijay Abraham I 	if (IS_ERR(base)) {
139044d30d62SAlan Douglas 		dev_err(dev, "missing \"reg\"\n");
1391380f5708SKishon Vijay Abraham I 		return PTR_ERR(base);
139244d30d62SAlan Douglas 	}
139344d30d62SAlan Douglas 
1394380f5708SKishon Vijay Abraham I 	ret = cdns_regmap_init_blocks(sp, base, data->block_offset_shift,
1395380f5708SKishon Vijay Abraham I 				      data->reg_offset_shift);
1396380f5708SKishon Vijay Abraham I 	if (ret)
1397380f5708SKishon Vijay Abraham I 		return ret;
1398380f5708SKishon Vijay Abraham I 
1399380f5708SKishon Vijay Abraham I 	ret = cdns_regfield_init(sp);
1400380f5708SKishon Vijay Abraham I 	if (ret)
1401380f5708SKishon Vijay Abraham I 		return ret;
140244d30d62SAlan Douglas 
140344d30d62SAlan Douglas 	platform_set_drvdata(pdev, sp);
140444d30d62SAlan Douglas 
14057e016cbcSKishon Vijay Abraham I 	ret = cdns_sierra_phy_get_clocks(sp, dev);
14067e016cbcSKishon Vijay Abraham I 	if (ret)
14077e016cbcSKishon Vijay Abraham I 		return ret;
140844d30d62SAlan Douglas 
140928081b72SKishon Vijay Abraham I 	ret = cdns_sierra_clk_register(sp);
14101d5f40e0SKishon Vijay Abraham I 	if (ret)
14111d5f40e0SKishon Vijay Abraham I 		return ret;
141244d30d62SAlan Douglas 
14131436ec30SKishon Vijay Abraham I 	ret = cdns_sierra_phy_enable_clocks(sp);
141444d30d62SAlan Douglas 	if (ret)
141528081b72SKishon Vijay Abraham I 		goto unregister_clk;
141644d30d62SAlan Douglas 
1417d88ca22dSAswath Govindraju 	regmap_field_read(sp->pma_cmn_ready, &sp->already_configured);
1418d88ca22dSAswath Govindraju 
1419d88ca22dSAswath Govindraju 	if (!sp->already_configured) {
1420d88ca22dSAswath Govindraju 		ret = cdns_sierra_phy_clk(sp);
1421d88ca22dSAswath Govindraju 		if (ret)
1422d88ca22dSAswath Govindraju 			goto clk_disable;
1423d88ca22dSAswath Govindraju 
1424d88ca22dSAswath Govindraju 		ret = cdns_sierra_phy_get_resets(sp, dev);
1425d88ca22dSAswath Govindraju 		if (ret)
1426d88ca22dSAswath Govindraju 			goto clk_disable;
1427d88ca22dSAswath Govindraju 
142844d30d62SAlan Douglas 		/* Enable APB */
142944d30d62SAlan Douglas 		reset_control_deassert(sp->apb_rst);
1430d88ca22dSAswath Govindraju 	}
143144d30d62SAlan Douglas 
143244d30d62SAlan Douglas 	/* Check that PHY is present */
1433380f5708SKishon Vijay Abraham I 	regmap_field_read(sp->macro_id_type, &id_value);
1434380f5708SKishon Vijay Abraham I 	if  (sp->init_data->id_value != id_value) {
143544d30d62SAlan Douglas 		ret = -EINVAL;
1436d88ca22dSAswath Govindraju 		goto ctrl_assert;
143744d30d62SAlan Douglas 	}
143844d30d62SAlan Douglas 
143944d30d62SAlan Douglas 	sp->autoconf = of_property_read_bool(dn, "cdns,autoconf");
144044d30d62SAlan Douglas 
144144d30d62SAlan Douglas 	for_each_available_child_of_node(dn, child) {
144244d30d62SAlan Douglas 		struct phy *gphy;
144344d30d62SAlan Douglas 
144403ada5a3SKishon Vijay Abraham I 		if (!(of_node_name_eq(child, "phy") ||
144503ada5a3SKishon Vijay Abraham I 		      of_node_name_eq(child, "link")))
144603ada5a3SKishon Vijay Abraham I 			continue;
144703ada5a3SKishon Vijay Abraham I 
144844d30d62SAlan Douglas 		sp->phys[node].lnk_rst =
1449b872936fSKishon Vijay Abraham I 			of_reset_control_array_get_exclusive(child);
145044d30d62SAlan Douglas 
145144d30d62SAlan Douglas 		if (IS_ERR(sp->phys[node].lnk_rst)) {
145244d30d62SAlan Douglas 			dev_err(dev, "failed to get reset %s\n",
145344d30d62SAlan Douglas 				child->full_name);
145444d30d62SAlan Douglas 			ret = PTR_ERR(sp->phys[node].lnk_rst);
145529afbd76SDan Carpenter 			of_node_put(child);
145629afbd76SDan Carpenter 			goto put_control;
145744d30d62SAlan Douglas 		}
145844d30d62SAlan Douglas 
145944d30d62SAlan Douglas 		if (!sp->autoconf) {
146044d30d62SAlan Douglas 			ret = cdns_sierra_get_optional(&sp->phys[node], child);
146144d30d62SAlan Douglas 			if (ret) {
146244d30d62SAlan Douglas 				dev_err(dev, "missing property in node %s\n",
146344d30d62SAlan Douglas 					child->name);
146429afbd76SDan Carpenter 				of_node_put(child);
146529afbd76SDan Carpenter 				reset_control_put(sp->phys[node].lnk_rst);
146629afbd76SDan Carpenter 				goto put_control;
146744d30d62SAlan Douglas 			}
146844d30d62SAlan Douglas 		}
146944d30d62SAlan Douglas 
1470a43f72aeSKishon Vijay Abraham I 		sp->num_lanes += sp->phys[node].num_lanes;
1471a43f72aeSKishon Vijay Abraham I 
1472d88ca22dSAswath Govindraju 		if (!sp->already_configured)
147344d30d62SAlan Douglas 			gphy = devm_phy_create(dev, child, &ops);
1474d88ca22dSAswath Govindraju 		else
1475d88ca22dSAswath Govindraju 			gphy = devm_phy_create(dev, child, &noop_ops);
147644d30d62SAlan Douglas 		if (IS_ERR(gphy)) {
147744d30d62SAlan Douglas 			ret = PTR_ERR(gphy);
147829afbd76SDan Carpenter 			of_node_put(child);
147929afbd76SDan Carpenter 			reset_control_put(sp->phys[node].lnk_rst);
148029afbd76SDan Carpenter 			goto put_control;
148144d30d62SAlan Douglas 		}
148244d30d62SAlan Douglas 		sp->phys[node].phy = gphy;
148344d30d62SAlan Douglas 		phy_set_drvdata(gphy, &sp->phys[node]);
148444d30d62SAlan Douglas 
148544d30d62SAlan Douglas 		node++;
148644d30d62SAlan Douglas 	}
148744d30d62SAlan Douglas 	sp->nsubnodes = node;
148844d30d62SAlan Douglas 
1489a43f72aeSKishon Vijay Abraham I 	if (sp->num_lanes > SIERRA_MAX_LANES) {
14906411e386SWang Wensheng 		ret = -EINVAL;
1491a43f72aeSKishon Vijay Abraham I 		dev_err(dev, "Invalid lane configuration\n");
149229afbd76SDan Carpenter 		goto put_control;
1493a43f72aeSKishon Vijay Abraham I 	}
1494a43f72aeSKishon Vijay Abraham I 
149544d30d62SAlan Douglas 	/* If more than one subnode, configure the PHY as multilink */
1496d88ca22dSAswath Govindraju 	if (!sp->already_configured && !sp->autoconf && sp->nsubnodes > 1) {
14976b81f05aSSwapnil Jakhade 		ret = cdns_sierra_phy_configure_multilink(sp);
14986b81f05aSSwapnil Jakhade 		if (ret)
149929afbd76SDan Carpenter 			goto put_control;
15006b81f05aSSwapnil Jakhade 	}
150144d30d62SAlan Douglas 
150244d30d62SAlan Douglas 	pm_runtime_enable(dev);
150344d30d62SAlan Douglas 	phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
150429afbd76SDan Carpenter 	if (IS_ERR(phy_provider)) {
150529afbd76SDan Carpenter 		ret = PTR_ERR(phy_provider);
150629afbd76SDan Carpenter 		goto put_control;
150729afbd76SDan Carpenter 	}
150844d30d62SAlan Douglas 
150929afbd76SDan Carpenter 	return 0;
151029afbd76SDan Carpenter 
151129afbd76SDan Carpenter put_control:
151229afbd76SDan Carpenter 	while (--node >= 0)
151329afbd76SDan Carpenter 		reset_control_put(sp->phys[node].lnk_rst);
1514d88ca22dSAswath Govindraju ctrl_assert:
1515d88ca22dSAswath Govindraju 	if (!sp->already_configured)
1516d88ca22dSAswath Govindraju 		reset_control_assert(sp->apb_rst);
151744d30d62SAlan Douglas clk_disable:
15181436ec30SKishon Vijay Abraham I 	cdns_sierra_phy_disable_clocks(sp);
151928081b72SKishon Vijay Abraham I unregister_clk:
152028081b72SKishon Vijay Abraham I 	cdns_sierra_clk_unregister(sp);
152144d30d62SAlan Douglas 	return ret;
152244d30d62SAlan Douglas }
152344d30d62SAlan Douglas 
1524e9ddb1adSUwe Kleine-König static void cdns_sierra_phy_remove(struct platform_device *pdev)
152544d30d62SAlan Douglas {
1526748e3456SKishon Vijay Abraham I 	struct cdns_sierra_phy *phy = platform_get_drvdata(pdev);
152744d30d62SAlan Douglas 	int i;
152844d30d62SAlan Douglas 
152944d30d62SAlan Douglas 	reset_control_assert(phy->phy_rst);
153044d30d62SAlan Douglas 	reset_control_assert(phy->apb_rst);
153144d30d62SAlan Douglas 	pm_runtime_disable(&pdev->dev);
153244d30d62SAlan Douglas 
15331436ec30SKishon Vijay Abraham I 	cdns_sierra_phy_disable_clocks(phy);
153444d30d62SAlan Douglas 	/*
153544d30d62SAlan Douglas 	 * The device level resets will be put automatically.
153644d30d62SAlan Douglas 	 * Need to put the subnode resets here though.
153744d30d62SAlan Douglas 	 */
153844d30d62SAlan Douglas 	for (i = 0; i < phy->nsubnodes; i++) {
153944d30d62SAlan Douglas 		reset_control_assert(phy->phys[i].lnk_rst);
154044d30d62SAlan Douglas 		reset_control_put(phy->phys[i].lnk_rst);
154144d30d62SAlan Douglas 	}
154229c2d02aSKishon Vijay Abraham I 
154328081b72SKishon Vijay Abraham I 	cdns_sierra_clk_unregister(phy);
154444d30d62SAlan Douglas }
154544d30d62SAlan Douglas 
15460cfa43abSSwapnil Jakhade /* SGMII PHY PMA lane configuration */
15470cfa43abSSwapnil Jakhade static struct cdns_reg_pairs sgmii_phy_pma_ln_regs[] = {
15480cfa43abSSwapnil Jakhade 	{0x9010, SIERRA_PHY_PMA_XCVR_CTRL}
15490cfa43abSSwapnil Jakhade };
15500cfa43abSSwapnil Jakhade 
15510cfa43abSSwapnil Jakhade static struct cdns_sierra_vals sgmii_phy_pma_ln_vals = {
15520cfa43abSSwapnil Jakhade 	.reg_pairs = sgmii_phy_pma_ln_regs,
15530cfa43abSSwapnil Jakhade 	.num_regs = ARRAY_SIZE(sgmii_phy_pma_ln_regs),
15540cfa43abSSwapnil Jakhade };
15550cfa43abSSwapnil Jakhade 
15560cfa43abSSwapnil Jakhade /* SGMII refclk 100MHz, no ssc, opt3 and GE1 links using PLL LC1 */
15570cfa43abSSwapnil Jakhade static const struct cdns_reg_pairs sgmii_100_no_ssc_plllc1_opt3_cmn_regs[] = {
15580cfa43abSSwapnil Jakhade 	{0x002D, SIERRA_CMN_PLLLC1_FBDIV_INT_PREG},
15590cfa43abSSwapnil Jakhade 	{0x2085, SIERRA_CMN_PLLLC1_LF_COEFF_MODE0_PREG},
15600cfa43abSSwapnil Jakhade 	{0x1005, SIERRA_CMN_PLLLC1_CLK0_PREG},
15610cfa43abSSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC1_BWCAL_MODE0_PREG},
15620cfa43abSSwapnil Jakhade 	{0x0800, SIERRA_CMN_PLLLC1_SS_TIME_STEPSIZE_MODE_PREG}
15630cfa43abSSwapnil Jakhade };
15640cfa43abSSwapnil Jakhade 
15650cfa43abSSwapnil Jakhade static const struct cdns_reg_pairs sgmii_100_no_ssc_plllc1_opt3_ln_regs[] = {
15660cfa43abSSwapnil Jakhade 	{0x688E, SIERRA_DET_STANDEC_D_PREG},
15670cfa43abSSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
15680cfa43abSSwapnil Jakhade 	{0x0FFE, SIERRA_PSC_RX_A0_PREG},
15690cfa43abSSwapnil Jakhade 	{0x0106, SIERRA_PLLCTRL_FBDIV_MODE01_PREG},
15700cfa43abSSwapnil Jakhade 	{0x0013, SIERRA_PLLCTRL_SUBRATE_PREG},
15710cfa43abSSwapnil Jakhade 	{0x0003, SIERRA_PLLCTRL_GEN_A_PREG},
15720cfa43abSSwapnil Jakhade 	{0x0106, SIERRA_PLLCTRL_GEN_D_PREG},
15730cfa43abSSwapnil Jakhade 	{0x5231, SIERRA_PLLCTRL_CPGAIN_MODE_PREG },
15740cfa43abSSwapnil Jakhade 	{0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
15750cfa43abSSwapnil Jakhade 	{0x9702, SIERRA_DRVCTRL_BOOST_PREG},
15760cfa43abSSwapnil Jakhade 	{0x0051, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
15770cfa43abSSwapnil Jakhade 	{0x3C0E, SIERRA_CREQ_CCLKDET_MODE01_PREG},
15780cfa43abSSwapnil Jakhade 	{0x3220, SIERRA_CREQ_FSMCLK_SEL_PREG},
15790cfa43abSSwapnil Jakhade 	{0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
15800cfa43abSSwapnil Jakhade 	{0x0002, SIERRA_DEQ_PHALIGN_CTRL},
15810cfa43abSSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT0},
15820cfa43abSSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT1},
15830cfa43abSSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT2},
15840cfa43abSSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT3},
15850cfa43abSSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
15860cfa43abSSwapnil Jakhade 	{0x0861, SIERRA_DEQ_ALUT0},
15870cfa43abSSwapnil Jakhade 	{0x07E0, SIERRA_DEQ_ALUT1},
15880cfa43abSSwapnil Jakhade 	{0x079E, SIERRA_DEQ_ALUT2},
15890cfa43abSSwapnil Jakhade 	{0x071D, SIERRA_DEQ_ALUT3},
15900cfa43abSSwapnil Jakhade 	{0x03F5, SIERRA_DEQ_DFETAP_CTRL_PREG},
15910cfa43abSSwapnil Jakhade 	{0x0C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
15920cfa43abSSwapnil Jakhade 	{0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
15930cfa43abSSwapnil Jakhade 	{0x1C04, SIERRA_DEQ_TAU_CTRL2_PREG},
15940cfa43abSSwapnil Jakhade 	{0x0033, SIERRA_DEQ_PICTRL_PREG},
15950cfa43abSSwapnil Jakhade 	{0x0000, SIERRA_CPI_OUTBUF_RATESEL_PREG},
15960cfa43abSSwapnil Jakhade 	{0x0B6D, SIERRA_CPI_RESBIAS_BIN_PREG},
15970cfa43abSSwapnil Jakhade 	{0x0102, SIERRA_RXBUFFER_CTLECTRL_PREG},
15980cfa43abSSwapnil Jakhade 	{0x0002, SIERRA_RXBUFFER_RCDFECTRL_PREG}
15990cfa43abSSwapnil Jakhade };
16000cfa43abSSwapnil Jakhade 
16010cfa43abSSwapnil Jakhade static struct cdns_sierra_vals sgmii_100_no_ssc_plllc1_opt3_cmn_vals = {
16020cfa43abSSwapnil Jakhade 	.reg_pairs = sgmii_100_no_ssc_plllc1_opt3_cmn_regs,
16030cfa43abSSwapnil Jakhade 	.num_regs = ARRAY_SIZE(sgmii_100_no_ssc_plllc1_opt3_cmn_regs),
16040cfa43abSSwapnil Jakhade };
16050cfa43abSSwapnil Jakhade 
16060cfa43abSSwapnil Jakhade static struct cdns_sierra_vals sgmii_100_no_ssc_plllc1_opt3_ln_vals = {
16070cfa43abSSwapnil Jakhade 	.reg_pairs = sgmii_100_no_ssc_plllc1_opt3_ln_regs,
16080cfa43abSSwapnil Jakhade 	.num_regs = ARRAY_SIZE(sgmii_100_no_ssc_plllc1_opt3_ln_regs),
16090cfa43abSSwapnil Jakhade };
16100cfa43abSSwapnil Jakhade 
16118a1b82d7SSwapnil Jakhade /* QSGMII PHY PMA lane configuration */
16128a1b82d7SSwapnil Jakhade static struct cdns_reg_pairs qsgmii_phy_pma_ln_regs[] = {
16138a1b82d7SSwapnil Jakhade 	{0x9010, SIERRA_PHY_PMA_XCVR_CTRL}
16148a1b82d7SSwapnil Jakhade };
16158a1b82d7SSwapnil Jakhade 
16168a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals qsgmii_phy_pma_ln_vals = {
16178a1b82d7SSwapnil Jakhade 	.reg_pairs = qsgmii_phy_pma_ln_regs,
16188a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(qsgmii_phy_pma_ln_regs),
16198a1b82d7SSwapnil Jakhade };
16208a1b82d7SSwapnil Jakhade 
16218a1b82d7SSwapnil Jakhade /* QSGMII refclk 100MHz, 20b, opt1, No BW cal, no ssc, PLL LC1 */
16228a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs qsgmii_100_no_ssc_plllc1_cmn_regs[] = {
16238a1b82d7SSwapnil Jakhade 	{0x2085, SIERRA_CMN_PLLLC1_LF_COEFF_MODE0_PREG},
16248a1b82d7SSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC1_BWCAL_MODE0_PREG},
16258a1b82d7SSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC1_SS_TIME_STEPSIZE_MODE_PREG}
16268a1b82d7SSwapnil Jakhade };
16278a1b82d7SSwapnil Jakhade 
16288a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs qsgmii_100_no_ssc_plllc1_ln_regs[] = {
16298a1b82d7SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
16308a1b82d7SSwapnil Jakhade 	{0x0252, SIERRA_DET_STANDEC_E_PREG},
16318a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
16328a1b82d7SSwapnil Jakhade 	{0x0FFE, SIERRA_PSC_RX_A0_PREG},
16338a1b82d7SSwapnil Jakhade 	{0x0011, SIERRA_PLLCTRL_SUBRATE_PREG},
16348a1b82d7SSwapnil Jakhade 	{0x0001, SIERRA_PLLCTRL_GEN_A_PREG},
16358a1b82d7SSwapnil Jakhade 	{0x5233, SIERRA_PLLCTRL_CPGAIN_MODE_PREG},
16368a1b82d7SSwapnil Jakhade 	{0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
16378a1b82d7SSwapnil Jakhade 	{0x0089, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
16388a1b82d7SSwapnil Jakhade 	{0x3C3C, SIERRA_CREQ_CCLKDET_MODE01_PREG},
16398a1b82d7SSwapnil Jakhade 	{0x3222, SIERRA_CREQ_FSMCLK_SEL_PREG},
16408a1b82d7SSwapnil Jakhade 	{0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
16418a1b82d7SSwapnil Jakhade 	{0x8422, SIERRA_CTLELUT_CTRL_PREG},
16428a1b82d7SSwapnil Jakhade 	{0x4111, SIERRA_DFE_ECMP_RATESEL_PREG},
16438a1b82d7SSwapnil Jakhade 	{0x4111, SIERRA_DFE_SMP_RATESEL_PREG},
16448a1b82d7SSwapnil Jakhade 	{0x0002, SIERRA_DEQ_PHALIGN_CTRL},
16458a1b82d7SSwapnil Jakhade 	{0x9595, SIERRA_DEQ_VGATUNE_CTRL_PREG},
16468a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT0},
16478a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT1},
16488a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT2},
16498a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT3},
16508a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
16518a1b82d7SSwapnil Jakhade 	{0x0861, SIERRA_DEQ_ALUT0},
16528a1b82d7SSwapnil Jakhade 	{0x07E0, SIERRA_DEQ_ALUT1},
16538a1b82d7SSwapnil Jakhade 	{0x079E, SIERRA_DEQ_ALUT2},
16548a1b82d7SSwapnil Jakhade 	{0x071D, SIERRA_DEQ_ALUT3},
16558a1b82d7SSwapnil Jakhade 	{0x03F5, SIERRA_DEQ_DFETAP_CTRL_PREG},
16568a1b82d7SSwapnil Jakhade 	{0x0C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
16578a1b82d7SSwapnil Jakhade 	{0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
16588a1b82d7SSwapnil Jakhade 	{0x1C04, SIERRA_DEQ_TAU_CTRL2_PREG},
16598a1b82d7SSwapnil Jakhade 	{0x0033, SIERRA_DEQ_PICTRL_PREG},
16608a1b82d7SSwapnil Jakhade 	{0x0660, SIERRA_CPICAL_TMRVAL_MODE0_PREG},
16618a1b82d7SSwapnil Jakhade 	{0x00D5, SIERRA_CPI_OUTBUF_RATESEL_PREG},
16628a1b82d7SSwapnil Jakhade 	{0x0B6D, SIERRA_CPI_RESBIAS_BIN_PREG},
16638a1b82d7SSwapnil Jakhade 	{0x0102, SIERRA_RXBUFFER_CTLECTRL_PREG},
16648a1b82d7SSwapnil Jakhade 	{0x0002, SIERRA_RXBUFFER_RCDFECTRL_PREG}
16658a1b82d7SSwapnil Jakhade };
16668a1b82d7SSwapnil Jakhade 
16678a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals qsgmii_100_no_ssc_plllc1_cmn_vals = {
16688a1b82d7SSwapnil Jakhade 	.reg_pairs = qsgmii_100_no_ssc_plllc1_cmn_regs,
16698a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_plllc1_cmn_regs),
16708a1b82d7SSwapnil Jakhade };
16718a1b82d7SSwapnil Jakhade 
16728a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals qsgmii_100_no_ssc_plllc1_ln_vals = {
16738a1b82d7SSwapnil Jakhade 	.reg_pairs = qsgmii_100_no_ssc_plllc1_ln_regs,
16748a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(qsgmii_100_no_ssc_plllc1_ln_regs),
16758a1b82d7SSwapnil Jakhade };
16768a1b82d7SSwapnil Jakhade 
1677fa105172SSwapnil Jakhade /* PCIE PHY PCS common configuration */
1678fa105172SSwapnil Jakhade static struct cdns_reg_pairs pcie_phy_pcs_cmn_regs[] = {
1679fa105172SSwapnil Jakhade 	{0x0430, SIERRA_PHY_PIPE_CMN_CTRL1}
1680fa105172SSwapnil Jakhade };
1681fa105172SSwapnil Jakhade 
1682fa105172SSwapnil Jakhade static struct cdns_sierra_vals pcie_phy_pcs_cmn_vals = {
1683fa105172SSwapnil Jakhade 	.reg_pairs = pcie_phy_pcs_cmn_regs,
1684fa105172SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(pcie_phy_pcs_cmn_regs),
1685fa105172SSwapnil Jakhade };
1686fa105172SSwapnil Jakhade 
16878a1b82d7SSwapnil Jakhade /* refclk100MHz_32b_PCIe_cmn_pll_no_ssc, pcie_links_using_plllc, pipe_bw_3 */
16888a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs pcie_100_no_ssc_plllc_cmn_regs[] = {
16898a1b82d7SSwapnil Jakhade 	{0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
16908a1b82d7SSwapnil Jakhade 	{0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
16918a1b82d7SSwapnil Jakhade 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
16928a1b82d7SSwapnil Jakhade 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG}
16938a1b82d7SSwapnil Jakhade };
16948a1b82d7SSwapnil Jakhade 
16958a1b82d7SSwapnil Jakhade /*
16968a1b82d7SSwapnil Jakhade  * refclk100MHz_32b_PCIe_ln_no_ssc, multilink, using_plllc,
16978a1b82d7SSwapnil Jakhade  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
16988a1b82d7SSwapnil Jakhade  */
16998a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs ml_pcie_100_no_ssc_ln_regs[] = {
17008a1b82d7SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
17018a1b82d7SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
17028a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A3_PREG},
17038a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A4_PREG},
17048a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
17058a1b82d7SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
17068a1b82d7SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
17078a1b82d7SSwapnil Jakhade 	{0x8055, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
17088a1b82d7SSwapnil Jakhade 	{0x80BB, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
17098a1b82d7SSwapnil Jakhade 	{0x8351, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
17108a1b82d7SSwapnil Jakhade 	{0x8349, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
17118a1b82d7SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
17128a1b82d7SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
17138a1b82d7SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
17148a1b82d7SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
17158a1b82d7SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
17168a1b82d7SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
17178a1b82d7SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
17188a1b82d7SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
17198a1b82d7SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
17208a1b82d7SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
17218a1b82d7SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
17228a1b82d7SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
17238a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
17248a1b82d7SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
17258a1b82d7SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
17268a1b82d7SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
17278a1b82d7SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
17288a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
17298a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
17308a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
17318a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
17328a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
17338a1b82d7SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
17348a1b82d7SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
17358a1b82d7SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
17368a1b82d7SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
17378a1b82d7SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
17388a1b82d7SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
17398a1b82d7SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
17408a1b82d7SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
17418a1b82d7SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
17428a1b82d7SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
17438a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
17448a1b82d7SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
17458a1b82d7SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
17468a1b82d7SSwapnil Jakhade };
17478a1b82d7SSwapnil Jakhade 
17488a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_no_ssc_plllc_cmn_vals = {
17498a1b82d7SSwapnil Jakhade 	.reg_pairs = pcie_100_no_ssc_plllc_cmn_regs,
17508a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(pcie_100_no_ssc_plllc_cmn_regs),
17518a1b82d7SSwapnil Jakhade };
17528a1b82d7SSwapnil Jakhade 
17538a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals ml_pcie_100_no_ssc_ln_vals = {
17548a1b82d7SSwapnil Jakhade 	.reg_pairs = ml_pcie_100_no_ssc_ln_regs,
17558a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(ml_pcie_100_no_ssc_ln_regs),
17568a1b82d7SSwapnil Jakhade };
17578a1b82d7SSwapnil Jakhade 
1758e72659b6SSwapnil Jakhade /*
1759e72659b6SSwapnil Jakhade  * TI J721E:
1760e72659b6SSwapnil Jakhade  * refclk100MHz_32b_PCIe_ln_no_ssc, multilink, using_plllc,
1761e72659b6SSwapnil Jakhade  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1762e72659b6SSwapnil Jakhade  */
1763e72659b6SSwapnil Jakhade static const struct cdns_reg_pairs ti_ml_pcie_100_no_ssc_ln_regs[] = {
1764e72659b6SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
1765e72659b6SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1766e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A3_PREG},
1767e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A4_PREG},
1768e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
1769e72659b6SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
1770e72659b6SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1771e72659b6SSwapnil Jakhade 	{0x8055, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1772e72659b6SSwapnil Jakhade 	{0x80BB, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1773e72659b6SSwapnil Jakhade 	{0x8351, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1774e72659b6SSwapnil Jakhade 	{0x8349, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1775e72659b6SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1776e72659b6SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
1777e72659b6SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1778e72659b6SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1779e72659b6SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1780e72659b6SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1781e72659b6SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1782e72659b6SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1783e72659b6SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
1784e72659b6SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
1785e72659b6SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
1786e72659b6SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
1787e72659b6SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
1788e72659b6SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
1789e72659b6SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
1790e72659b6SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
1791e72659b6SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
1792e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
1793e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
1794e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
1795e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
1796e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
1797e72659b6SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
1798e72659b6SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
1799e72659b6SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1800e72659b6SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1801e72659b6SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1802e72659b6SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1803e72659b6SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1804e72659b6SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
1805e72659b6SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
1806e72659b6SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
1807e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
1808e72659b6SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
1809e72659b6SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG},
1810e72659b6SSwapnil Jakhade 	{0x0002, SIERRA_TX_RCVDET_OVRD_PREG}
1811e72659b6SSwapnil Jakhade };
1812e72659b6SSwapnil Jakhade 
1813e72659b6SSwapnil Jakhade static struct cdns_sierra_vals ti_ml_pcie_100_no_ssc_ln_vals = {
1814e72659b6SSwapnil Jakhade 	.reg_pairs = ti_ml_pcie_100_no_ssc_ln_regs,
1815e72659b6SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(ti_ml_pcie_100_no_ssc_ln_regs),
1816e72659b6SSwapnil Jakhade };
1817e72659b6SSwapnil Jakhade 
18188a1b82d7SSwapnil Jakhade /* refclk100MHz_32b_PCIe_cmn_pll_int_ssc, pcie_links_using_plllc, pipe_bw_3 */
18198a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs pcie_100_int_ssc_plllc_cmn_regs[] = {
18208a1b82d7SSwapnil Jakhade 	{0x000E, SIERRA_CMN_PLLLC_MODE_PREG},
18218a1b82d7SSwapnil Jakhade 	{0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
18228a1b82d7SSwapnil Jakhade 	{0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
18238a1b82d7SSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
18248a1b82d7SSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
18258a1b82d7SSwapnil Jakhade 	{0x0581, SIERRA_CMN_PLLLC_DSMCORR_PREG},
18268a1b82d7SSwapnil Jakhade 	{0x7F80, SIERRA_CMN_PLLLC_SS_PREG},
18278a1b82d7SSwapnil Jakhade 	{0x0041, SIERRA_CMN_PLLLC_SS_AMP_STEP_SIZE_PREG},
18288a1b82d7SSwapnil Jakhade 	{0x0464, SIERRA_CMN_PLLLC_SSTWOPT_PREG},
18298a1b82d7SSwapnil Jakhade 	{0x0D0D, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG},
18308a1b82d7SSwapnil Jakhade 	{0x0060, SIERRA_CMN_PLLLC_LOCK_DELAY_CTRL_PREG}
18318a1b82d7SSwapnil Jakhade };
18328a1b82d7SSwapnil Jakhade 
18338a1b82d7SSwapnil Jakhade /*
18348a1b82d7SSwapnil Jakhade  * refclk100MHz_32b_PCIe_ln_int_ssc, multilink, using_plllc,
18358a1b82d7SSwapnil Jakhade  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
18368a1b82d7SSwapnil Jakhade  */
18378a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs ml_pcie_100_int_ssc_ln_regs[] = {
18388a1b82d7SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
18398a1b82d7SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
18408a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A3_PREG},
18418a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A4_PREG},
18428a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
18438a1b82d7SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
18448a1b82d7SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
18458a1b82d7SSwapnil Jakhade 	{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
18468a1b82d7SSwapnil Jakhade 	{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
18478a1b82d7SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
18488a1b82d7SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
18498a1b82d7SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
18508a1b82d7SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
18518a1b82d7SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
18528a1b82d7SSwapnil Jakhade 	{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
18538a1b82d7SSwapnil Jakhade 	{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
18548a1b82d7SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
18558a1b82d7SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
18568a1b82d7SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
18578a1b82d7SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
18588a1b82d7SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
18598a1b82d7SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
18608a1b82d7SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
18618a1b82d7SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
18628a1b82d7SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
18638a1b82d7SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
18648a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
18658a1b82d7SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
18668a1b82d7SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
18678a1b82d7SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
18688a1b82d7SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
18698a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
18708a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
18718a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
18728a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
18738a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
18748a1b82d7SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
18758a1b82d7SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
18768a1b82d7SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
18778a1b82d7SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
18788a1b82d7SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
18798a1b82d7SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
18808a1b82d7SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
18818a1b82d7SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
18828a1b82d7SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
18838a1b82d7SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
18848a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
18858a1b82d7SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
18868a1b82d7SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
18878a1b82d7SSwapnil Jakhade };
18888a1b82d7SSwapnil Jakhade 
18898a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_int_ssc_plllc_cmn_vals = {
18908a1b82d7SSwapnil Jakhade 	.reg_pairs = pcie_100_int_ssc_plllc_cmn_regs,
18918a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(pcie_100_int_ssc_plllc_cmn_regs),
18928a1b82d7SSwapnil Jakhade };
18938a1b82d7SSwapnil Jakhade 
18948a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals ml_pcie_100_int_ssc_ln_vals = {
18958a1b82d7SSwapnil Jakhade 	.reg_pairs = ml_pcie_100_int_ssc_ln_regs,
18968a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(ml_pcie_100_int_ssc_ln_regs),
18978a1b82d7SSwapnil Jakhade };
18988a1b82d7SSwapnil Jakhade 
1899e72659b6SSwapnil Jakhade /*
1900e72659b6SSwapnil Jakhade  * TI J721E:
1901e72659b6SSwapnil Jakhade  * refclk100MHz_32b_PCIe_ln_int_ssc, multilink, using_plllc,
1902e72659b6SSwapnil Jakhade  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
1903e72659b6SSwapnil Jakhade  */
1904e72659b6SSwapnil Jakhade static const struct cdns_reg_pairs ti_ml_pcie_100_int_ssc_ln_regs[] = {
1905e72659b6SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
1906e72659b6SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
1907e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A3_PREG},
1908e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A4_PREG},
1909e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
1910e72659b6SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
1911e72659b6SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
1912e72659b6SSwapnil Jakhade 	{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
1913e72659b6SSwapnil Jakhade 	{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
1914e72659b6SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
1915e72659b6SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
1916e72659b6SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
1917e72659b6SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
1918e72659b6SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
1919e72659b6SSwapnil Jakhade 	{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
1920e72659b6SSwapnil Jakhade 	{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
1921e72659b6SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
1922e72659b6SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
1923e72659b6SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
1924e72659b6SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
1925e72659b6SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
1926e72659b6SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
1927e72659b6SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
1928e72659b6SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
1929e72659b6SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
1930e72659b6SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
1931e72659b6SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
1932e72659b6SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
1933e72659b6SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
1934e72659b6SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
1935e72659b6SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
1936e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
1937e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
1938e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
1939e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
1940e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
1941e72659b6SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
1942e72659b6SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
1943e72659b6SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
1944e72659b6SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
1945e72659b6SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
1946e72659b6SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
1947e72659b6SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
1948e72659b6SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
1949e72659b6SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
1950e72659b6SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
1951e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
1952e72659b6SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
1953e72659b6SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG},
1954e72659b6SSwapnil Jakhade 	{0x0002, SIERRA_TX_RCVDET_OVRD_PREG}
1955e72659b6SSwapnil Jakhade };
1956e72659b6SSwapnil Jakhade 
1957e72659b6SSwapnil Jakhade static struct cdns_sierra_vals ti_ml_pcie_100_int_ssc_ln_vals = {
1958e72659b6SSwapnil Jakhade 	.reg_pairs = ti_ml_pcie_100_int_ssc_ln_regs,
1959e72659b6SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(ti_ml_pcie_100_int_ssc_ln_regs),
1960e72659b6SSwapnil Jakhade };
1961e72659b6SSwapnil Jakhade 
19628a1b82d7SSwapnil Jakhade /* refclk100MHz_32b_PCIe_cmn_pll_ext_ssc, pcie_links_using_plllc, pipe_bw_3 */
19638a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs pcie_100_ext_ssc_plllc_cmn_regs[] = {
19648a1b82d7SSwapnil Jakhade 	{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
19658a1b82d7SSwapnil Jakhade 	{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
19668a1b82d7SSwapnil Jakhade 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
19678a1b82d7SSwapnil Jakhade 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
19688a1b82d7SSwapnil Jakhade 	{0x1B1B, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
19698a1b82d7SSwapnil Jakhade };
19708a1b82d7SSwapnil Jakhade 
19718a1b82d7SSwapnil Jakhade /*
19728a1b82d7SSwapnil Jakhade  * refclk100MHz_32b_PCIe_ln_ext_ssc, multilink, using_plllc,
19738a1b82d7SSwapnil Jakhade  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
19748a1b82d7SSwapnil Jakhade  */
19758a1b82d7SSwapnil Jakhade static const struct cdns_reg_pairs ml_pcie_100_ext_ssc_ln_regs[] = {
19768a1b82d7SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
19778a1b82d7SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
19788a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A3_PREG},
19798a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A4_PREG},
19808a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
19818a1b82d7SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
19828a1b82d7SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
19838a1b82d7SSwapnil Jakhade 	{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
19848a1b82d7SSwapnil Jakhade 	{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
19858a1b82d7SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
19868a1b82d7SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
19878a1b82d7SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
19888a1b82d7SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
19898a1b82d7SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
19908a1b82d7SSwapnil Jakhade 	{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
19918a1b82d7SSwapnil Jakhade 	{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
19928a1b82d7SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
19938a1b82d7SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
19948a1b82d7SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
19958a1b82d7SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
19968a1b82d7SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
19978a1b82d7SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
19988a1b82d7SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
19998a1b82d7SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
20008a1b82d7SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
20018a1b82d7SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
20028a1b82d7SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
20038a1b82d7SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
20048a1b82d7SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
20058a1b82d7SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
20068a1b82d7SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
20078a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
20088a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
20098a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
20108a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
20118a1b82d7SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
20128a1b82d7SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
20138a1b82d7SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
20148a1b82d7SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
20158a1b82d7SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
20168a1b82d7SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
20178a1b82d7SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
20188a1b82d7SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
20198a1b82d7SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
20208a1b82d7SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
20218a1b82d7SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
20228a1b82d7SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
20238a1b82d7SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
20248a1b82d7SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
20258a1b82d7SSwapnil Jakhade };
20268a1b82d7SSwapnil Jakhade 
20278a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_ext_ssc_plllc_cmn_vals = {
20288a1b82d7SSwapnil Jakhade 	.reg_pairs = pcie_100_ext_ssc_plllc_cmn_regs,
20298a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(pcie_100_ext_ssc_plllc_cmn_regs),
20308a1b82d7SSwapnil Jakhade };
20318a1b82d7SSwapnil Jakhade 
20328a1b82d7SSwapnil Jakhade static struct cdns_sierra_vals ml_pcie_100_ext_ssc_ln_vals = {
20338a1b82d7SSwapnil Jakhade 	.reg_pairs = ml_pcie_100_ext_ssc_ln_regs,
20348a1b82d7SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(ml_pcie_100_ext_ssc_ln_regs),
20358a1b82d7SSwapnil Jakhade };
20368a1b82d7SSwapnil Jakhade 
2037e72659b6SSwapnil Jakhade /*
2038e72659b6SSwapnil Jakhade  * TI J721E:
2039e72659b6SSwapnil Jakhade  * refclk100MHz_32b_PCIe_ln_ext_ssc, multilink, using_plllc,
2040e72659b6SSwapnil Jakhade  * cmn_pllcy_anaclk0_1Ghz, xcvr_pllclk_fullrt_500mhz
2041e72659b6SSwapnil Jakhade  */
2042e72659b6SSwapnil Jakhade static const struct cdns_reg_pairs ti_ml_pcie_100_ext_ssc_ln_regs[] = {
2043e72659b6SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
2044e72659b6SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
2045e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A3_PREG},
2046e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_A4_PREG},
2047e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_PSC_LN_IDLE_PREG},
2048e72659b6SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
2049e72659b6SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
2050e72659b6SSwapnil Jakhade 	{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
2051e72659b6SSwapnil Jakhade 	{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
2052e72659b6SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
2053e72659b6SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2054e72659b6SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2055e72659b6SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
2056e72659b6SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
2057e72659b6SSwapnil Jakhade 	{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
2058e72659b6SSwapnil Jakhade 	{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
2059e72659b6SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2060e72659b6SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2061e72659b6SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2062e72659b6SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2063e72659b6SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
2064e72659b6SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
2065e72659b6SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
2066e72659b6SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
2067e72659b6SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
2068e72659b6SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
2069e72659b6SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
2070e72659b6SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
2071e72659b6SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
2072e72659b6SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
2073e72659b6SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
2074e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
2075e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
2076e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
2077e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
2078e72659b6SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
2079e72659b6SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
2080e72659b6SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
2081e72659b6SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
2082e72659b6SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2083e72659b6SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
2084e72659b6SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
2085e72659b6SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
2086e72659b6SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
2087e72659b6SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
2088e72659b6SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
2089e72659b6SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
2090e72659b6SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2091e72659b6SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG},
2092e72659b6SSwapnil Jakhade 	{0x0002, SIERRA_TX_RCVDET_OVRD_PREG}
2093e72659b6SSwapnil Jakhade };
2094e72659b6SSwapnil Jakhade 
2095e72659b6SSwapnil Jakhade static struct cdns_sierra_vals ti_ml_pcie_100_ext_ssc_ln_vals = {
2096e72659b6SSwapnil Jakhade 	.reg_pairs = ti_ml_pcie_100_ext_ssc_ln_regs,
2097e72659b6SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(ti_ml_pcie_100_ext_ssc_ln_regs),
2098e72659b6SSwapnil Jakhade };
2099e72659b6SSwapnil Jakhade 
21007a5ad9b4SSwapnil Jakhade /* refclk100MHz_32b_PCIe_cmn_pll_no_ssc */
21017a5ad9b4SSwapnil Jakhade static const struct cdns_reg_pairs cdns_pcie_cmn_regs_no_ssc[] = {
21027a5ad9b4SSwapnil Jakhade 	{0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
21037a5ad9b4SSwapnil Jakhade 	{0x2105, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
21047a5ad9b4SSwapnil Jakhade 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
21057a5ad9b4SSwapnil Jakhade 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG}
21067a5ad9b4SSwapnil Jakhade };
21077a5ad9b4SSwapnil Jakhade 
21087a5ad9b4SSwapnil Jakhade /* refclk100MHz_32b_PCIe_ln_no_ssc */
21097a5ad9b4SSwapnil Jakhade static const struct cdns_reg_pairs cdns_pcie_ln_regs_no_ssc[] = {
21107a5ad9b4SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
21117a5ad9b4SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
21127a5ad9b4SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
21137a5ad9b4SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
21147a5ad9b4SSwapnil Jakhade 	{0x8055, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
21157a5ad9b4SSwapnil Jakhade 	{0x80BB, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
21167a5ad9b4SSwapnil Jakhade 	{0x8351, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
21177a5ad9b4SSwapnil Jakhade 	{0x8349, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
21187a5ad9b4SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
21197a5ad9b4SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
21207a5ad9b4SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
21217a5ad9b4SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
21227a5ad9b4SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
21237a5ad9b4SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
21247a5ad9b4SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
21257a5ad9b4SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
21267a5ad9b4SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
21277a5ad9b4SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
21287a5ad9b4SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
21297a5ad9b4SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
21307a5ad9b4SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
21317a5ad9b4SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
21327a5ad9b4SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
21337a5ad9b4SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
21347a5ad9b4SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
21357a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
21367a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
21377a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
21387a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
21397a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
21407a5ad9b4SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
21417a5ad9b4SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
21427a5ad9b4SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
21437a5ad9b4SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
21447a5ad9b4SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
21457a5ad9b4SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
21467a5ad9b4SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
21477a5ad9b4SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
21487a5ad9b4SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
21497a5ad9b4SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
21507a5ad9b4SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
21517a5ad9b4SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
21527a5ad9b4SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
21537a5ad9b4SSwapnil Jakhade };
21547a5ad9b4SSwapnil Jakhade 
21557a5ad9b4SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_no_ssc_cmn_vals = {
21567a5ad9b4SSwapnil Jakhade 	.reg_pairs = cdns_pcie_cmn_regs_no_ssc,
21577a5ad9b4SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_pcie_cmn_regs_no_ssc),
21587a5ad9b4SSwapnil Jakhade };
21597a5ad9b4SSwapnil Jakhade 
21607a5ad9b4SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_no_ssc_ln_vals = {
21617a5ad9b4SSwapnil Jakhade 	.reg_pairs = cdns_pcie_ln_regs_no_ssc,
21627a5ad9b4SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_pcie_ln_regs_no_ssc),
21637a5ad9b4SSwapnil Jakhade };
21647a5ad9b4SSwapnil Jakhade 
21657a5ad9b4SSwapnil Jakhade /* refclk100MHz_32b_PCIe_cmn_pll_int_ssc */
21667a5ad9b4SSwapnil Jakhade static const struct cdns_reg_pairs cdns_pcie_cmn_regs_int_ssc[] = {
21677a5ad9b4SSwapnil Jakhade 	{0x000E, SIERRA_CMN_PLLLC_MODE_PREG},
21687a5ad9b4SSwapnil Jakhade 	{0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
21697a5ad9b4SSwapnil Jakhade 	{0x4006, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
21707a5ad9b4SSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
21717a5ad9b4SSwapnil Jakhade 	{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
21727a5ad9b4SSwapnil Jakhade 	{0x0581, SIERRA_CMN_PLLLC_DSMCORR_PREG},
21737a5ad9b4SSwapnil Jakhade 	{0x7F80, SIERRA_CMN_PLLLC_SS_PREG},
21747a5ad9b4SSwapnil Jakhade 	{0x0041, SIERRA_CMN_PLLLC_SS_AMP_STEP_SIZE_PREG},
21757a5ad9b4SSwapnil Jakhade 	{0x0464, SIERRA_CMN_PLLLC_SSTWOPT_PREG},
21767a5ad9b4SSwapnil Jakhade 	{0x0D0D, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG},
21777a5ad9b4SSwapnil Jakhade 	{0x0060, SIERRA_CMN_PLLLC_LOCK_DELAY_CTRL_PREG}
21787a5ad9b4SSwapnil Jakhade };
21797a5ad9b4SSwapnil Jakhade 
21807a5ad9b4SSwapnil Jakhade /* refclk100MHz_32b_PCIe_ln_int_ssc */
21817a5ad9b4SSwapnil Jakhade static const struct cdns_reg_pairs cdns_pcie_ln_regs_int_ssc[] = {
21827a5ad9b4SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
21837a5ad9b4SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
21847a5ad9b4SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
21857a5ad9b4SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
21867a5ad9b4SSwapnil Jakhade 	{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
21877a5ad9b4SSwapnil Jakhade 	{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
21887a5ad9b4SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
21897a5ad9b4SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
21907a5ad9b4SSwapnil Jakhade 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
21917a5ad9b4SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
21927a5ad9b4SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
21937a5ad9b4SSwapnil Jakhade 	{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
21947a5ad9b4SSwapnil Jakhade 	{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
21957a5ad9b4SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
21967a5ad9b4SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
21977a5ad9b4SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
21987a5ad9b4SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
21997a5ad9b4SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
22007a5ad9b4SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
22017a5ad9b4SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
22027a5ad9b4SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
22037a5ad9b4SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
22047a5ad9b4SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
22057a5ad9b4SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
22067a5ad9b4SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
22077a5ad9b4SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
22087a5ad9b4SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
22097a5ad9b4SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
22107a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
22117a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
22127a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
22137a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
22147a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
22157a5ad9b4SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
22167a5ad9b4SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
22177a5ad9b4SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
22187a5ad9b4SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
22197a5ad9b4SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
22207a5ad9b4SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
22217a5ad9b4SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
22227a5ad9b4SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
22237a5ad9b4SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
22247a5ad9b4SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
22257a5ad9b4SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
22267a5ad9b4SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
22277a5ad9b4SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
22287a5ad9b4SSwapnil Jakhade };
22297a5ad9b4SSwapnil Jakhade 
22307a5ad9b4SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_int_ssc_cmn_vals = {
22317a5ad9b4SSwapnil Jakhade 	.reg_pairs = cdns_pcie_cmn_regs_int_ssc,
22327a5ad9b4SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_pcie_cmn_regs_int_ssc),
22337a5ad9b4SSwapnil Jakhade };
22347a5ad9b4SSwapnil Jakhade 
22357a5ad9b4SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_int_ssc_ln_vals = {
22367a5ad9b4SSwapnil Jakhade 	.reg_pairs = cdns_pcie_ln_regs_int_ssc,
22377a5ad9b4SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_pcie_ln_regs_int_ssc),
22387a5ad9b4SSwapnil Jakhade };
22397a5ad9b4SSwapnil Jakhade 
2240871002d7SAnil Varughese /* refclk100MHz_32b_PCIe_cmn_pll_ext_ssc */
22413cfb0e8eSRikard Falkeborn static const struct cdns_reg_pairs cdns_pcie_cmn_regs_ext_ssc[] = {
2242871002d7SAnil Varughese 	{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
2243871002d7SAnil Varughese 	{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2244871002d7SAnil Varughese 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE1_PREG},
2245871002d7SAnil Varughese 	{0x8A06, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
2246871002d7SAnil Varughese 	{0x1B1B, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
2247871002d7SAnil Varughese };
2248871002d7SAnil Varughese 
2249871002d7SAnil Varughese /* refclk100MHz_32b_PCIe_ln_ext_ssc */
22503cfb0e8eSRikard Falkeborn static const struct cdns_reg_pairs cdns_pcie_ln_regs_ext_ssc[] = {
22517a5ad9b4SSwapnil Jakhade 	{0xFC08, SIERRA_DET_STANDEC_A_PREG},
22527a5ad9b4SSwapnil Jakhade 	{0x001D, SIERRA_PSM_A3IN_TMR_PREG},
22537a5ad9b4SSwapnil Jakhade 	{0x1555, SIERRA_DFE_BIASTRIM_PREG},
22547a5ad9b4SSwapnil Jakhade 	{0x9703, SIERRA_DRVCTRL_BOOST_PREG},
2255871002d7SAnil Varughese 	{0x813E, SIERRA_CLKPATHCTRL_TMR_PREG},
2256871002d7SAnil Varughese 	{0x8047, SIERRA_RX_CREQ_FLTR_A_MODE3_PREG},
2257871002d7SAnil Varughese 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE2_PREG},
2258871002d7SAnil Varughese 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
2259871002d7SAnil Varughese 	{0x808F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
22607a5ad9b4SSwapnil Jakhade 	{0x0002, SIERRA_CREQ_DCBIASATTEN_OVR_PREG},
22617a5ad9b4SSwapnil Jakhade 	{0x9800, SIERRA_RX_CTLE_CAL_PREG},
2262871002d7SAnil Varughese 	{0x033C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
22637a5ad9b4SSwapnil Jakhade 	{0x44CC, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
22647a5ad9b4SSwapnil Jakhade 	{0x5624, SIERRA_DEQ_CONCUR_CTRL2_PREG},
22657a5ad9b4SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
22667a5ad9b4SSwapnil Jakhade 	{0x00FF, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
22677a5ad9b4SSwapnil Jakhade 	{0x4C4C, SIERRA_DEQ_ERRCMP_CTRL_PREG},
22687a5ad9b4SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_OFFSET_CTRL_PREG},
22697a5ad9b4SSwapnil Jakhade 	{0x02FA, SIERRA_DEQ_GAIN_CTRL_PREG},
22707a5ad9b4SSwapnil Jakhade 	{0x0041, SIERRA_DEQ_GLUT0},
22717a5ad9b4SSwapnil Jakhade 	{0x0082, SIERRA_DEQ_GLUT1},
22727a5ad9b4SSwapnil Jakhade 	{0x00C3, SIERRA_DEQ_GLUT2},
22737a5ad9b4SSwapnil Jakhade 	{0x0145, SIERRA_DEQ_GLUT3},
22747a5ad9b4SSwapnil Jakhade 	{0x0186, SIERRA_DEQ_GLUT4},
22757a5ad9b4SSwapnil Jakhade 	{0x09E7, SIERRA_DEQ_ALUT0},
22767a5ad9b4SSwapnil Jakhade 	{0x09A6, SIERRA_DEQ_ALUT1},
22777a5ad9b4SSwapnil Jakhade 	{0x0965, SIERRA_DEQ_ALUT2},
22787a5ad9b4SSwapnil Jakhade 	{0x08E3, SIERRA_DEQ_ALUT3},
22797a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP0},
22807a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP1},
22817a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP2},
22827a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP3},
22837a5ad9b4SSwapnil Jakhade 	{0x00FA, SIERRA_DEQ_DFETAP4},
22847a5ad9b4SSwapnil Jakhade 	{0x000F, SIERRA_DEQ_PRECUR_PREG},
22857a5ad9b4SSwapnil Jakhade 	{0x0280, SIERRA_DEQ_POSTCUR_PREG},
22867a5ad9b4SSwapnil Jakhade 	{0x8F00, SIERRA_DEQ_POSTCUR_DECR_PREG},
22877a5ad9b4SSwapnil Jakhade 	{0x3C0F, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
22887a5ad9b4SSwapnil Jakhade 	{0x1C0C, SIERRA_DEQ_TAU_CTRL2_PREG},
22897a5ad9b4SSwapnil Jakhade 	{0x0100, SIERRA_DEQ_TAU_CTRL3_PREG},
22907a5ad9b4SSwapnil Jakhade 	{0x5E82, SIERRA_DEQ_OPENEYE_CTRL_PREG},
22917a5ad9b4SSwapnil Jakhade 	{0x002B, SIERRA_CPI_TRIM_PREG},
22927a5ad9b4SSwapnil Jakhade 	{0x0003, SIERRA_EPI_CTRL_PREG},
22937a5ad9b4SSwapnil Jakhade 	{0x803F, SIERRA_SDFILT_H2L_A_PREG},
22947a5ad9b4SSwapnil Jakhade 	{0x0004, SIERRA_RXBUFFER_CTLECTRL_PREG},
22957a5ad9b4SSwapnil Jakhade 	{0x2010, SIERRA_RXBUFFER_RCDFECTRL_PREG},
22967a5ad9b4SSwapnil Jakhade 	{0x4432, SIERRA_RXBUFFER_DFECTRL_PREG}
2297871002d7SAnil Varughese };
2298871002d7SAnil Varughese 
2299078e9e92SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_ext_ssc_cmn_vals = {
2300078e9e92SSwapnil Jakhade 	.reg_pairs = cdns_pcie_cmn_regs_ext_ssc,
2301078e9e92SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_pcie_cmn_regs_ext_ssc),
2302078e9e92SSwapnil Jakhade };
2303078e9e92SSwapnil Jakhade 
2304078e9e92SSwapnil Jakhade static struct cdns_sierra_vals pcie_100_ext_ssc_ln_vals = {
2305078e9e92SSwapnil Jakhade 	.reg_pairs = cdns_pcie_ln_regs_ext_ssc,
2306078e9e92SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_pcie_ln_regs_ext_ssc),
2307078e9e92SSwapnil Jakhade };
2308078e9e92SSwapnil Jakhade 
2309871002d7SAnil Varughese /* refclk100MHz_20b_USB_cmn_pll_ext_ssc */
23103cfb0e8eSRikard Falkeborn static const struct cdns_reg_pairs cdns_usb_cmn_regs_ext_ssc[] = {
2311871002d7SAnil Varughese 	{0x2085, SIERRA_CMN_PLLLC_LF_COEFF_MODE1_PREG},
2312871002d7SAnil Varughese 	{0x2085, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2313871002d7SAnil Varughese 	{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
2314871002d7SAnil Varughese 	{0x0000, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG}
2315871002d7SAnil Varughese };
2316871002d7SAnil Varughese 
2317871002d7SAnil Varughese /* refclk100MHz_20b_USB_ln_ext_ssc */
23183cfb0e8eSRikard Falkeborn static const struct cdns_reg_pairs cdns_usb_ln_regs_ext_ssc[] = {
2319aead5fd6SKishon Vijay Abraham I 	{0xFE0A, SIERRA_DET_STANDEC_A_PREG},
2320aead5fd6SKishon Vijay Abraham I 	{0x000F, SIERRA_DET_STANDEC_B_PREG},
23212bcf14caSSanket Parmar 	{0x55A5, SIERRA_DET_STANDEC_C_PREG},
2322871002d7SAnil Varughese 	{0x69ad, SIERRA_DET_STANDEC_D_PREG},
2323aead5fd6SKishon Vijay Abraham I 	{0x0241, SIERRA_DET_STANDEC_E_PREG},
23242bcf14caSSanket Parmar 	{0x0110, SIERRA_PSM_LANECAL_DLY_A1_RESETS_PREG},
2325871002d7SAnil Varughese 	{0x0014, SIERRA_PSM_A0IN_TMR_PREG},
2326aead5fd6SKishon Vijay Abraham I 	{0xCF00, SIERRA_PSM_DIAG_PREG},
2327aead5fd6SKishon Vijay Abraham I 	{0x001F, SIERRA_PSC_TX_A0_PREG},
2328aead5fd6SKishon Vijay Abraham I 	{0x0007, SIERRA_PSC_TX_A1_PREG},
2329aead5fd6SKishon Vijay Abraham I 	{0x0003, SIERRA_PSC_TX_A2_PREG},
2330aead5fd6SKishon Vijay Abraham I 	{0x0003, SIERRA_PSC_TX_A3_PREG},
2331aead5fd6SKishon Vijay Abraham I 	{0x0FFF, SIERRA_PSC_RX_A0_PREG},
23322bcf14caSSanket Parmar 	{0x0003, SIERRA_PSC_RX_A1_PREG},
2333aead5fd6SKishon Vijay Abraham I 	{0x0003, SIERRA_PSC_RX_A2_PREG},
2334aead5fd6SKishon Vijay Abraham I 	{0x0001, SIERRA_PSC_RX_A3_PREG},
2335aead5fd6SKishon Vijay Abraham I 	{0x0001, SIERRA_PLLCTRL_SUBRATE_PREG},
2336aead5fd6SKishon Vijay Abraham I 	{0x0406, SIERRA_PLLCTRL_GEN_D_PREG},
2337871002d7SAnil Varughese 	{0x5233, SIERRA_PLLCTRL_CPGAIN_MODE_PREG},
2338871002d7SAnil Varughese 	{0x00CA, SIERRA_CLKPATH_BIASTRIM_PREG},
2339871002d7SAnil Varughese 	{0x2512, SIERRA_DFE_BIASTRIM_PREG},
2340aead5fd6SKishon Vijay Abraham I 	{0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
23412bcf14caSSanket Parmar 	{0x823E, SIERRA_CLKPATHCTRL_TMR_PREG},
23422bcf14caSSanket Parmar 	{0x078F, SIERRA_RX_CREQ_FLTR_A_MODE1_PREG},
23432bcf14caSSanket Parmar 	{0x078F, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2344aead5fd6SKishon Vijay Abraham I 	{0x7B3C, SIERRA_CREQ_CCLKDET_MODE01_PREG},
23452bcf14caSSanket Parmar 	{0x023C, SIERRA_RX_CTLE_MAINTENANCE_PREG},
2346aead5fd6SKishon Vijay Abraham I 	{0x3232, SIERRA_CREQ_FSMCLK_SEL_PREG},
2347871002d7SAnil Varughese 	{0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
23482bcf14caSSanket Parmar 	{0x0000, SIERRA_CREQ_SPARE_PREG},
2349871002d7SAnil Varughese 	{0xCC44, SIERRA_CREQ_EQ_OPEN_EYE_THRESH_PREG},
23502bcf14caSSanket Parmar 	{0x8452, SIERRA_CTLELUT_CTRL_PREG},
23512bcf14caSSanket Parmar 	{0x4121, SIERRA_DFE_ECMP_RATESEL_PREG},
23522bcf14caSSanket Parmar 	{0x4121, SIERRA_DFE_SMP_RATESEL_PREG},
23532bcf14caSSanket Parmar 	{0x0003, SIERRA_DEQ_PHALIGN_CTRL},
2354871002d7SAnil Varughese 	{0x3200, SIERRA_DEQ_CONCUR_CTRL1_PREG},
2355871002d7SAnil Varughese 	{0x5064, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2356871002d7SAnil Varughese 	{0x0030, SIERRA_DEQ_EPIPWR_CTRL2_PREG},
2357871002d7SAnil Varughese 	{0x0048, SIERRA_DEQ_FAST_MAINT_CYCLES_PREG},
2358871002d7SAnil Varughese 	{0x5A5A, SIERRA_DEQ_ERRCMP_CTRL_PREG},
2359871002d7SAnil Varughese 	{0x02F5, SIERRA_DEQ_OFFSET_CTRL_PREG},
2360871002d7SAnil Varughese 	{0x02F5, SIERRA_DEQ_GAIN_CTRL_PREG},
23612bcf14caSSanket Parmar 	{0x9999, SIERRA_DEQ_VGATUNE_CTRL_PREG},
2362871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT0},
2363871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT1},
2364871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT2},
2365871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT3},
2366871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT4},
2367871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT5},
2368871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT6},
2369871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT7},
2370871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT8},
2371871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT9},
2372871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT10},
2373871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT11},
2374871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT12},
2375871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT13},
2376871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT14},
2377871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT15},
2378871002d7SAnil Varughese 	{0x0014, SIERRA_DEQ_GLUT16},
2379871002d7SAnil Varughese 	{0x0BAE, SIERRA_DEQ_ALUT0},
2380871002d7SAnil Varughese 	{0x0AEB, SIERRA_DEQ_ALUT1},
2381871002d7SAnil Varughese 	{0x0A28, SIERRA_DEQ_ALUT2},
2382871002d7SAnil Varughese 	{0x0965, SIERRA_DEQ_ALUT3},
2383871002d7SAnil Varughese 	{0x08A2, SIERRA_DEQ_ALUT4},
2384871002d7SAnil Varughese 	{0x07DF, SIERRA_DEQ_ALUT5},
2385871002d7SAnil Varughese 	{0x071C, SIERRA_DEQ_ALUT6},
2386871002d7SAnil Varughese 	{0x0659, SIERRA_DEQ_ALUT7},
2387871002d7SAnil Varughese 	{0x0596, SIERRA_DEQ_ALUT8},
2388871002d7SAnil Varughese 	{0x0514, SIERRA_DEQ_ALUT9},
2389871002d7SAnil Varughese 	{0x0492, SIERRA_DEQ_ALUT10},
2390871002d7SAnil Varughese 	{0x0410, SIERRA_DEQ_ALUT11},
2391871002d7SAnil Varughese 	{0x038E, SIERRA_DEQ_ALUT12},
2392871002d7SAnil Varughese 	{0x030C, SIERRA_DEQ_ALUT13},
2393871002d7SAnil Varughese 	{0x03F4, SIERRA_DEQ_DFETAP_CTRL_PREG},
2394871002d7SAnil Varughese 	{0x0001, SIERRA_DFE_EN_1010_IGNORE_PREG},
2395871002d7SAnil Varughese 	{0x3C01, SIERRA_DEQ_TAU_CTRL1_FAST_MAINT_PREG},
2396871002d7SAnil Varughese 	{0x3C40, SIERRA_DEQ_TAU_CTRL1_SLOW_MAINT_PREG},
2397871002d7SAnil Varughese 	{0x1C08, SIERRA_DEQ_TAU_CTRL2_PREG},
2398871002d7SAnil Varughese 	{0x0033, SIERRA_DEQ_PICTRL_PREG},
2399871002d7SAnil Varughese 	{0x0400, SIERRA_CPICAL_TMRVAL_MODE1_PREG},
2400871002d7SAnil Varughese 	{0x0330, SIERRA_CPICAL_TMRVAL_MODE0_PREG},
2401871002d7SAnil Varughese 	{0x01FF, SIERRA_CPICAL_PICNT_MODE1_PREG},
2402aead5fd6SKishon Vijay Abraham I 	{0x0009, SIERRA_CPI_OUTBUF_RATESEL_PREG},
2403871002d7SAnil Varughese 	{0x3232, SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG},
2404871002d7SAnil Varughese 	{0x0005, SIERRA_LFPSDET_SUPPORT_PREG},
2405aead5fd6SKishon Vijay Abraham I 	{0x000F, SIERRA_LFPSFILT_NS_PREG},
2406aead5fd6SKishon Vijay Abraham I 	{0x0009, SIERRA_LFPSFILT_RD_PREG},
2407aead5fd6SKishon Vijay Abraham I 	{0x0001, SIERRA_LFPSFILT_MP_PREG},
24082bcf14caSSanket Parmar 	{0x6013, SIERRA_SIGDET_SUPPORT_PREG},
2409aead5fd6SKishon Vijay Abraham I 	{0x8013, SIERRA_SDFILT_H2L_A_PREG},
2410871002d7SAnil Varughese 	{0x8009, SIERRA_SDFILT_L2H_PREG},
2411871002d7SAnil Varughese 	{0x0024, SIERRA_RXBUFFER_CTLECTRL_PREG},
2412871002d7SAnil Varughese 	{0x0020, SIERRA_RXBUFFER_RCDFECTRL_PREG},
2413871002d7SAnil Varughese 	{0x4243, SIERRA_RXBUFFER_DFECTRL_PREG}
241444d30d62SAlan Douglas };
241544d30d62SAlan Douglas 
2416078e9e92SSwapnil Jakhade static struct cdns_sierra_vals usb_100_ext_ssc_cmn_vals = {
2417078e9e92SSwapnil Jakhade 	.reg_pairs = cdns_usb_cmn_regs_ext_ssc,
2418078e9e92SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_usb_cmn_regs_ext_ssc),
2419078e9e92SSwapnil Jakhade };
2420078e9e92SSwapnil Jakhade 
2421078e9e92SSwapnil Jakhade static struct cdns_sierra_vals usb_100_ext_ssc_ln_vals = {
2422078e9e92SSwapnil Jakhade 	.reg_pairs = cdns_usb_ln_regs_ext_ssc,
2423078e9e92SSwapnil Jakhade 	.num_regs = ARRAY_SIZE(cdns_usb_ln_regs_ext_ssc),
2424078e9e92SSwapnil Jakhade };
2425078e9e92SSwapnil Jakhade 
2426*a1d12987SMarcin Wierzbicki /* SGMII PHY common configuration */
2427*a1d12987SMarcin Wierzbicki static const struct cdns_reg_pairs sgmii_pma_cmn_vals[] = {
2428*a1d12987SMarcin Wierzbicki 	{0x0180, SIERRA_SDOSCCAL_CLK_CNT_PREG},
2429*a1d12987SMarcin Wierzbicki 	{0x6000, SIERRA_CMN_REFRCV_PREG},
2430*a1d12987SMarcin Wierzbicki 	{0x0031, SIERRA_CMN_RESCAL_CTRLA_PREG},
2431*a1d12987SMarcin Wierzbicki 	{0x001C, SIERRA_CMN_PLLLC_FBDIV_INT_MODE0_PREG},
2432*a1d12987SMarcin Wierzbicki 	{0x2106, SIERRA_CMN_PLLLC_LF_COEFF_MODE0_PREG},
2433*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_CMN_PLLLC_LOCKSEARCH_PREG},
2434*a1d12987SMarcin Wierzbicki 	{0x8103, SIERRA_CMN_PLLLC_CLK0_PREG},
2435*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_CMN_PLLLC_BWCAL_MODE0_PREG},
2436*a1d12987SMarcin Wierzbicki 	{0x0027, SIERRA_CMN_PLLCSM_PLLEN_TMR_PREG},
2437*a1d12987SMarcin Wierzbicki 	{0x0062, SIERRA_CMN_PLLCSM_PLLPRE_TMR_PREG},
2438*a1d12987SMarcin Wierzbicki 	{0x0800, SIERRA_CMN_PLLLC_SS_TIME_STEPSIZE_MODE_PREG},
2439*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_CMN_PLLLC_INIT_PREG},
2440*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_CMN_PLLLC_ITERTMR_PREG},
2441*a1d12987SMarcin Wierzbicki 	{0x0020, SIERRA_CMN_PLLLC_LOCK_CNTSTART_PREG},
2442*a1d12987SMarcin Wierzbicki 	{0x0013, SIERRA_CMN_PLLLC_DCOCAL_CTRL_PREG},
2443*a1d12987SMarcin Wierzbicki 	{0x0013, SIERRA_CMN_PLLLC1_DCOCAL_CTRL_PREG},
2444*a1d12987SMarcin Wierzbicki };
2445*a1d12987SMarcin Wierzbicki 
2446*a1d12987SMarcin Wierzbicki static struct cdns_sierra_vals sgmii_cmn_vals = {
2447*a1d12987SMarcin Wierzbicki 	.reg_pairs = sgmii_pma_cmn_vals,
2448*a1d12987SMarcin Wierzbicki 	.num_regs = ARRAY_SIZE(sgmii_pma_cmn_vals),
2449*a1d12987SMarcin Wierzbicki };
2450*a1d12987SMarcin Wierzbicki 
2451*a1d12987SMarcin Wierzbicki /* SGMII PHY lane configuration */
2452*a1d12987SMarcin Wierzbicki static const struct cdns_reg_pairs sgmii_ln_regs[] = {
2453*a1d12987SMarcin Wierzbicki 	{0x691E, SIERRA_DET_STANDEC_D_PREG},
2454*a1d12987SMarcin Wierzbicki 	{0x0FFE, SIERRA_PSC_RX_A0_PREG},
2455*a1d12987SMarcin Wierzbicki 	{0x0104, SIERRA_PLLCTRL_FBDIV_MODE01_PREG},
2456*a1d12987SMarcin Wierzbicki 	{0x0013, SIERRA_PLLCTRL_SUBRATE_PREG},
2457*a1d12987SMarcin Wierzbicki 	{0x0106, SIERRA_PLLCTRL_GEN_D_PREG},
2458*a1d12987SMarcin Wierzbicki 	{0x5234, SIERRA_PLLCTRL_CPGAIN_MODE_PREG},
2459*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_DRVCTRL_ATTEN_PREG},
2460*a1d12987SMarcin Wierzbicki 	{0x00AB, SIERRA_RX_CREQ_FLTR_A_MODE0_PREG},
2461*a1d12987SMarcin Wierzbicki 	{0x3C0E, SIERRA_CREQ_CCLKDET_MODE01_PREG},
2462*a1d12987SMarcin Wierzbicki 	{0x3220, SIERRA_CREQ_FSMCLK_SEL_PREG},
2463*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_CREQ_EQ_CTRL_PREG},
2464*a1d12987SMarcin Wierzbicki 	{0x6320, SIERRA_DEQ_CONCUR_EPIOFFSET_MODE_PREG},
2465*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_CPI_OUTBUF_RATESEL_PREG},
2466*a1d12987SMarcin Wierzbicki 	{0x15A2, SIERRA_LN_SPARE_REG_PREG},
2467*a1d12987SMarcin Wierzbicki 	{0x7900, SIERRA_DEQ_BLK_TAU_CTRL1_PREG},
2468*a1d12987SMarcin Wierzbicki 	{0x2202, SIERRA_DEQ_BLK_TAU_CTRL4_PREG},
2469*a1d12987SMarcin Wierzbicki 	{0x2206, SIERRA_DEQ_TAU_CTRL2_PREG},
2470*a1d12987SMarcin Wierzbicki 	{0x0005, SIERRA_LANE_TX_RECEIVER_DETECT_PREG},
2471*a1d12987SMarcin Wierzbicki 	{0x8001, SIERRA_CREQ_SPARE_PREG},
2472*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_DEQ_CONCUR_CTRL1_PREG},
2473*a1d12987SMarcin Wierzbicki 	{0xD004, SIERRA_DEQ_CONCUR_CTRL2_PREG},
2474*a1d12987SMarcin Wierzbicki 	{0x0101, SIERRA_DEQ_GLUT9},
2475*a1d12987SMarcin Wierzbicki 	{0x0101, SIERRA_DEQ_GLUT10},
2476*a1d12987SMarcin Wierzbicki 	{0x0101, SIERRA_DEQ_GLUT11},
2477*a1d12987SMarcin Wierzbicki 	{0x0101, SIERRA_DEQ_GLUT12},
2478*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_DEQ_GLUT13},
2479*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_DEQ_GLUT16},
2480*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_POSTPRECUR_EN_CEPH_CTRL_PREG},
2481*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_TAU_EN_CEPH2TO0_PREG},
2482*a1d12987SMarcin Wierzbicki 	{0x0003, SIERRA_TAU_EN_CEPH5TO3_PREG},
2483*a1d12987SMarcin Wierzbicki 	{0x0101, SIERRA_DEQ_ALUT8},
2484*a1d12987SMarcin Wierzbicki 	{0x0101, SIERRA_DEQ_ALUT9},
2485*a1d12987SMarcin Wierzbicki 	{0x0100, SIERRA_DEQ_ALUT10},
2486*a1d12987SMarcin Wierzbicki 	{0x0000, SIERRA_OEPH_EN_CTRL_PREG},
2487*a1d12987SMarcin Wierzbicki 	{0x5425, SIERRA_DEQ_OPENEYE_CTRL_PREG},
2488*a1d12987SMarcin Wierzbicki 	{0x7458, SIERRA_CPICAL_RES_STARTCODE_MODE23_PREG},
2489*a1d12987SMarcin Wierzbicki 	{0x321F, SIERRA_CPICAL_RES_STARTCODE_MODE01_PREG},
2490*a1d12987SMarcin Wierzbicki };
2491*a1d12987SMarcin Wierzbicki 
2492*a1d12987SMarcin Wierzbicki static struct cdns_sierra_vals sgmii_pma_ln_vals = {
2493*a1d12987SMarcin Wierzbicki 	.reg_pairs = sgmii_ln_regs,
2494*a1d12987SMarcin Wierzbicki 	.num_regs = ARRAY_SIZE(sgmii_ln_regs),
2495*a1d12987SMarcin Wierzbicki };
2496*a1d12987SMarcin Wierzbicki 
249744d30d62SAlan Douglas static const struct cdns_sierra_data cdns_map_sierra = {
2498078e9e92SSwapnil Jakhade 	.id_value = SIERRA_MACRO_ID,
2499078e9e92SSwapnil Jakhade 	.block_offset_shift = 0x2,
2500078e9e92SSwapnil Jakhade 	.reg_offset_shift = 0x2,
2501fa105172SSwapnil Jakhade 	.pcs_cmn_vals = {
2502fa105172SSwapnil Jakhade 		[TYPE_PCIE] = {
2503fa105172SSwapnil Jakhade 			[TYPE_NONE] = {
25047a5ad9b4SSwapnil Jakhade 				[NO_SSC] = &pcie_phy_pcs_cmn_vals,
2505fa105172SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
25067a5ad9b4SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2507fa105172SSwapnil Jakhade 			},
25080cfa43abSSwapnil Jakhade 			[TYPE_SGMII] = {
25090cfa43abSSwapnil Jakhade 				[NO_SSC] = &pcie_phy_pcs_cmn_vals,
25100cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
25110cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
25120cfa43abSSwapnil Jakhade 			},
25138a1b82d7SSwapnil Jakhade 			[TYPE_QSGMII] = {
25148a1b82d7SSwapnil Jakhade 				[NO_SSC] = &pcie_phy_pcs_cmn_vals,
25158a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
25168a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
25178a1b82d7SSwapnil Jakhade 			},
2518fa105172SSwapnil Jakhade 		},
2519fa105172SSwapnil Jakhade 	},
2520078e9e92SSwapnil Jakhade 	.pma_cmn_vals = {
2521078e9e92SSwapnil Jakhade 		[TYPE_PCIE] = {
2522078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
25237a5ad9b4SSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2524078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_cmn_vals,
25257a5ad9b4SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2526078e9e92SSwapnil Jakhade 			},
25270cfa43abSSwapnil Jakhade 			[TYPE_SGMII] = {
25280cfa43abSSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
25290cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
25300cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
25310cfa43abSSwapnil Jakhade 			},
25328a1b82d7SSwapnil Jakhade 			[TYPE_QSGMII] = {
25338a1b82d7SSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
25348a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
25358a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
25368a1b82d7SSwapnil Jakhade 			},
2537078e9e92SSwapnil Jakhade 		},
2538078e9e92SSwapnil Jakhade 		[TYPE_USB] = {
2539078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
2540078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &usb_100_ext_ssc_cmn_vals,
2541078e9e92SSwapnil Jakhade 			},
2542078e9e92SSwapnil Jakhade 		},
25430cfa43abSSwapnil Jakhade 		[TYPE_SGMII] = {
2544*a1d12987SMarcin Wierzbicki 			[TYPE_NONE] = {
2545*a1d12987SMarcin Wierzbicki 				[NO_SSC] = &sgmii_cmn_vals,
2546*a1d12987SMarcin Wierzbicki 			},
25470cfa43abSSwapnil Jakhade 			[TYPE_PCIE] = {
25480cfa43abSSwapnil Jakhade 				[NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
25490cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
25500cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
25510cfa43abSSwapnil Jakhade 			},
25520cfa43abSSwapnil Jakhade 		},
25538a1b82d7SSwapnil Jakhade 		[TYPE_QSGMII] = {
25548a1b82d7SSwapnil Jakhade 			[TYPE_PCIE] = {
25558a1b82d7SSwapnil Jakhade 				[NO_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
25568a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
25578a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
25588a1b82d7SSwapnil Jakhade 			},
25598a1b82d7SSwapnil Jakhade 		},
2560078e9e92SSwapnil Jakhade 	},
2561078e9e92SSwapnil Jakhade 	.pma_ln_vals = {
2562078e9e92SSwapnil Jakhade 		[TYPE_PCIE] = {
2563078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
25647a5ad9b4SSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_ln_vals,
2565078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_ln_vals,
25667a5ad9b4SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_ln_vals,
2567078e9e92SSwapnil Jakhade 			},
25680cfa43abSSwapnil Jakhade 			[TYPE_SGMII] = {
25690cfa43abSSwapnil Jakhade 				[NO_SSC] = &ml_pcie_100_no_ssc_ln_vals,
25700cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &ml_pcie_100_ext_ssc_ln_vals,
25710cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &ml_pcie_100_int_ssc_ln_vals,
25720cfa43abSSwapnil Jakhade 			},
25738a1b82d7SSwapnil Jakhade 			[TYPE_QSGMII] = {
25748a1b82d7SSwapnil Jakhade 				[NO_SSC] = &ml_pcie_100_no_ssc_ln_vals,
25758a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &ml_pcie_100_ext_ssc_ln_vals,
25768a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &ml_pcie_100_int_ssc_ln_vals,
25778a1b82d7SSwapnil Jakhade 			},
2578078e9e92SSwapnil Jakhade 		},
2579078e9e92SSwapnil Jakhade 		[TYPE_USB] = {
2580078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
2581078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &usb_100_ext_ssc_ln_vals,
2582078e9e92SSwapnil Jakhade 			},
2583078e9e92SSwapnil Jakhade 		},
25840cfa43abSSwapnil Jakhade 		[TYPE_SGMII] = {
2585*a1d12987SMarcin Wierzbicki 			[TYPE_NONE] = {
2586*a1d12987SMarcin Wierzbicki 				[NO_SSC] = &sgmii_pma_ln_vals,
2587*a1d12987SMarcin Wierzbicki 			},
25880cfa43abSSwapnil Jakhade 			[TYPE_PCIE] = {
25890cfa43abSSwapnil Jakhade 				[NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
25900cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
25910cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
25920cfa43abSSwapnil Jakhade 			},
25930cfa43abSSwapnil Jakhade 		},
25948a1b82d7SSwapnil Jakhade 		[TYPE_QSGMII] = {
25958a1b82d7SSwapnil Jakhade 			[TYPE_PCIE] = {
25968a1b82d7SSwapnil Jakhade 				[NO_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
25978a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
25988a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
25998a1b82d7SSwapnil Jakhade 			},
26008a1b82d7SSwapnil Jakhade 		},
2601078e9e92SSwapnil Jakhade 	},
260244d30d62SAlan Douglas };
260344d30d62SAlan Douglas 
2604367da978SKishon Vijay Abraham I static const struct cdns_sierra_data cdns_ti_map_sierra = {
2605078e9e92SSwapnil Jakhade 	.id_value = SIERRA_MACRO_ID,
2606078e9e92SSwapnil Jakhade 	.block_offset_shift = 0x0,
2607078e9e92SSwapnil Jakhade 	.reg_offset_shift = 0x1,
2608fa105172SSwapnil Jakhade 	.pcs_cmn_vals = {
2609fa105172SSwapnil Jakhade 		[TYPE_PCIE] = {
2610fa105172SSwapnil Jakhade 			[TYPE_NONE] = {
26117a5ad9b4SSwapnil Jakhade 				[NO_SSC] = &pcie_phy_pcs_cmn_vals,
2612fa105172SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
26137a5ad9b4SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
2614fa105172SSwapnil Jakhade 			},
26150cfa43abSSwapnil Jakhade 			[TYPE_SGMII] = {
26160cfa43abSSwapnil Jakhade 				[NO_SSC] = &pcie_phy_pcs_cmn_vals,
26170cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
26180cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
26190cfa43abSSwapnil Jakhade 			},
26208a1b82d7SSwapnil Jakhade 			[TYPE_QSGMII] = {
26218a1b82d7SSwapnil Jakhade 				[NO_SSC] = &pcie_phy_pcs_cmn_vals,
26228a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
26238a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_phy_pcs_cmn_vals,
26248a1b82d7SSwapnil Jakhade 			},
26258a1b82d7SSwapnil Jakhade 		},
26268a1b82d7SSwapnil Jakhade 	},
26278a1b82d7SSwapnil Jakhade 	.phy_pma_ln_vals = {
26280cfa43abSSwapnil Jakhade 		[TYPE_SGMII] = {
26290cfa43abSSwapnil Jakhade 			[TYPE_PCIE] = {
26300cfa43abSSwapnil Jakhade 				[NO_SSC] = &sgmii_phy_pma_ln_vals,
26310cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &sgmii_phy_pma_ln_vals,
26320cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &sgmii_phy_pma_ln_vals,
26330cfa43abSSwapnil Jakhade 			},
26340cfa43abSSwapnil Jakhade 		},
26358a1b82d7SSwapnil Jakhade 		[TYPE_QSGMII] = {
26368a1b82d7SSwapnil Jakhade 			[TYPE_PCIE] = {
26378a1b82d7SSwapnil Jakhade 				[NO_SSC] = &qsgmii_phy_pma_ln_vals,
26388a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &qsgmii_phy_pma_ln_vals,
26398a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &qsgmii_phy_pma_ln_vals,
26408a1b82d7SSwapnil Jakhade 			},
2641fa105172SSwapnil Jakhade 		},
2642fa105172SSwapnil Jakhade 	},
2643078e9e92SSwapnil Jakhade 	.pma_cmn_vals = {
2644078e9e92SSwapnil Jakhade 		[TYPE_PCIE] = {
2645078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
26467a5ad9b4SSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_cmn_vals,
2647078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_cmn_vals,
26487a5ad9b4SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_cmn_vals,
2649078e9e92SSwapnil Jakhade 			},
26500cfa43abSSwapnil Jakhade 			[TYPE_SGMII] = {
26510cfa43abSSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
26520cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
26530cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
26540cfa43abSSwapnil Jakhade 			},
26558a1b82d7SSwapnil Jakhade 			[TYPE_QSGMII] = {
26568a1b82d7SSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_plllc_cmn_vals,
26578a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_plllc_cmn_vals,
26588a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_plllc_cmn_vals,
26598a1b82d7SSwapnil Jakhade 			},
2660078e9e92SSwapnil Jakhade 		},
2661078e9e92SSwapnil Jakhade 		[TYPE_USB] = {
2662078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
2663078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &usb_100_ext_ssc_cmn_vals,
2664078e9e92SSwapnil Jakhade 			},
2665078e9e92SSwapnil Jakhade 		},
26660cfa43abSSwapnil Jakhade 		[TYPE_SGMII] = {
26670cfa43abSSwapnil Jakhade 			[TYPE_PCIE] = {
26680cfa43abSSwapnil Jakhade 				[NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
26690cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
26700cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_cmn_vals,
26710cfa43abSSwapnil Jakhade 			},
26720cfa43abSSwapnil Jakhade 		},
26738a1b82d7SSwapnil Jakhade 		[TYPE_QSGMII] = {
26748a1b82d7SSwapnil Jakhade 			[TYPE_PCIE] = {
26758a1b82d7SSwapnil Jakhade 				[NO_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
26768a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
26778a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_cmn_vals,
26788a1b82d7SSwapnil Jakhade 			},
26798a1b82d7SSwapnil Jakhade 		},
2680078e9e92SSwapnil Jakhade 	},
2681078e9e92SSwapnil Jakhade 	.pma_ln_vals = {
2682078e9e92SSwapnil Jakhade 		[TYPE_PCIE] = {
2683078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
26847a5ad9b4SSwapnil Jakhade 				[NO_SSC] = &pcie_100_no_ssc_ln_vals,
2685078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &pcie_100_ext_ssc_ln_vals,
26867a5ad9b4SSwapnil Jakhade 				[INTERNAL_SSC] = &pcie_100_int_ssc_ln_vals,
2687078e9e92SSwapnil Jakhade 			},
26880cfa43abSSwapnil Jakhade 			[TYPE_SGMII] = {
26890cfa43abSSwapnil Jakhade 				[NO_SSC] = &ti_ml_pcie_100_no_ssc_ln_vals,
26900cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &ti_ml_pcie_100_ext_ssc_ln_vals,
26910cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &ti_ml_pcie_100_int_ssc_ln_vals,
26920cfa43abSSwapnil Jakhade 			},
26938a1b82d7SSwapnil Jakhade 			[TYPE_QSGMII] = {
2694e72659b6SSwapnil Jakhade 				[NO_SSC] = &ti_ml_pcie_100_no_ssc_ln_vals,
2695e72659b6SSwapnil Jakhade 				[EXTERNAL_SSC] = &ti_ml_pcie_100_ext_ssc_ln_vals,
2696e72659b6SSwapnil Jakhade 				[INTERNAL_SSC] = &ti_ml_pcie_100_int_ssc_ln_vals,
26978a1b82d7SSwapnil Jakhade 			},
2698078e9e92SSwapnil Jakhade 		},
2699078e9e92SSwapnil Jakhade 		[TYPE_USB] = {
2700078e9e92SSwapnil Jakhade 			[TYPE_NONE] = {
2701078e9e92SSwapnil Jakhade 				[EXTERNAL_SSC] = &usb_100_ext_ssc_ln_vals,
2702078e9e92SSwapnil Jakhade 			},
2703078e9e92SSwapnil Jakhade 		},
27040cfa43abSSwapnil Jakhade 		[TYPE_SGMII] = {
27050cfa43abSSwapnil Jakhade 			[TYPE_PCIE] = {
27060cfa43abSSwapnil Jakhade 				[NO_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
27070cfa43abSSwapnil Jakhade 				[EXTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
27080cfa43abSSwapnil Jakhade 				[INTERNAL_SSC] = &sgmii_100_no_ssc_plllc1_opt3_ln_vals,
27090cfa43abSSwapnil Jakhade 			},
27100cfa43abSSwapnil Jakhade 		},
27118a1b82d7SSwapnil Jakhade 		[TYPE_QSGMII] = {
27128a1b82d7SSwapnil Jakhade 			[TYPE_PCIE] = {
27138a1b82d7SSwapnil Jakhade 				[NO_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
27148a1b82d7SSwapnil Jakhade 				[EXTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
27158a1b82d7SSwapnil Jakhade 				[INTERNAL_SSC] = &qsgmii_100_no_ssc_plllc1_ln_vals,
27168a1b82d7SSwapnil Jakhade 			},
27178a1b82d7SSwapnil Jakhade 		},
2718078e9e92SSwapnil Jakhade 	},
2719367da978SKishon Vijay Abraham I };
2720367da978SKishon Vijay Abraham I 
272144d30d62SAlan Douglas static const struct of_device_id cdns_sierra_id_table[] = {
272244d30d62SAlan Douglas 	{
272344d30d62SAlan Douglas 		.compatible = "cdns,sierra-phy-t0",
272444d30d62SAlan Douglas 		.data = &cdns_map_sierra,
272544d30d62SAlan Douglas 	},
2726367da978SKishon Vijay Abraham I 	{
2727367da978SKishon Vijay Abraham I 		.compatible = "ti,sierra-phy-t0",
2728367da978SKishon Vijay Abraham I 		.data = &cdns_ti_map_sierra,
2729367da978SKishon Vijay Abraham I 	},
273044d30d62SAlan Douglas 	{}
273144d30d62SAlan Douglas };
273244d30d62SAlan Douglas MODULE_DEVICE_TABLE(of, cdns_sierra_id_table);
273344d30d62SAlan Douglas 
273444d30d62SAlan Douglas static struct platform_driver cdns_sierra_driver = {
273544d30d62SAlan Douglas 	.probe		= cdns_sierra_phy_probe,
2736e9ddb1adSUwe Kleine-König 	.remove_new	= cdns_sierra_phy_remove,
273744d30d62SAlan Douglas 	.driver		= {
273844d30d62SAlan Douglas 		.name	= "cdns-sierra-phy",
273944d30d62SAlan Douglas 		.of_match_table = cdns_sierra_id_table,
274044d30d62SAlan Douglas 	},
274144d30d62SAlan Douglas };
274244d30d62SAlan Douglas module_platform_driver(cdns_sierra_driver);
274344d30d62SAlan Douglas 
274444d30d62SAlan Douglas MODULE_ALIAS("platform:cdns_sierra");
274544d30d62SAlan Douglas MODULE_AUTHOR("Cadence Design Systems");
274644d30d62SAlan Douglas MODULE_DESCRIPTION("CDNS sierra phy driver");
274744d30d62SAlan Douglas MODULE_LICENSE("GPL v2");
2748