Home | History | Annotate | Download | only in common
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * Freescale USB Controller
      4  *
      5  * Copyright 2013 Freescale Semiconductor, Inc.
      6  */
      7 
      8 #include <common.h>
      9 #include <fsl_errata.h>
     10 #include<fsl_usb.h>
     11 #if defined(CONFIG_FSL_LSCH2) || defined(CONFIG_FSL_LSCH3) || \
     12 	defined(CONFIG_ARM)
     13 #include <asm/arch/clock.h>
     14 #endif
     15 
     16 /* USB Erratum Checking code */
     17 #if defined(CONFIG_PPC) || defined(CONFIG_ARM)
     18 bool has_dual_phy(void)
     19 {
     20 	u32 svr = get_svr();
     21 	u32 soc = SVR_SOC_VER(svr);
     22 
     23 	switch (soc) {
     24 #ifdef CONFIG_PPC
     25 	case SVR_T1023:
     26 	case SVR_T1024:
     27 	case SVR_T1013:
     28 	case SVR_T1014:
     29 		return IS_SVR_REV(svr, 1, 0);
     30 	case SVR_T1040:
     31 	case SVR_T1042:
     32 	case SVR_T1020:
     33 	case SVR_T1022:
     34 	case SVR_T2080:
     35 	case SVR_T2081:
     36 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
     37 	case SVR_T4240:
     38 	case SVR_T4160:
     39 	case SVR_T4080:
     40 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
     41 #endif
     42 	}
     43 
     44 	return false;
     45 }
     46 
     47 bool has_erratum_a006261(void)
     48 {
     49 	u32 svr = get_svr();
     50 	u32 soc = SVR_SOC_VER(svr);
     51 
     52 	switch (soc) {
     53 #ifdef CONFIG_PPC
     54 	case SVR_P1010:
     55 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
     56 	case SVR_P2041:
     57 	case SVR_P2040:
     58 		return IS_SVR_REV(svr, 1, 0) ||
     59 			IS_SVR_REV(svr, 1, 1) ||
     60 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
     61 	case SVR_P3041:
     62 		return IS_SVR_REV(svr, 1, 0) ||
     63 			IS_SVR_REV(svr, 1, 1) ||
     64 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
     65 	case SVR_P5010:
     66 	case SVR_P5020:
     67 	case SVR_P5021:
     68 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
     69 	case SVR_T4240:
     70 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
     71 	case SVR_P5040:
     72 		return IS_SVR_REV(svr, 1, 0) ||
     73 			IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 2, 1);
     74 #endif
     75 	}
     76 
     77 	return false;
     78 }
     79 
     80 bool has_erratum_a007075(void)
     81 {
     82 	u32 svr = get_svr();
     83 	u32 soc = SVR_SOC_VER(svr);
     84 
     85 	switch (soc) {
     86 #ifdef CONFIG_PPC
     87 	case SVR_B4860:
     88 	case SVR_B4420:
     89 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
     90 	case SVR_P1010:
     91 		return IS_SVR_REV(svr, 1, 0);
     92 	case SVR_P4080:
     93 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
     94 #endif
     95 	}
     96 	return false;
     97 }
     98 
     99 bool has_erratum_a007798(void)
    100 {
    101 #ifdef CONFIG_PPC
    102 	return SVR_SOC_VER(get_svr()) == SVR_T4240 &&
    103 		IS_SVR_REV(get_svr(), 2, 0);
    104 #endif
    105 	return false;
    106 }
    107 
    108 bool has_erratum_a007792(void)
    109 {
    110 	u32 svr = get_svr();
    111 	u32 soc = SVR_SOC_VER(svr);
    112 
    113 	switch (soc) {
    114 #ifdef CONFIG_PPC
    115 	case SVR_T4240:
    116 	case SVR_T4160:
    117 	case SVR_T4080:
    118 		return IS_SVR_REV(svr, 2, 0);
    119 	case SVR_T1024:
    120 	case SVR_T1023:
    121 		return IS_SVR_REV(svr, 1, 0);
    122 	case SVR_T1040:
    123 	case SVR_T1042:
    124 	case SVR_T1020:
    125 	case SVR_T1022:
    126 	case SVR_T2080:
    127 	case SVR_T2081:
    128 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
    129 #endif
    130 	}
    131 	return false;
    132 }
    133 
    134 bool has_erratum_a005697(void)
    135 {
    136 	u32 svr = get_svr();
    137 	u32 soc = SVR_SOC_VER(svr);
    138 
    139 	switch (soc) {
    140 #ifdef CONFIG_PPC
    141 	case SVR_9131:
    142 	case SVR_9132:
    143 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
    144 #endif
    145 #ifdef ONFIG_ARM64
    146 	case SVR_LS1012A:
    147 		return IS_SVR_REV(svr, 1, 0);
    148 #endif
    149 	}
    150 	return false;
    151 }
    152 
    153 bool has_erratum_a004477(void)
    154 {
    155 	u32 svr = get_svr();
    156 	u32 soc = SVR_SOC_VER(svr);
    157 
    158 	switch (soc) {
    159 #ifdef CONFIG_PPC
    160 	case SVR_P1010:
    161 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
    162 	case SVR_P1022:
    163 	case SVR_9131:
    164 	case SVR_9132:
    165 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
    166 	case SVR_P2020:
    167 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) ||
    168 			IS_SVR_REV(svr, 2, 1);
    169 	case SVR_B4860:
    170 	case SVR_B4420:
    171 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
    172 	case SVR_P4080:
    173 		return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0);
    174 #endif
    175 	}
    176 
    177 	return false;
    178 }
    179 
    180 bool has_erratum_a008751(void)
    181 {
    182 	u32 svr = get_svr();
    183 	u32 soc = SVR_SOC_VER(svr);
    184 
    185 	switch (soc) {
    186 #ifdef CONFIG_ARM64
    187 	case SVR_LS2080A:
    188 	case SVR_LS2085A:
    189 		return IS_SVR_REV(svr, 1, 0);
    190 #endif
    191 	}
    192 	return false;
    193 }
    194 
    195 bool has_erratum_a010151(void)
    196 {
    197 	u32 svr = get_svr();
    198 	u32 soc = SVR_SOC_VER(svr);
    199 
    200 #ifdef CONFIG_ARM64
    201 	if (IS_SVR_DEV(svr, SVR_DEV(SVR_LS1043A)))
    202 		return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
    203 #endif
    204 
    205 	switch (soc) {
    206 #ifdef CONFIG_ARM64
    207 	case SVR_LS2080A:
    208 	case SVR_LS2085A:
    209 			/* fallthrough */
    210 	case SVR_LS2088A:
    211 			/* fallthrough */
    212 	case SVR_LS2081A:
    213 	case SVR_LS1046A:
    214 	case SVR_LS1012A:
    215 		return IS_SVR_REV(svr, 1, 0);
    216 #endif
    217 #ifdef CONFIG_ARCH_LS1021A
    218 	case SOC_VER_LS1020:
    219 	case SOC_VER_LS1021:
    220 	case SOC_VER_LS1022:
    221 	case SOC_VER_SLS1020:
    222 		return IS_SVR_REV(svr, 2, 0);
    223 #endif
    224 	}
    225 	return false;
    226 }
    227 
    228 #endif
    229