1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
25f208d11SYork Sun /*
35f208d11SYork Sun * Copyright 2012 Freescale Semiconductor, Inc.
45f208d11SYork Sun */
55f208d11SYork Sun
65f208d11SYork Sun #include <common.h>
75f208d11SYork Sun #include <asm/fsl_serdes.h>
85f208d11SYork Sun #include <asm/processor.h>
95f208d11SYork Sun #include <asm/io.h>
105f208d11SYork Sun
1196bda02cSPrabhakar Kushwaha
1296bda02cSPrabhakar Kushwaha static u8 serdes_cfg_tbl[][SRDS_MAX_LANES] = {
1396bda02cSPrabhakar Kushwaha [0x00] = {PCIE1, PCIE1, PCIE1, PCIE1,
145f208d11SYork Sun PCIE2, PCIE2, PCIE2, PCIE2},
155f208d11SYork Sun [0x06] = {PCIE1, PCIE1, PCIE1, PCIE1,
165f208d11SYork Sun PCIE2, PCIE3, PCIE4, SATA1},
175f208d11SYork Sun [0x08] = {PCIE1, PCIE1, PCIE1, PCIE1,
185f208d11SYork Sun PCIE2, PCIE3, SATA2, SATA1},
1996bda02cSPrabhakar Kushwaha [0x40] = {PCIE1, PCIE1, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
2096bda02cSPrabhakar Kushwaha PCIE2, PCIE2, PCIE2, PCIE2},
2196bda02cSPrabhakar Kushwaha [0x60] = {PCIE1, SGMII_FM1_DTSEC3, QSGMII_SW1_A, QSGMII_SW1_B,
2296bda02cSPrabhakar Kushwaha PCIE2, PCIE2, PCIE2, PCIE2},
2396bda02cSPrabhakar Kushwaha [0x66] = {PCIE1, SGMII_FM1_DTSEC3, QSGMII_SW1_A, QSGMII_SW1_B,
2496bda02cSPrabhakar Kushwaha PCIE2, PCIE3, PCIE4, SATA1},
2596bda02cSPrabhakar Kushwaha [0x67] = {PCIE1, SGMII_FM1_DTSEC3, QSGMII_SW1_A, QSGMII_SW1_B,
2696bda02cSPrabhakar Kushwaha PCIE2, PCIE3, PCIE4, SGMII_FM1_DTSEC5},
2796bda02cSPrabhakar Kushwaha [0x69] = {PCIE1, SGMII_FM1_DTSEC3, QSGMII_SW1_A, QSGMII_SW1_B,
2896bda02cSPrabhakar Kushwaha PCIE2, PCIE3, SGMII_FM1_DTSEC4, SATA1},
2996bda02cSPrabhakar Kushwaha [0x86] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
3096bda02cSPrabhakar Kushwaha PCIE2, PCIE3, PCIE4, SATA1},
315f208d11SYork Sun [0x85] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
325f208d11SYork Sun PCIE2, PCIE2, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5},
3396bda02cSPrabhakar Kushwaha [0x87] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
3496bda02cSPrabhakar Kushwaha PCIE2, PCIE3, PCIE4, SGMII_FM1_DTSEC5},
35c2a61cd2SCodrin Ciubotariu [0x89] = {PCIE1, SGMII_SW1_MAC3, SGMII_SW1_MAC1, SGMII_SW1_MAC2,
36c2a61cd2SCodrin Ciubotariu PCIE2, PCIE3, SGMII_SW1_MAC4, SATA1},
37c2a61cd2SCodrin Ciubotariu [0x8D] = {PCIE1, SGMII_SW1_MAC3, SGMII_SW1_MAC1, SGMII_SW1_MAC2,
38c2a61cd2SCodrin Ciubotariu PCIE2, SGMII_SW1_MAC6, SGMII_SW1_MAC4, SGMII_SW1_MAC5},
3996bda02cSPrabhakar Kushwaha [0x8F] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
4096bda02cSPrabhakar Kushwaha AURORA, NONE, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5},
415f208d11SYork Sun [0xA5] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
425f208d11SYork Sun PCIE2, PCIE2, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5},
4396bda02cSPrabhakar Kushwaha [0xA7] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
4496bda02cSPrabhakar Kushwaha PCIE2, PCIE3, PCIE4, SGMII_FM1_DTSEC5},
4596bda02cSPrabhakar Kushwaha [0xAA] = {PCIE1, SGMII_FM1_DTSEC3, SGMII_FM1_DTSEC1, SGMII_FM1_DTSEC2,
4696bda02cSPrabhakar Kushwaha PCIE2, PCIE3, SGMII_FM1_DTSEC4, SGMII_FM1_DTSEC5},
475f208d11SYork Sun };
485f208d11SYork Sun
serdes_get_prtcl(int serdes,int cfg,int lane)495f208d11SYork Sun enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)
505f208d11SYork Sun {
5196bda02cSPrabhakar Kushwaha return serdes_cfg_tbl[cfg][lane];
525f208d11SYork Sun }
535f208d11SYork Sun
is_serdes_prtcl_valid(int serdes,u32 prtcl)545f208d11SYork Sun int is_serdes_prtcl_valid(int serdes, u32 prtcl)
555f208d11SYork Sun {
565f208d11SYork Sun int i;
575f208d11SYork Sun
5896bda02cSPrabhakar Kushwaha if (prtcl >= ARRAY_SIZE(serdes_cfg_tbl))
595f208d11SYork Sun return 0;
605f208d11SYork Sun
615f208d11SYork Sun for (i = 0; i < SRDS_MAX_LANES; i++) {
6296bda02cSPrabhakar Kushwaha if (serdes_cfg_tbl[prtcl][i] != NONE)
635f208d11SYork Sun return 1;
645f208d11SYork Sun }
655f208d11SYork Sun
665f208d11SYork Sun return 0;
675f208d11SYork Sun }
68