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