1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2010 Freescale Semiconductor, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __FSL_SERDES_H 8*4882a593Smuzhiyun #define __FSL_SERDES_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include <config.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun enum srds_prtcl { 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun * Nobody will check whether the device 'NONE' has been configured, 15*4882a593Smuzhiyun * So use it to indicate if the serdes_prtcl_map has been initialized. 16*4882a593Smuzhiyun */ 17*4882a593Smuzhiyun NONE = 0, 18*4882a593Smuzhiyun PCIE1, 19*4882a593Smuzhiyun PCIE2, 20*4882a593Smuzhiyun PCIE3, 21*4882a593Smuzhiyun PCIE4, 22*4882a593Smuzhiyun SATA1, 23*4882a593Smuzhiyun SATA2, 24*4882a593Smuzhiyun SRIO1, 25*4882a593Smuzhiyun SRIO2, 26*4882a593Smuzhiyun SGMII_FM1_DTSEC1, 27*4882a593Smuzhiyun SGMII_FM1_DTSEC2, 28*4882a593Smuzhiyun SGMII_FM1_DTSEC3, 29*4882a593Smuzhiyun SGMII_FM1_DTSEC4, 30*4882a593Smuzhiyun SGMII_FM1_DTSEC5, 31*4882a593Smuzhiyun SGMII_FM1_DTSEC6, 32*4882a593Smuzhiyun SGMII_FM1_DTSEC9, 33*4882a593Smuzhiyun SGMII_FM1_DTSEC10, 34*4882a593Smuzhiyun SGMII_FM2_DTSEC1, 35*4882a593Smuzhiyun SGMII_FM2_DTSEC2, 36*4882a593Smuzhiyun SGMII_FM2_DTSEC3, 37*4882a593Smuzhiyun SGMII_FM2_DTSEC4, 38*4882a593Smuzhiyun SGMII_FM2_DTSEC5, 39*4882a593Smuzhiyun SGMII_FM2_DTSEC6, 40*4882a593Smuzhiyun SGMII_FM2_DTSEC9, 41*4882a593Smuzhiyun SGMII_FM2_DTSEC10, 42*4882a593Smuzhiyun SGMII_TSEC1, 43*4882a593Smuzhiyun SGMII_TSEC2, 44*4882a593Smuzhiyun SGMII_TSEC3, 45*4882a593Smuzhiyun SGMII_TSEC4, 46*4882a593Smuzhiyun XAUI_FM1, 47*4882a593Smuzhiyun XAUI_FM2, 48*4882a593Smuzhiyun AURORA, 49*4882a593Smuzhiyun CPRI1, 50*4882a593Smuzhiyun CPRI2, 51*4882a593Smuzhiyun CPRI3, 52*4882a593Smuzhiyun CPRI4, 53*4882a593Smuzhiyun CPRI5, 54*4882a593Smuzhiyun CPRI6, 55*4882a593Smuzhiyun CPRI7, 56*4882a593Smuzhiyun CPRI8, 57*4882a593Smuzhiyun XAUI_FM1_MAC9, 58*4882a593Smuzhiyun XAUI_FM1_MAC10, 59*4882a593Smuzhiyun XAUI_FM2_MAC9, 60*4882a593Smuzhiyun XAUI_FM2_MAC10, 61*4882a593Smuzhiyun HIGIG_FM1_MAC9, 62*4882a593Smuzhiyun HIGIG_FM1_MAC10, 63*4882a593Smuzhiyun HIGIG_FM2_MAC9, 64*4882a593Smuzhiyun HIGIG_FM2_MAC10, 65*4882a593Smuzhiyun QSGMII_FM1_A, /* A indicates MACs 1-4 */ 66*4882a593Smuzhiyun QSGMII_FM1_B, /* B indicates MACs 5,6,9,10 */ 67*4882a593Smuzhiyun QSGMII_FM2_A, 68*4882a593Smuzhiyun QSGMII_FM2_B, 69*4882a593Smuzhiyun XFI_FM1_MAC1, 70*4882a593Smuzhiyun XFI_FM1_MAC2, 71*4882a593Smuzhiyun XFI_FM1_MAC9, 72*4882a593Smuzhiyun XFI_FM1_MAC10, 73*4882a593Smuzhiyun XFI_FM2_MAC9, 74*4882a593Smuzhiyun XFI_FM2_MAC10, 75*4882a593Smuzhiyun INTERLAKEN, 76*4882a593Smuzhiyun QSGMII_SW1_A, /* Indicates ports on L2 Switch */ 77*4882a593Smuzhiyun QSGMII_SW1_B, 78*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC1, 79*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC2, 80*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC3, 81*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC4, 82*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC5, 83*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC6, 84*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC9, 85*4882a593Smuzhiyun SGMII_2500_FM1_DTSEC10, 86*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC1, 87*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC2, 88*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC3, 89*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC4, 90*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC5, 91*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC6, 92*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC9, 93*4882a593Smuzhiyun SGMII_2500_FM2_DTSEC10, 94*4882a593Smuzhiyun SGMII_SW1_MAC1, 95*4882a593Smuzhiyun SGMII_SW1_MAC2, 96*4882a593Smuzhiyun SGMII_SW1_MAC3, 97*4882a593Smuzhiyun SGMII_SW1_MAC4, 98*4882a593Smuzhiyun SGMII_SW1_MAC5, 99*4882a593Smuzhiyun SGMII_SW1_MAC6, 100*4882a593Smuzhiyun SERDES_PRCTL_COUNT /* Keep this item the last one */ 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun enum srds { 104*4882a593Smuzhiyun FSL_SRDS_1 = 0, 105*4882a593Smuzhiyun FSL_SRDS_2 = 1, 106*4882a593Smuzhiyun FSL_SRDS_3 = 2, 107*4882a593Smuzhiyun FSL_SRDS_4 = 3, 108*4882a593Smuzhiyun }; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun int is_serdes_configured(enum srds_prtcl device); 111*4882a593Smuzhiyun void fsl_serdes_init(void); 112*4882a593Smuzhiyun const char *serdes_clock_to_string(u32 clock); 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun #ifdef CONFIG_FSL_CORENET 115*4882a593Smuzhiyun #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 116*4882a593Smuzhiyun int serdes_get_first_lane(u32 sd, enum srds_prtcl device); 117*4882a593Smuzhiyun enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane); 118*4882a593Smuzhiyun #else 119*4882a593Smuzhiyun int serdes_get_first_lane(enum srds_prtcl device); 120*4882a593Smuzhiyun #endif 121*4882a593Smuzhiyun #ifdef CONFIG_SYS_P4080_ERRATUM_SERDES9 122*4882a593Smuzhiyun void serdes_reset_rx(enum srds_prtcl device); 123*4882a593Smuzhiyun #endif 124*4882a593Smuzhiyun #endif 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun #endif /* __FSL_SERDES_H */ 127