xref: /OK3568_Linux_fs/u-boot/arch/powerpc/cpu/mpc85xx/t4240_serdes.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2012 Freescale Semiconductor, Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <common.h>
8*4882a593Smuzhiyun #include <asm/fsl_serdes.h>
9*4882a593Smuzhiyun #include <asm/processor.h>
10*4882a593Smuzhiyun #include <asm/io.h>
11*4882a593Smuzhiyun #include "fsl_corenet2_serdes.h"
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun struct serdes_config {
14*4882a593Smuzhiyun 	u32 protocol;
15*4882a593Smuzhiyun 	u8 lanes[SRDS_MAX_LANES];
16*4882a593Smuzhiyun };
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifdef CONFIG_ARCH_T4240
19*4882a593Smuzhiyun static const struct serdes_config serdes1_cfg_tbl[] = {
20*4882a593Smuzhiyun 	/* SerDes 1 */
21*4882a593Smuzhiyun 	{1, {XAUI_FM1_MAC9, XAUI_FM1_MAC9,
22*4882a593Smuzhiyun 		XAUI_FM1_MAC9, XAUI_FM1_MAC9,
23*4882a593Smuzhiyun 		XAUI_FM1_MAC10, XAUI_FM1_MAC10,
24*4882a593Smuzhiyun 		XAUI_FM1_MAC10, XAUI_FM1_MAC10}},
25*4882a593Smuzhiyun 	{2, {HIGIG_FM1_MAC9, HIGIG_FM1_MAC9,
26*4882a593Smuzhiyun 		HIGIG_FM1_MAC9, HIGIG_FM1_MAC9,
27*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10,
28*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10}},
29*4882a593Smuzhiyun 	{4, {HIGIG_FM1_MAC9, HIGIG_FM1_MAC9,
30*4882a593Smuzhiyun 		HIGIG_FM1_MAC9, HIGIG_FM1_MAC9,
31*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10,
32*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10}},
33*4882a593Smuzhiyun 	{27, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
34*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
35*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
36*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4} },
37*4882a593Smuzhiyun 	{28, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
38*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
39*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
40*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4}},
41*4882a593Smuzhiyun 	{35, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
42*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
43*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
44*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4} },
45*4882a593Smuzhiyun 	{36, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
46*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
47*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
48*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4}},
49*4882a593Smuzhiyun 	{37, {NONE, NONE, QSGMII_FM1_B, NONE,
50*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE} },
51*4882a593Smuzhiyun 	{38, {NONE, NONE, QSGMII_FM1_B, NONE,
52*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE}},
53*4882a593Smuzhiyun 	{39, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
54*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
55*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE} },
56*4882a593Smuzhiyun 	{40, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
57*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
58*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE}},
59*4882a593Smuzhiyun 	{45, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
60*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
61*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE} },
62*4882a593Smuzhiyun 	{46, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
63*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
64*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE}},
65*4882a593Smuzhiyun 	{47, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
66*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
67*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE} },
68*4882a593Smuzhiyun 	{48, {SGMII_FM1_DTSEC5, SGMII_FM1_DTSEC6,
69*4882a593Smuzhiyun 		SGMII_FM1_DTSEC10, SGMII_FM1_DTSEC9,
70*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE}},
71*4882a593Smuzhiyun 	{}
72*4882a593Smuzhiyun };
73*4882a593Smuzhiyun static const struct serdes_config serdes2_cfg_tbl[] = {
74*4882a593Smuzhiyun 	/* SerDes 2 */
75*4882a593Smuzhiyun 	{1, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
76*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
77*4882a593Smuzhiyun 		XAUI_FM2_MAC10, XAUI_FM2_MAC10,
78*4882a593Smuzhiyun 		XAUI_FM2_MAC10, XAUI_FM2_MAC10}},
79*4882a593Smuzhiyun 	{2, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
80*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
81*4882a593Smuzhiyun 		HIGIG_FM2_MAC10, HIGIG_FM2_MAC10,
82*4882a593Smuzhiyun 		HIGIG_FM2_MAC10, HIGIG_FM2_MAC10}},
83*4882a593Smuzhiyun 	{4, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
84*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
85*4882a593Smuzhiyun 		HIGIG_FM2_MAC10, HIGIG_FM2_MAC10,
86*4882a593Smuzhiyun 		HIGIG_FM2_MAC10, HIGIG_FM2_MAC10}},
87*4882a593Smuzhiyun 	{6, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
88*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
89*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
90*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
91*4882a593Smuzhiyun 	{7, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
92*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
93*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
94*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
95*4882a593Smuzhiyun 	{12, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
96*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
97*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
98*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
99*4882a593Smuzhiyun 	{13, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
100*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
101*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
102*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
103*4882a593Smuzhiyun 	{14, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
104*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
105*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
106*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
107*4882a593Smuzhiyun 	{15, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
108*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
109*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
110*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
111*4882a593Smuzhiyun 	{16, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
112*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
113*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
114*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
115*4882a593Smuzhiyun 	{21, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
116*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
117*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
118*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
119*4882a593Smuzhiyun 	{22, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
120*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
121*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
122*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
123*4882a593Smuzhiyun 	{23, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
124*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
125*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
126*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
127*4882a593Smuzhiyun 	{24, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
128*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
129*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
130*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
131*4882a593Smuzhiyun 	{25, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
132*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
133*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
134*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
135*4882a593Smuzhiyun 	{26, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
136*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
137*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
138*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
139*4882a593Smuzhiyun 	{27, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
140*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
141*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
142*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
143*4882a593Smuzhiyun 	{28, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
144*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
145*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
146*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
147*4882a593Smuzhiyun 	{35, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
148*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
149*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
150*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
151*4882a593Smuzhiyun 	{36, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
152*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
153*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
154*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
155*4882a593Smuzhiyun 	{37, {NONE, NONE, QSGMII_FM2_B, NONE,
156*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
157*4882a593Smuzhiyun 	{38, {NONE, NONE, QSGMII_FM2_B, NONE,
158*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
159*4882a593Smuzhiyun 	{39, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
160*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
161*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
162*4882a593Smuzhiyun 	{40, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
163*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
164*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
165*4882a593Smuzhiyun 	{45, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
166*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
167*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
168*4882a593Smuzhiyun 	{46, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
169*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
170*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
171*4882a593Smuzhiyun 	{47, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
172*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
173*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
174*4882a593Smuzhiyun 	{48, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
175*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
176*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
177*4882a593Smuzhiyun 	{49, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
178*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
179*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
180*4882a593Smuzhiyun 	{50, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
181*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
182*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
183*4882a593Smuzhiyun 	{51, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
184*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
185*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
186*4882a593Smuzhiyun 	{52, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
187*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
188*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
189*4882a593Smuzhiyun 	{53, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
190*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
191*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
192*4882a593Smuzhiyun 	{54, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
193*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
194*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
195*4882a593Smuzhiyun 	{55, {XFI_FM1_MAC9, XFI_FM1_MAC10,
196*4882a593Smuzhiyun 		XFI_FM2_MAC10, XFI_FM2_MAC9,
197*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
198*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
199*4882a593Smuzhiyun 	{56, {XFI_FM1_MAC9, XFI_FM1_MAC10,
200*4882a593Smuzhiyun 		XFI_FM2_MAC10, XFI_FM2_MAC9,
201*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
202*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
203*4882a593Smuzhiyun 	{57, {XFI_FM1_MAC9, XFI_FM1_MAC10,
204*4882a593Smuzhiyun 		XFI_FM2_MAC10, XFI_FM2_MAC9,
205*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
206*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4}},
207*4882a593Smuzhiyun 	{}
208*4882a593Smuzhiyun };
209*4882a593Smuzhiyun static const struct serdes_config serdes3_cfg_tbl[] = {
210*4882a593Smuzhiyun 	/* SerDes 3 */
211*4882a593Smuzhiyun 	{1, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1} },
212*4882a593Smuzhiyun 	{2, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1}},
213*4882a593Smuzhiyun 	{3, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2} },
214*4882a593Smuzhiyun 	{4, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2}},
215*4882a593Smuzhiyun 	{5, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
216*4882a593Smuzhiyun 	{6, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1}},
217*4882a593Smuzhiyun 	{7, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
218*4882a593Smuzhiyun 	{8, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
219*4882a593Smuzhiyun 	{9, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
220*4882a593Smuzhiyun 		INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN}},
221*4882a593Smuzhiyun 	{10, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
222*4882a593Smuzhiyun 		INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN}},
223*4882a593Smuzhiyun 	{11, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
224*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2} },
225*4882a593Smuzhiyun 	{12, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
226*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2}},
227*4882a593Smuzhiyun 	{13, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
228*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2} },
229*4882a593Smuzhiyun 	{14, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
230*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2}},
231*4882a593Smuzhiyun 	{15, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
232*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
233*4882a593Smuzhiyun 	{16, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
234*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1}},
235*4882a593Smuzhiyun 	{17, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
236*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1}},
237*4882a593Smuzhiyun 	{18, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
238*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
239*4882a593Smuzhiyun 	{19, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
240*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1}},
241*4882a593Smuzhiyun 	{20, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
242*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1}},
243*4882a593Smuzhiyun 	{}
244*4882a593Smuzhiyun };
245*4882a593Smuzhiyun static const struct serdes_config serdes4_cfg_tbl[] = {
246*4882a593Smuzhiyun 	/* SerDes 4 */
247*4882a593Smuzhiyun 	{1, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE3, PCIE3, PCIE3, PCIE3} },
248*4882a593Smuzhiyun 	{2, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE3, PCIE3, PCIE3, PCIE3}},
249*4882a593Smuzhiyun 	{3, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE4, PCIE4, PCIE4, PCIE4} },
250*4882a593Smuzhiyun 	{4, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE4, PCIE4, PCIE4, PCIE4}},
251*4882a593Smuzhiyun 	{5, {PCIE3, PCIE3, PCIE3, PCIE3, SRIO2, SRIO2, SRIO2, SRIO2} },
252*4882a593Smuzhiyun 	{6, {PCIE3, PCIE3, PCIE3, PCIE3, SRIO2, SRIO2, SRIO2, SRIO2}},
253*4882a593Smuzhiyun 	{7, {PCIE3, PCIE3, PCIE3, PCIE3, SRIO2, SRIO2, SRIO2, SRIO2} },
254*4882a593Smuzhiyun 	{8, {PCIE3, PCIE3, PCIE3, PCIE3, SRIO2, SRIO2, SRIO2, SRIO2}},
255*4882a593Smuzhiyun 	{9, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE4, PCIE4, SATA1, SATA2} },
256*4882a593Smuzhiyun 	{10, {PCIE3, PCIE3, PCIE3, PCIE3, PCIE4, PCIE4, SATA1, SATA2} },
257*4882a593Smuzhiyun 	{11, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, SATA1, SATA2} },
258*4882a593Smuzhiyun 	{12, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, SATA1, SATA2} },
259*4882a593Smuzhiyun 	{13, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, SRIO2, SRIO2} },
260*4882a593Smuzhiyun 	{14, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, SRIO2, SRIO2}},
261*4882a593Smuzhiyun 	{15, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, SRIO2, SRIO2} },
262*4882a593Smuzhiyun 	{16, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, SRIO2, SRIO2}},
263*4882a593Smuzhiyun 	{18, {PCIE3, PCIE3, PCIE3, PCIE3, AURORA, AURORA, AURORA, AURORA}},
264*4882a593Smuzhiyun 	{}
265*4882a593Smuzhiyun };
266*4882a593Smuzhiyun #elif defined(CONFIG_ARCH_T4160)
267*4882a593Smuzhiyun static const struct serdes_config serdes1_cfg_tbl[] = {
268*4882a593Smuzhiyun 	/* SerDes 1 */
269*4882a593Smuzhiyun 	{1, {NONE, NONE, NONE, NONE,
270*4882a593Smuzhiyun 		XAUI_FM1_MAC10, XAUI_FM1_MAC10,
271*4882a593Smuzhiyun 		XAUI_FM1_MAC10, XAUI_FM1_MAC10} },
272*4882a593Smuzhiyun 	{2, {NONE, NONE, NONE, NONE,
273*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10,
274*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10} },
275*4882a593Smuzhiyun 	{4, {NONE, NONE, NONE, NONE,
276*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10,
277*4882a593Smuzhiyun 		HIGIG_FM1_MAC10, HIGIG_FM1_MAC10} },
278*4882a593Smuzhiyun 	{27, {NONE, NONE, NONE, NONE,
279*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
280*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4} },
281*4882a593Smuzhiyun 	{28, {NONE, NONE, NONE, NONE,
282*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
283*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4} },
284*4882a593Smuzhiyun 	{35, {NONE, NONE, NONE, NONE,
285*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
286*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4} },
287*4882a593Smuzhiyun 	{36, {NONE, NONE, NONE, NONE,
288*4882a593Smuzhiyun 		SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
289*4882a593Smuzhiyun 		SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4} },
290*4882a593Smuzhiyun 	{37, {NONE, NONE, NONE, NONE,
291*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE} },
292*4882a593Smuzhiyun 	{38, {NONE, NONE, NONE, NONE,
293*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM1_A, NONE} },
294*4882a593Smuzhiyun 	{}
295*4882a593Smuzhiyun };
296*4882a593Smuzhiyun static const struct serdes_config serdes2_cfg_tbl[] = {
297*4882a593Smuzhiyun 	/* SerDes 2 */
298*4882a593Smuzhiyun 	{6, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
299*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
300*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
301*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
302*4882a593Smuzhiyun 	{7, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
303*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
304*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
305*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
306*4882a593Smuzhiyun 	{12, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
307*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
308*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
309*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
310*4882a593Smuzhiyun 	{13, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
311*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
312*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
313*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
314*4882a593Smuzhiyun 	{15, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
315*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
316*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
317*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
318*4882a593Smuzhiyun 	{16, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
319*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
320*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
321*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
322*4882a593Smuzhiyun 	{21, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
323*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
324*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
325*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
326*4882a593Smuzhiyun 	{22, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
327*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
328*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
329*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
330*4882a593Smuzhiyun 	{24, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
331*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
332*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
333*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
334*4882a593Smuzhiyun 	{25, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
335*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
336*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
337*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
338*4882a593Smuzhiyun 	{26, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
339*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
340*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
341*4882a593Smuzhiyun 		NONE, NONE} },
342*4882a593Smuzhiyun 	{27, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
343*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
344*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
345*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
346*4882a593Smuzhiyun 	{28, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
347*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
348*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
349*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
350*4882a593Smuzhiyun 	{35, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
351*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
352*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
353*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
354*4882a593Smuzhiyun 	{36, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
355*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
356*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
357*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
358*4882a593Smuzhiyun 	{37, {NONE, NONE, QSGMII_FM2_B, NONE,
359*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
360*4882a593Smuzhiyun 	{38, {NONE, NONE, QSGMII_FM2_B, NONE,
361*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
362*4882a593Smuzhiyun 	{39, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
363*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
364*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
365*4882a593Smuzhiyun 	{40, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
366*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
367*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
368*4882a593Smuzhiyun 	{45, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
369*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
370*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
371*4882a593Smuzhiyun 	{46, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
372*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
373*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
374*4882a593Smuzhiyun 	{47, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
375*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
376*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
377*4882a593Smuzhiyun 	{48, {SGMII_FM2_DTSEC5, SGMII_FM2_DTSEC6,
378*4882a593Smuzhiyun 		SGMII_FM2_DTSEC10, SGMII_FM2_DTSEC9,
379*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
380*4882a593Smuzhiyun 	{49, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
381*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
382*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
383*4882a593Smuzhiyun 	{50, {XAUI_FM2_MAC9, XAUI_FM2_MAC9,
384*4882a593Smuzhiyun 		XAUI_FM2_MAC9, XAUI_FM2_MAC9,
385*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
386*4882a593Smuzhiyun 	{51, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
387*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
388*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
389*4882a593Smuzhiyun 	{52, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
390*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
391*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
392*4882a593Smuzhiyun 	{53, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
393*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
394*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
395*4882a593Smuzhiyun 	{54, {HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
396*4882a593Smuzhiyun 		HIGIG_FM2_MAC9, HIGIG_FM2_MAC9,
397*4882a593Smuzhiyun 		NONE, NONE, QSGMII_FM2_A, NONE} },
398*4882a593Smuzhiyun 	{55, {NONE, XFI_FM1_MAC10,
399*4882a593Smuzhiyun 		XFI_FM2_MAC10, NONE,
400*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
401*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
402*4882a593Smuzhiyun 	{56, {NONE, XFI_FM1_MAC10,
403*4882a593Smuzhiyun 		XFI_FM2_MAC10, NONE,
404*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
405*4882a593Smuzhiyun 		SGMII_FM2_DTSEC3, SGMII_FM2_DTSEC4} },
406*4882a593Smuzhiyun 	{57, {NONE, XFI_FM1_MAC10,
407*4882a593Smuzhiyun 		XFI_FM2_MAC10, NONE,
408*4882a593Smuzhiyun 		SGMII_FM2_DTSEC1, SGMII_FM2_DTSEC2,
409*4882a593Smuzhiyun 		NONE, NONE} },
410*4882a593Smuzhiyun 	{}
411*4882a593Smuzhiyun };
412*4882a593Smuzhiyun static const struct serdes_config serdes3_cfg_tbl[] = {
413*4882a593Smuzhiyun 	/* SerDes 3 */
414*4882a593Smuzhiyun 	{1, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1} },
415*4882a593Smuzhiyun 	{2, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1} },
416*4882a593Smuzhiyun 	{3, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2} },
417*4882a593Smuzhiyun 	{4, {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2} },
418*4882a593Smuzhiyun 	{5, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
419*4882a593Smuzhiyun 	{6, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
420*4882a593Smuzhiyun 	{7, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
421*4882a593Smuzhiyun 	{8, {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1} },
422*4882a593Smuzhiyun 	{9, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
423*4882a593Smuzhiyun 		INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN} },
424*4882a593Smuzhiyun 	{10, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
425*4882a593Smuzhiyun 		INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN} },
426*4882a593Smuzhiyun 	{11, {NONE, NONE, NONE, NONE,
427*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2} },
428*4882a593Smuzhiyun 	{12, {NONE, NONE, NONE, NONE,
429*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2} },
430*4882a593Smuzhiyun 	{13, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
431*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2} },
432*4882a593Smuzhiyun 	{14, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
433*4882a593Smuzhiyun 		PCIE2, PCIE2, PCIE2, PCIE2} },
434*4882a593Smuzhiyun 	{15, {NONE, NONE, NONE, NONE,
435*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
436*4882a593Smuzhiyun 	{16, {NONE, NONE, NONE, NONE,
437*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
438*4882a593Smuzhiyun 	{17, {NONE, NONE, NONE, NONE,
439*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
440*4882a593Smuzhiyun 	{18, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
441*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
442*4882a593Smuzhiyun 	{19, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
443*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
444*4882a593Smuzhiyun 	{20, {INTERLAKEN, INTERLAKEN, INTERLAKEN, INTERLAKEN,
445*4882a593Smuzhiyun 		SRIO1, SRIO1, SRIO1, SRIO1} },
446*4882a593Smuzhiyun 	{}
447*4882a593Smuzhiyun };
448*4882a593Smuzhiyun static const struct serdes_config serdes4_cfg_tbl[] = {
449*4882a593Smuzhiyun 	/* SerDes 4 */
450*4882a593Smuzhiyun 	{3, {NONE, NONE, NONE, NONE, PCIE4, PCIE4, PCIE4, PCIE4} },
451*4882a593Smuzhiyun 	{4, {NONE, NONE, NONE, NONE, PCIE4, PCIE4, PCIE4, PCIE4} },
452*4882a593Smuzhiyun 	{5, {NONE, NONE, NONE, NONE, SRIO2, SRIO2, SRIO2, SRIO2} },
453*4882a593Smuzhiyun 	{6, {NONE, NONE, NONE, NONE, SRIO2, SRIO2, SRIO2, SRIO2} },
454*4882a593Smuzhiyun 	{7, {NONE, NONE, NONE, NONE, SRIO2, SRIO2, SRIO2, SRIO2} },
455*4882a593Smuzhiyun 	{8, {NONE, NONE, NONE, NONE, SRIO2, SRIO2, SRIO2, SRIO2} },
456*4882a593Smuzhiyun 	{9, {NONE, NONE, NONE, NONE, PCIE4, PCIE4, SATA1, SATA2} },
457*4882a593Smuzhiyun 	{10, {NONE, NONE, NONE, NONE, PCIE4, PCIE4, SATA1, SATA2} },
458*4882a593Smuzhiyun 	{11, {NONE, NONE, NONE, NONE, AURORA, AURORA, SATA1, SATA2} },
459*4882a593Smuzhiyun 	{12, {NONE, NONE, NONE, NONE, AURORA, AURORA, SATA1, SATA2} },
460*4882a593Smuzhiyun 	{13, {NONE, NONE, NONE, NONE, AURORA, AURORA, SRIO2, SRIO2} },
461*4882a593Smuzhiyun 	{14, {NONE, NONE, NONE, NONE, AURORA, AURORA, SRIO2, SRIO2} },
462*4882a593Smuzhiyun 	{15, {NONE, NONE, NONE, NONE, AURORA, AURORA, SRIO2, SRIO2} },
463*4882a593Smuzhiyun 	{16, {NONE, NONE, NONE, NONE, AURORA, AURORA, SRIO2, SRIO2} },
464*4882a593Smuzhiyun 	{18, {NONE, NONE, NONE, NONE, AURORA, AURORA, AURORA, AURORA} },
465*4882a593Smuzhiyun 	{}
466*4882a593Smuzhiyun }
467*4882a593Smuzhiyun ;
468*4882a593Smuzhiyun #else
469*4882a593Smuzhiyun #error "Need to define SerDes protocol"
470*4882a593Smuzhiyun #endif
471*4882a593Smuzhiyun static const struct serdes_config *serdes_cfg_tbl[] = {
472*4882a593Smuzhiyun 	serdes1_cfg_tbl,
473*4882a593Smuzhiyun 	serdes2_cfg_tbl,
474*4882a593Smuzhiyun 	serdes3_cfg_tbl,
475*4882a593Smuzhiyun 	serdes4_cfg_tbl,
476*4882a593Smuzhiyun };
477*4882a593Smuzhiyun 
serdes_get_prtcl(int serdes,int cfg,int lane)478*4882a593Smuzhiyun enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)
479*4882a593Smuzhiyun {
480*4882a593Smuzhiyun 	const struct serdes_config *ptr;
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun 	if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
483*4882a593Smuzhiyun 		return 0;
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun 	ptr = serdes_cfg_tbl[serdes];
486*4882a593Smuzhiyun 	while (ptr->protocol) {
487*4882a593Smuzhiyun 		if (ptr->protocol == cfg)
488*4882a593Smuzhiyun 			return ptr->lanes[lane];
489*4882a593Smuzhiyun 		ptr++;
490*4882a593Smuzhiyun 	}
491*4882a593Smuzhiyun 	return 0;
492*4882a593Smuzhiyun }
493*4882a593Smuzhiyun 
is_serdes_prtcl_valid(int serdes,u32 prtcl)494*4882a593Smuzhiyun int is_serdes_prtcl_valid(int serdes, u32 prtcl)
495*4882a593Smuzhiyun {
496*4882a593Smuzhiyun 	int i;
497*4882a593Smuzhiyun 	const struct serdes_config *ptr;
498*4882a593Smuzhiyun 
499*4882a593Smuzhiyun 	if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
500*4882a593Smuzhiyun 		return 0;
501*4882a593Smuzhiyun 
502*4882a593Smuzhiyun 	ptr = serdes_cfg_tbl[serdes];
503*4882a593Smuzhiyun 	while (ptr->protocol) {
504*4882a593Smuzhiyun 		if (ptr->protocol == prtcl)
505*4882a593Smuzhiyun 			break;
506*4882a593Smuzhiyun 		ptr++;
507*4882a593Smuzhiyun 	}
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun 	if (!ptr->protocol)
510*4882a593Smuzhiyun 		return 0;
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun 	for (i = 0; i < SRDS_MAX_LANES; i++) {
513*4882a593Smuzhiyun 		if (ptr->lanes[i] != NONE)
514*4882a593Smuzhiyun 			return 1;
515*4882a593Smuzhiyun 	}
516*4882a593Smuzhiyun 
517*4882a593Smuzhiyun 	return 0;
518*4882a593Smuzhiyun }
519