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