errata_a050426.c 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /*
  2. * Copyright 2021-2022 NXP
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. *
  6. */
  7. #include <common/debug.h>
  8. #include <mmio.h>
  9. void erratum_a050426(void)
  10. {
  11. uint32_t i, val3, val4;
  12. /*
  13. * Part of this Errata is implemented in RCW and SCRATCHRW5
  14. * register is updated to hold Errata number.
  15. * Validate whether RCW has already included required changes
  16. */
  17. if (mmio_read_32(0x01e00210) != 0x00050426) {
  18. ERROR("%s: Invalid RCW : ERR050426 not implemented\n", __func__);
  19. }
  20. /* Enable BIST to access Internal memory locations */
  21. val3 = mmio_read_32(0x700117E60);
  22. mmio_write_32(0x700117E60, (val3 | 0x80000001));
  23. val4 = mmio_read_32(0x700117E90);
  24. mmio_write_32(0x700117E90, (val4 & 0xFFDFFFFF));
  25. /* wriop Internal Memory.*/
  26. for (i = 0U; i < 4U; i++) {
  27. mmio_write_32(0x706312000 + (i * 4), 0x55555555);
  28. mmio_write_32(0x706312400 + (i * 4), 0x55555555);
  29. mmio_write_32(0x706312800 + (i * 4), 0x55555555);
  30. mmio_write_32(0x706314000 + (i * 4), 0x55555555);
  31. mmio_write_32(0x706314400 + (i * 4), 0x55555555);
  32. mmio_write_32(0x706314800 + (i * 4), 0x55555555);
  33. mmio_write_32(0x706314c00 + (i * 4), 0x55555555);
  34. }
  35. for (i = 0U; i < 3U; i++) {
  36. mmio_write_32(0x706316000 + (i * 4), 0x55555555);
  37. mmio_write_32(0x706320000 + (i * 4), 0x55555555);
  38. mmio_write_32(0x706320400 + (i * 4), 0x55555555);
  39. }
  40. for (i = 0U; i < 2U; i++) {
  41. mmio_write_32(0x70640a000 + (i * 4), 0x55555555);
  42. }
  43. for (i = 0U; i < 3U; i++) {
  44. mmio_write_32(0x706518000 + (i * 4), 0x55555555);
  45. mmio_write_32(0x706519000 + (i * 4), 0x55555555);
  46. }
  47. for (i = 0U; i < 4U; i++) {
  48. mmio_write_32(0x706522000 + (i * 4), 0x55555555);
  49. mmio_write_32(0x706522800 + (i * 4), 0x55555555);
  50. mmio_write_32(0x706523000 + (i * 4), 0x55555555);
  51. mmio_write_32(0x706523800 + (i * 4), 0x55555555);
  52. mmio_write_32(0x706524000 + (i * 4), 0x55555555);
  53. mmio_write_32(0x706524800 + (i * 4), 0x55555555);
  54. mmio_write_32(0x706608000 + (i * 4), 0x55555555);
  55. mmio_write_32(0x706608800 + (i * 4), 0x55555555);
  56. mmio_write_32(0x706609000 + (i * 4), 0x55555555);
  57. mmio_write_32(0x706609800 + (i * 4), 0x55555555);
  58. mmio_write_32(0x70660a000 + (i * 4), 0x55555555);
  59. mmio_write_32(0x70660a800 + (i * 4), 0x55555555);
  60. mmio_write_32(0x70660b000 + (i * 4), 0x55555555);
  61. mmio_write_32(0x70660b800 + (i * 4), 0x55555555);
  62. }
  63. for (i = 0U; i < 3U; i++) {
  64. mmio_write_32(0x70660c000 + (i * 4), 0x55555555);
  65. mmio_write_32(0x70660c800 + (i * 4), 0x55555555);
  66. }
  67. for (i = 0U; i < 2U; i++) {
  68. mmio_write_32(0x706718000 + (i * 4), 0x55555555);
  69. mmio_write_32(0x706718800 + (i * 4), 0x55555555);
  70. }
  71. mmio_write_32(0x706b0a000, 0x55555555);
  72. for (i = 0U; i < 4U; i++) {
  73. mmio_write_32(0x706b0e000 + (i * 4), 0x55555555);
  74. mmio_write_32(0x706b0e800 + (i * 4), 0x55555555);
  75. }
  76. for (i = 0U; i < 2U; i++) {
  77. mmio_write_32(0x706b10000 + (i * 4), 0x55555555);
  78. mmio_write_32(0x706b10400 + (i * 4), 0x55555555);
  79. }
  80. for (i = 0U; i < 4U; i++) {
  81. mmio_write_32(0x706b14000 + (i * 4), 0x55555555);
  82. mmio_write_32(0x706b14800 + (i * 4), 0x55555555);
  83. mmio_write_32(0x706b15000 + (i * 4), 0x55555555);
  84. mmio_write_32(0x706b15800 + (i * 4), 0x55555555);
  85. }
  86. mmio_write_32(0x706e12000, 0x55555555);
  87. for (i = 0U; i < 4U; i++) {
  88. mmio_write_32(0x706e14000 + (i * 4), 0x55555555);
  89. mmio_write_32(0x706e14800 + (i * 4), 0x55555555);
  90. }
  91. for (i = 0U; i < 2U; i++) {
  92. mmio_write_32(0x706e16000 + (i * 4), 0x55555555);
  93. mmio_write_32(0x706e16400 + (i * 4), 0x55555555);
  94. }
  95. for (i = 0U; i < 3U; i++) {
  96. mmio_write_32(0x706e1a000 + (i * 4), 0x55555555);
  97. mmio_write_32(0x706e1a800 + (i * 4), 0x55555555);
  98. mmio_write_32(0x706e1b000 + (i * 4), 0x55555555);
  99. mmio_write_32(0x706e1b800 + (i * 4), 0x55555555);
  100. mmio_write_32(0x706e1c000 + (i * 4), 0x55555555);
  101. mmio_write_32(0x706e1c800 + (i * 4), 0x55555555);
  102. mmio_write_32(0x706e1e000 + (i * 4), 0x55555555);
  103. mmio_write_32(0x706e1e800 + (i * 4), 0x55555555);
  104. mmio_write_32(0x706e1f000 + (i * 4), 0x55555555);
  105. mmio_write_32(0x706e1f800 + (i * 4), 0x55555555);
  106. mmio_write_32(0x706e20000 + (i * 4), 0x55555555);
  107. mmio_write_32(0x706e20800 + (i * 4), 0x55555555);
  108. }
  109. for (i = 0U; i < 4U; i++) {
  110. mmio_write_32(0x707108000 + (i * 4), 0x55555555);
  111. mmio_write_32(0x707109000 + (i * 4), 0x55555555);
  112. mmio_write_32(0x70710a000 + (i * 4), 0x55555555);
  113. }
  114. for (i = 0U; i < 2U; i++) {
  115. mmio_write_32(0x70711c000 + (i * 4), 0x55555555);
  116. mmio_write_32(0x70711c800 + (i * 4), 0x55555555);
  117. mmio_write_32(0x70711d000 + (i * 4), 0x55555555);
  118. mmio_write_32(0x70711d800 + (i * 4), 0x55555555);
  119. mmio_write_32(0x70711e000 + (i * 4), 0x55555555);
  120. }
  121. for (i = 0U; i < 4U; i++) {
  122. mmio_write_32(0x707120000 + (i * 4), 0x55555555);
  123. mmio_write_32(0x707121000 + (i * 4), 0x55555555);
  124. }
  125. for (i = 0U; i < 3U; i++) {
  126. mmio_write_32(0x707122000 + (i * 4), 0x55555555);
  127. mmio_write_32(0x70725a000 + (i * 4), 0x55555555);
  128. mmio_write_32(0x70725b000 + (i * 4), 0x55555555);
  129. mmio_write_32(0x70725c000 + (i * 4), 0x55555555);
  130. mmio_write_32(0x70725e000 + (i * 4), 0x55555555);
  131. mmio_write_32(0x70725e400 + (i * 4), 0x55555555);
  132. mmio_write_32(0x70725e800 + (i * 4), 0x55555555);
  133. mmio_write_32(0x70725ec00 + (i * 4), 0x55555555);
  134. mmio_write_32(0x70725f000 + (i * 4), 0x55555555);
  135. mmio_write_32(0x70725f400 + (i * 4), 0x55555555);
  136. mmio_write_32(0x707340000 + (i * 4), 0x55555555);
  137. mmio_write_32(0x707346000 + (i * 4), 0x55555555);
  138. mmio_write_32(0x707484000 + (i * 4), 0x55555555);
  139. mmio_write_32(0x70748a000 + (i * 4), 0x55555555);
  140. mmio_write_32(0x70748b000 + (i * 4), 0x55555555);
  141. mmio_write_32(0x70748c000 + (i * 4), 0x55555555);
  142. mmio_write_32(0x70748d000 + (i * 4), 0x55555555);
  143. }
  144. /* EDMA Internal Memory.*/
  145. for (i = 0U; i < 5U; i++) {
  146. mmio_write_32(0x70a208000 + (i * 4), 0x55555555);
  147. mmio_write_32(0x70a208800 + (i * 4), 0x55555555);
  148. mmio_write_32(0x70a209000 + (i * 4), 0x55555555);
  149. mmio_write_32(0x70a209800 + (i * 4), 0x55555555);
  150. }
  151. /* QDMA Internal Memory.*/
  152. for (i = 0U; i < 5U; i++) {
  153. mmio_write_32(0x70b008000 + (i * 4), 0x55555555);
  154. mmio_write_32(0x70b00c000 + (i * 4), 0x55555555);
  155. mmio_write_32(0x70b010000 + (i * 4), 0x55555555);
  156. mmio_write_32(0x70b014000 + (i * 4), 0x55555555);
  157. mmio_write_32(0x70b018000 + (i * 4), 0x55555555);
  158. mmio_write_32(0x70b018400 + (i * 4), 0x55555555);
  159. mmio_write_32(0x70b01a000 + (i * 4), 0x55555555);
  160. mmio_write_32(0x70b01a400 + (i * 4), 0x55555555);
  161. mmio_write_32(0x70b01c000 + (i * 4), 0x55555555);
  162. mmio_write_32(0x70b01d000 + (i * 4), 0x55555555);
  163. mmio_write_32(0x70b01e000 + (i * 4), 0x55555555);
  164. mmio_write_32(0x70b01e800 + (i * 4), 0x55555555);
  165. mmio_write_32(0x70b01f000 + (i * 4), 0x55555555);
  166. mmio_write_32(0x70b01f800 + (i * 4), 0x55555555);
  167. mmio_write_32(0x70b020000 + (i * 4), 0x55555555);
  168. mmio_write_32(0x70b020400 + (i * 4), 0x55555555);
  169. mmio_write_32(0x70b020800 + (i * 4), 0x55555555);
  170. mmio_write_32(0x70b020c00 + (i * 4), 0x55555555);
  171. mmio_write_32(0x70b022000 + (i * 4), 0x55555555);
  172. mmio_write_32(0x70b022400 + (i * 4), 0x55555555);
  173. mmio_write_32(0x70b024000 + (i * 4), 0x55555555);
  174. mmio_write_32(0x70b024800 + (i * 4), 0x55555555);
  175. mmio_write_32(0x70b025000 + (i * 4), 0x55555555);
  176. mmio_write_32(0x70b025800 + (i * 4), 0x55555555);
  177. }
  178. for (i = 0U; i < 4U; i++) {
  179. mmio_write_32(0x70b026000 + (i * 4), 0x55555555);
  180. mmio_write_32(0x70b026200 + (i * 4), 0x55555555);
  181. }
  182. for (i = 0U; i < 5U; i++) {
  183. mmio_write_32(0x70b028000 + (i * 4), 0x55555555);
  184. mmio_write_32(0x70b028800 + (i * 4), 0x55555555);
  185. mmio_write_32(0x70b029000 + (i * 4), 0x55555555);
  186. mmio_write_32(0x70b029800 + (i * 4), 0x55555555);
  187. }
  188. /* Disable BIST */
  189. mmio_write_32(0x700117E60, val3);
  190. mmio_write_32(0x700117E90, val4);
  191. }