fsl-errata.c 4.1 KB

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