xref: /arm-trusted-firmware/plat/nxp/common/soc_errata/errata_a050426.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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