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