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 } 143 return false; 144 } 145 146 bool has_erratum_a004477(void) 147 { 148 u32 svr = get_svr(); 149 u32 soc = SVR_SOC_VER(svr); 150 151 switch (soc) { 152 #ifdef CONFIG_PPC 153 case SVR_P1010: 154 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 155 case SVR_P1022: 156 case SVR_9131: 157 case SVR_9132: 158 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); 159 case SVR_P2020: 160 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0) || 161 IS_SVR_REV(svr, 2, 1); 162 case SVR_B4860: 163 case SVR_B4420: 164 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0); 165 case SVR_P4080: 166 return IS_SVR_REV(svr, 2, 0) || IS_SVR_REV(svr, 3, 0); 167 #endif 168 } 169 170 return false; 171 } 172 173 bool has_erratum_a008751(void) 174 { 175 u32 svr = get_svr(); 176 u32 soc = SVR_SOC_VER(svr); 177 178 switch (soc) { 179 #ifdef CONFIG_ARM64 180 case SVR_LS2080A: 181 case SVR_LS2085A: 182 return IS_SVR_REV(svr, 1, 0); 183 #endif 184 } 185 return false; 186 } 187 188 bool has_erratum_a010151(void) 189 { 190 u32 svr = get_svr(); 191 u32 soc = SVR_SOC_VER(svr); 192 193 switch (soc) { 194 #ifdef CONFIG_ARM64 195 case SVR_LS2080A: 196 case SVR_LS2085A: 197 case SVR_LS1046A: 198 case SVR_LS1012A: 199 return IS_SVR_REV(svr, 1, 0); 200 case SVR_LS1043A: 201 return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1); 202 #endif 203 #ifdef CONFIG_LS102XA 204 case SOC_VER_LS1020: 205 case SOC_VER_LS1021: 206 case SOC_VER_LS1022: 207 case SOC_VER_SLS1020: 208 return IS_SVR_REV(svr, 2, 0); 209 #endif 210 } 211 return false; 212 } 213 214 #endif 215