1*f3a8e2b7SMingkai Hu /*
2*f3a8e2b7SMingkai Hu * Copyright 2015 Freescale Semiconductor, Inc.
3*f3a8e2b7SMingkai Hu *
4*f3a8e2b7SMingkai Hu * SPDX-License-Identifier: GPL-2.0+
5*f3a8e2b7SMingkai Hu */
6*f3a8e2b7SMingkai Hu
7*f3a8e2b7SMingkai Hu #include <common.h>
8*f3a8e2b7SMingkai Hu #include <asm/arch/fsl_serdes.h>
9*f3a8e2b7SMingkai Hu #include <asm/arch/immap_lsch2.h>
10*f3a8e2b7SMingkai Hu
11*f3a8e2b7SMingkai Hu struct serdes_config {
12*f3a8e2b7SMingkai Hu u32 protocol;
13*f3a8e2b7SMingkai Hu u8 lanes[SRDS_MAX_LANES];
14*f3a8e2b7SMingkai Hu };
15*f3a8e2b7SMingkai Hu
16*f3a8e2b7SMingkai Hu static struct serdes_config serdes1_cfg_tbl[] = {
17*f3a8e2b7SMingkai Hu /* SerDes 1 */
18*f3a8e2b7SMingkai Hu {0x1555, {XFI_FM1_MAC9, PCIE1, PCIE2, PCIE3} },
19*f3a8e2b7SMingkai Hu {0x2555, {SGMII_2500_FM1_DTSEC9, PCIE1, PCIE2, PCIE3} },
20*f3a8e2b7SMingkai Hu {0x4555, {QSGMII_FM1_A, PCIE1, PCIE2, PCIE3} },
21*f3a8e2b7SMingkai Hu {0x4558, {QSGMII_FM1_A, PCIE1, PCIE2, SATA1} },
22*f3a8e2b7SMingkai Hu {0x1355, {XFI_FM1_MAC9, SGMII_FM1_DTSEC2, PCIE2, PCIE3} },
23*f3a8e2b7SMingkai Hu {0x2355, {SGMII_2500_FM1_DTSEC9, SGMII_FM1_DTSEC2, PCIE2, PCIE3} },
24*f3a8e2b7SMingkai Hu {0x3335, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC5,
25*f3a8e2b7SMingkai Hu PCIE3} },
26*f3a8e2b7SMingkai Hu {0x3355, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, PCIE2, PCIE3} },
27*f3a8e2b7SMingkai Hu {0x3358, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, PCIE2, SATA1} },
28*f3a8e2b7SMingkai Hu {0x3555, {SGMII_FM1_DTSEC9, PCIE1, PCIE2, PCIE3} },
29*f3a8e2b7SMingkai Hu {0x3558, {SGMII_FM1_DTSEC9, PCIE1, PCIE2, SATA1} },
30*f3a8e2b7SMingkai Hu {0x7000, {PCIE1, PCIE1, PCIE1, PCIE1} },
31*f3a8e2b7SMingkai Hu {0x9998, {PCIE1, PCIE2, PCIE3, SATA1} },
32*f3a8e2b7SMingkai Hu {0x6058, {PCIE1, PCIE1, PCIE2, SATA1} },
33*f3a8e2b7SMingkai Hu {0x1455, {XFI_FM1_MAC9, QSGMII_FM1_A, PCIE2, PCIE3} },
34*f3a8e2b7SMingkai Hu {0x2455, {SGMII_2500_FM1_DTSEC9, QSGMII_FM1_A, PCIE2, PCIE3} },
35*f3a8e2b7SMingkai Hu {0x2255, {SGMII_2500_FM1_DTSEC9, SGMII_2500_FM1_DTSEC2, PCIE2, PCIE3} },
36*f3a8e2b7SMingkai Hu {0x3333, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC5,
37*f3a8e2b7SMingkai Hu SGMII_FM1_DTSEC6} },
38*f3a8e2b7SMingkai Hu {}
39*f3a8e2b7SMingkai Hu };
40*f3a8e2b7SMingkai Hu
41*f3a8e2b7SMingkai Hu static struct serdes_config *serdes_cfg_tbl[] = {
42*f3a8e2b7SMingkai Hu serdes1_cfg_tbl,
43*f3a8e2b7SMingkai Hu };
44*f3a8e2b7SMingkai Hu
serdes_get_prtcl(int serdes,int cfg,int lane)45*f3a8e2b7SMingkai Hu enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)
46*f3a8e2b7SMingkai Hu {
47*f3a8e2b7SMingkai Hu struct serdes_config *ptr;
48*f3a8e2b7SMingkai Hu
49*f3a8e2b7SMingkai Hu if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
50*f3a8e2b7SMingkai Hu return 0;
51*f3a8e2b7SMingkai Hu
52*f3a8e2b7SMingkai Hu ptr = serdes_cfg_tbl[serdes];
53*f3a8e2b7SMingkai Hu while (ptr->protocol) {
54*f3a8e2b7SMingkai Hu if (ptr->protocol == cfg)
55*f3a8e2b7SMingkai Hu return ptr->lanes[lane];
56*f3a8e2b7SMingkai Hu ptr++;
57*f3a8e2b7SMingkai Hu }
58*f3a8e2b7SMingkai Hu
59*f3a8e2b7SMingkai Hu return 0;
60*f3a8e2b7SMingkai Hu }
61*f3a8e2b7SMingkai Hu
is_serdes_prtcl_valid(int serdes,u32 prtcl)62*f3a8e2b7SMingkai Hu int is_serdes_prtcl_valid(int serdes, u32 prtcl)
63*f3a8e2b7SMingkai Hu {
64*f3a8e2b7SMingkai Hu int i;
65*f3a8e2b7SMingkai Hu struct serdes_config *ptr;
66*f3a8e2b7SMingkai Hu
67*f3a8e2b7SMingkai Hu if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
68*f3a8e2b7SMingkai Hu return 0;
69*f3a8e2b7SMingkai Hu
70*f3a8e2b7SMingkai Hu ptr = serdes_cfg_tbl[serdes];
71*f3a8e2b7SMingkai Hu while (ptr->protocol) {
72*f3a8e2b7SMingkai Hu if (ptr->protocol == prtcl)
73*f3a8e2b7SMingkai Hu break;
74*f3a8e2b7SMingkai Hu ptr++;
75*f3a8e2b7SMingkai Hu }
76*f3a8e2b7SMingkai Hu
77*f3a8e2b7SMingkai Hu if (!ptr->protocol)
78*f3a8e2b7SMingkai Hu return 0;
79*f3a8e2b7SMingkai Hu
80*f3a8e2b7SMingkai Hu for (i = 0; i < SRDS_MAX_LANES; i++) {
81*f3a8e2b7SMingkai Hu if (ptr->lanes[i] != NONE)
82*f3a8e2b7SMingkai Hu return 1;
83*f3a8e2b7SMingkai Hu }
84*f3a8e2b7SMingkai Hu
85*f3a8e2b7SMingkai Hu return 0;
86*f3a8e2b7SMingkai Hu }
87