1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright 2009-2011 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_corenet_serdes.h"
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun static u8 serdes_cfg_tbl[][SRDS_MAX_LANES] = {
14*4882a593Smuzhiyun [0x2] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
15*4882a593Smuzhiyun PCIE4, AURORA, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3,
16*4882a593Smuzhiyun SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, },
17*4882a593Smuzhiyun [0x4] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
18*4882a593Smuzhiyun PCIE2, AURORA, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3,
19*4882a593Smuzhiyun SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, },
20*4882a593Smuzhiyun [0xb] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO2, SRIO2, SRIO1, SRIO1,
21*4882a593Smuzhiyun PCIE2, AURORA, PCIE3, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3,
22*4882a593Smuzhiyun SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, },
23*4882a593Smuzhiyun [0x10] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1, PCIE1,
24*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
25*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
26*4882a593Smuzhiyun [0x11] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
27*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
28*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, },
29*4882a593Smuzhiyun [0x13] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
30*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
31*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1,
32*4882a593Smuzhiyun XAUI_FM1, XAUI_FM1, },
33*4882a593Smuzhiyun [0x14] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
34*4882a593Smuzhiyun AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3,
35*4882a593Smuzhiyun SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3,
36*4882a593Smuzhiyun SGMII_FM1_DTSEC4, },
37*4882a593Smuzhiyun [0x15] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
38*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
39*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
40*4882a593Smuzhiyun [0x16] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2, PCIE2, PCIE2,
41*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
42*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SRIO1, SRIO1, SRIO1,
43*4882a593Smuzhiyun SRIO1, },
44*4882a593Smuzhiyun [0x17] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
45*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
46*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, },
47*4882a593Smuzhiyun [0x18] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
48*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
49*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE,
50*4882a593Smuzhiyun NONE, NONE, },
51*4882a593Smuzhiyun [0x1b] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
52*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
53*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
54*4882a593Smuzhiyun [0x1d] = {SRIO2, SRIO2, SRIO2, SRIO2, SRIO1, SRIO1, SRIO1, SRIO1,
55*4882a593Smuzhiyun AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3, NONE, NONE,
56*4882a593Smuzhiyun SATA1, SATA2, },
57*4882a593Smuzhiyun [0x20] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1,
58*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
59*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1,
60*4882a593Smuzhiyun XAUI_FM1, XAUI_FM1, },
61*4882a593Smuzhiyun [0x21] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1,
62*4882a593Smuzhiyun AURORA, AURORA, PCIE3, PCIE3, PCIE3, PCIE3,
63*4882a593Smuzhiyun SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3,
64*4882a593Smuzhiyun SGMII_FM1_DTSEC4, },
65*4882a593Smuzhiyun [0x22] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO1, SRIO1, SRIO1, SRIO1,
66*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
67*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
68*4882a593Smuzhiyun [0x23] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO2, SRIO2, SRIO1, SRIO1,
69*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
70*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, },
71*4882a593Smuzhiyun [0x24] = {PCIE1, PCIE1, PCIE1, PCIE1, SRIO2, SRIO2, SRIO1, SRIO1,
72*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
73*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE,
74*4882a593Smuzhiyun NONE, NONE, },
75*4882a593Smuzhiyun [0x28] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2,
76*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
77*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, NONE, NONE, SATA1, SATA2, },
78*4882a593Smuzhiyun [0x29] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2,
79*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
80*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE,
81*4882a593Smuzhiyun NONE, NONE, },
82*4882a593Smuzhiyun [0x2a] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2,
83*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
84*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, XAUI_FM1, XAUI_FM1,
85*4882a593Smuzhiyun XAUI_FM1, XAUI_FM1, },
86*4882a593Smuzhiyun [0x2b] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2, PCIE2, PCIE2,
87*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
88*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
89*4882a593Smuzhiyun [0x2f] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO2, SRIO2, SRIO1, SRIO1,
90*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
91*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
92*4882a593Smuzhiyun [0x31] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO1, SRIO1, SRIO1, SRIO1,
93*4882a593Smuzhiyun AURORA, AURORA, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
94*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5, NONE,
95*4882a593Smuzhiyun NONE, NONE, },
96*4882a593Smuzhiyun [0x33] = {PCIE1, PCIE1, PCIE3, PCIE3, SRIO1, SRIO1, SRIO1, SRIO1,
97*4882a593Smuzhiyun AURORA, AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1,
98*4882a593Smuzhiyun NONE, NONE, SATA1, SATA2, },
99*4882a593Smuzhiyun [0x34] = {PCIE1, PCIE1, PCIE1, PCIE1, SGMII_FM1_DTSEC1,
100*4882a593Smuzhiyun SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA,
101*4882a593Smuzhiyun AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE,
102*4882a593Smuzhiyun NONE, SATA1, SATA2, },
103*4882a593Smuzhiyun [0x35] = {PCIE1, PCIE1, PCIE1, PCIE1, PCIE2, PCIE2,
104*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA, AURORA, XAUI_FM1,
105*4882a593Smuzhiyun XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE, NONE, SATA1, SATA2, },
106*4882a593Smuzhiyun [0x36] = {PCIE1, PCIE1, PCIE3, PCIE3, SGMII_FM1_DTSEC1,
107*4882a593Smuzhiyun SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA,
108*4882a593Smuzhiyun AURORA, XAUI_FM1, XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE,
109*4882a593Smuzhiyun NONE, SATA1, SATA2, },
110*4882a593Smuzhiyun [0x37] = {PCIE1, PCIE1, PCIE3, PCIE3, PCIE2, PCIE2,
111*4882a593Smuzhiyun SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC4, AURORA, AURORA, XAUI_FM1,
112*4882a593Smuzhiyun XAUI_FM1, XAUI_FM1, XAUI_FM1, NONE, NONE, SATA1, SATA2, },
113*4882a593Smuzhiyun };
114*4882a593Smuzhiyun
serdes_get_prtcl(int cfg,int lane)115*4882a593Smuzhiyun enum srds_prtcl serdes_get_prtcl(int cfg, int lane)
116*4882a593Smuzhiyun {
117*4882a593Smuzhiyun if (!serdes_lane_enabled(lane))
118*4882a593Smuzhiyun return NONE;
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun return serdes_cfg_tbl[cfg][lane];
121*4882a593Smuzhiyun }
122*4882a593Smuzhiyun
is_serdes_prtcl_valid(u32 prtcl)123*4882a593Smuzhiyun int is_serdes_prtcl_valid(u32 prtcl) {
124*4882a593Smuzhiyun int i;
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun if (prtcl >= ARRAY_SIZE(serdes_cfg_tbl))
127*4882a593Smuzhiyun return 0;
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun for (i = 0; i < SRDS_MAX_LANES; i++) {
130*4882a593Smuzhiyun if (serdes_cfg_tbl[prtcl][i] != NONE)
131*4882a593Smuzhiyun return 1;
132*4882a593Smuzhiyun }
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun return 0;
135*4882a593Smuzhiyun }
136