xref: /rk3399_ARM-atf/plat/nxp/common/soc_errata/errata_a050426.c (revision c43641ebf0fb9c0e02d4d1ed8ea75c5abf399e6a)
11ca72295SJiafei Pan /*
2*72feaad9SWasim Khan  * Copyright 2021-2022 NXP
31ca72295SJiafei Pan  *
41ca72295SJiafei Pan  * SPDX-License-Identifier: BSD-3-Clause
51ca72295SJiafei Pan  *
61ca72295SJiafei Pan  */
71ca72295SJiafei Pan 
8*72feaad9SWasim Khan #include <common/debug.h>
91ca72295SJiafei Pan #include <mmio.h>
101ca72295SJiafei Pan 
erratum_a050426(void)111ca72295SJiafei Pan void erratum_a050426(void)
121ca72295SJiafei Pan {
131ca72295SJiafei Pan 	uint32_t i, val3, val4;
141ca72295SJiafei Pan 
15*72feaad9SWasim Khan 	/*
16*72feaad9SWasim Khan 	 * Part of this Errata is implemented in RCW and SCRATCHRW5
17*72feaad9SWasim Khan 	 * register is updated to hold Errata number.
18*72feaad9SWasim Khan 	 * Validate whether RCW has already included required changes
19*72feaad9SWasim Khan 	 */
20*72feaad9SWasim Khan 	if (mmio_read_32(0x01e00210) != 0x00050426) {
21*72feaad9SWasim Khan 		ERROR("%s: Invalid RCW : ERR050426 not implemented\n", __func__);
22*72feaad9SWasim Khan 	}
23*72feaad9SWasim Khan 
241ca72295SJiafei Pan 	/* Enable BIST to access Internal memory locations */
251ca72295SJiafei Pan 	val3 = mmio_read_32(0x700117E60);
261ca72295SJiafei Pan 	mmio_write_32(0x700117E60, (val3 | 0x80000001));
271ca72295SJiafei Pan 	val4 = mmio_read_32(0x700117E90);
281ca72295SJiafei Pan 	mmio_write_32(0x700117E90, (val4 & 0xFFDFFFFF));
291ca72295SJiafei Pan 
301ca72295SJiafei Pan 	/* wriop Internal Memory.*/
311ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
321ca72295SJiafei Pan 		mmio_write_32(0x706312000 + (i * 4), 0x55555555);
331ca72295SJiafei Pan 		mmio_write_32(0x706312400 + (i * 4), 0x55555555);
341ca72295SJiafei Pan 		mmio_write_32(0x706312800 + (i * 4), 0x55555555);
351ca72295SJiafei Pan 		mmio_write_32(0x706314000 + (i * 4), 0x55555555);
361ca72295SJiafei Pan 		mmio_write_32(0x706314400 + (i * 4), 0x55555555);
371ca72295SJiafei Pan 		mmio_write_32(0x706314800 + (i * 4), 0x55555555);
381ca72295SJiafei Pan 		mmio_write_32(0x706314c00 + (i * 4), 0x55555555);
391ca72295SJiafei Pan 	}
401ca72295SJiafei Pan 	for (i = 0U; i < 3U; i++) {
411ca72295SJiafei Pan 		mmio_write_32(0x706316000 + (i * 4), 0x55555555);
421ca72295SJiafei Pan 		mmio_write_32(0x706320000 + (i * 4), 0x55555555);
431ca72295SJiafei Pan 		mmio_write_32(0x706320400 + (i * 4), 0x55555555);
441ca72295SJiafei Pan 	}
451ca72295SJiafei Pan 	for (i = 0U; i < 2U; i++) {
461ca72295SJiafei Pan 		mmio_write_32(0x70640a000 + (i * 4), 0x55555555);
471ca72295SJiafei Pan 	}
481ca72295SJiafei Pan 	for (i = 0U; i < 3U; i++) {
491ca72295SJiafei Pan 		mmio_write_32(0x706518000 + (i * 4), 0x55555555);
501ca72295SJiafei Pan 		mmio_write_32(0x706519000 + (i * 4), 0x55555555);
511ca72295SJiafei Pan 	}
521ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
531ca72295SJiafei Pan 		mmio_write_32(0x706522000 + (i * 4), 0x55555555);
541ca72295SJiafei Pan 		mmio_write_32(0x706522800 + (i * 4), 0x55555555);
551ca72295SJiafei Pan 		mmio_write_32(0x706523000 + (i * 4), 0x55555555);
561ca72295SJiafei Pan 		mmio_write_32(0x706523800 + (i * 4), 0x55555555);
571ca72295SJiafei Pan 		mmio_write_32(0x706524000 + (i * 4), 0x55555555);
581ca72295SJiafei Pan 		mmio_write_32(0x706524800 + (i * 4), 0x55555555);
591ca72295SJiafei Pan 		mmio_write_32(0x706608000 + (i * 4), 0x55555555);
601ca72295SJiafei Pan 		mmio_write_32(0x706608800 + (i * 4), 0x55555555);
611ca72295SJiafei Pan 		mmio_write_32(0x706609000 + (i * 4), 0x55555555);
621ca72295SJiafei Pan 		mmio_write_32(0x706609800 + (i * 4), 0x55555555);
631ca72295SJiafei Pan 		mmio_write_32(0x70660a000 + (i * 4), 0x55555555);
641ca72295SJiafei Pan 		mmio_write_32(0x70660a800 + (i * 4), 0x55555555);
651ca72295SJiafei Pan 		mmio_write_32(0x70660b000 + (i * 4), 0x55555555);
661ca72295SJiafei Pan 		mmio_write_32(0x70660b800 + (i * 4), 0x55555555);
671ca72295SJiafei Pan 	}
681ca72295SJiafei Pan 	for (i = 0U; i < 3U; i++) {
691ca72295SJiafei Pan 		mmio_write_32(0x70660c000 + (i * 4), 0x55555555);
701ca72295SJiafei Pan 		mmio_write_32(0x70660c800 + (i * 4), 0x55555555);
711ca72295SJiafei Pan 	}
721ca72295SJiafei Pan 	for (i = 0U; i < 2U; i++) {
731ca72295SJiafei Pan 		mmio_write_32(0x706718000 + (i * 4), 0x55555555);
741ca72295SJiafei Pan 		mmio_write_32(0x706718800 + (i * 4), 0x55555555);
751ca72295SJiafei Pan 	}
76*72feaad9SWasim Khan 	mmio_write_32(0x706b0a000, 0x55555555);
771ca72295SJiafei Pan 
781ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
791ca72295SJiafei Pan 		mmio_write_32(0x706b0e000 + (i * 4), 0x55555555);
801ca72295SJiafei Pan 		mmio_write_32(0x706b0e800 + (i * 4), 0x55555555);
811ca72295SJiafei Pan 	}
821ca72295SJiafei Pan 	for (i = 0U; i < 2U; i++) {
831ca72295SJiafei Pan 		mmio_write_32(0x706b10000 + (i * 4), 0x55555555);
841ca72295SJiafei Pan 		mmio_write_32(0x706b10400 + (i * 4), 0x55555555);
851ca72295SJiafei Pan 	}
861ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
871ca72295SJiafei Pan 		mmio_write_32(0x706b14000 + (i * 4), 0x55555555);
881ca72295SJiafei Pan 		mmio_write_32(0x706b14800 + (i * 4), 0x55555555);
891ca72295SJiafei Pan 		mmio_write_32(0x706b15000 + (i * 4), 0x55555555);
901ca72295SJiafei Pan 		mmio_write_32(0x706b15800 + (i * 4), 0x55555555);
911ca72295SJiafei Pan 	}
92*72feaad9SWasim Khan 	mmio_write_32(0x706e12000, 0x55555555);
931ca72295SJiafei Pan 
941ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
951ca72295SJiafei Pan 		mmio_write_32(0x706e14000 + (i * 4), 0x55555555);
961ca72295SJiafei Pan 		mmio_write_32(0x706e14800 + (i * 4), 0x55555555);
971ca72295SJiafei Pan 	}
981ca72295SJiafei Pan 	for (i = 0U; i < 2U; i++) {
991ca72295SJiafei Pan 		mmio_write_32(0x706e16000 + (i * 4), 0x55555555);
1001ca72295SJiafei Pan 		mmio_write_32(0x706e16400 + (i * 4), 0x55555555);
1011ca72295SJiafei Pan 	}
1021ca72295SJiafei Pan 	for (i = 0U; i < 3U; i++) {
1031ca72295SJiafei Pan 		mmio_write_32(0x706e1a000 + (i * 4), 0x55555555);
1041ca72295SJiafei Pan 		mmio_write_32(0x706e1a800 + (i * 4), 0x55555555);
1051ca72295SJiafei Pan 		mmio_write_32(0x706e1b000 + (i * 4), 0x55555555);
1061ca72295SJiafei Pan 		mmio_write_32(0x706e1b800 + (i * 4), 0x55555555);
1071ca72295SJiafei Pan 		mmio_write_32(0x706e1c000 + (i * 4), 0x55555555);
1081ca72295SJiafei Pan 		mmio_write_32(0x706e1c800 + (i * 4), 0x55555555);
1091ca72295SJiafei Pan 		mmio_write_32(0x706e1e000 + (i * 4), 0x55555555);
1101ca72295SJiafei Pan 		mmio_write_32(0x706e1e800 + (i * 4), 0x55555555);
1111ca72295SJiafei Pan 		mmio_write_32(0x706e1f000 + (i * 4), 0x55555555);
1121ca72295SJiafei Pan 		mmio_write_32(0x706e1f800 + (i * 4), 0x55555555);
1131ca72295SJiafei Pan 		mmio_write_32(0x706e20000 + (i * 4), 0x55555555);
1141ca72295SJiafei Pan 		mmio_write_32(0x706e20800 + (i * 4), 0x55555555);
1151ca72295SJiafei Pan 	}
1161ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
1171ca72295SJiafei Pan 		mmio_write_32(0x707108000 + (i * 4), 0x55555555);
1181ca72295SJiafei Pan 		mmio_write_32(0x707109000 + (i * 4), 0x55555555);
1191ca72295SJiafei Pan 		mmio_write_32(0x70710a000 + (i * 4), 0x55555555);
1201ca72295SJiafei Pan 	}
1211ca72295SJiafei Pan 	for (i = 0U; i < 2U; i++) {
1221ca72295SJiafei Pan 		mmio_write_32(0x70711c000 + (i * 4), 0x55555555);
1231ca72295SJiafei Pan 		mmio_write_32(0x70711c800 + (i * 4), 0x55555555);
1241ca72295SJiafei Pan 		mmio_write_32(0x70711d000 + (i * 4), 0x55555555);
1251ca72295SJiafei Pan 		mmio_write_32(0x70711d800 + (i * 4), 0x55555555);
1261ca72295SJiafei Pan 		mmio_write_32(0x70711e000 + (i * 4), 0x55555555);
1271ca72295SJiafei Pan 	}
1281ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
1291ca72295SJiafei Pan 		mmio_write_32(0x707120000 + (i * 4), 0x55555555);
1301ca72295SJiafei Pan 		mmio_write_32(0x707121000 + (i * 4), 0x55555555);
1311ca72295SJiafei Pan 	}
1321ca72295SJiafei Pan 	for (i = 0U; i < 3U; i++) {
1331ca72295SJiafei Pan 		mmio_write_32(0x707122000 + (i * 4), 0x55555555);
1341ca72295SJiafei Pan 		mmio_write_32(0x70725a000 + (i * 4), 0x55555555);
1351ca72295SJiafei Pan 		mmio_write_32(0x70725b000 + (i * 4), 0x55555555);
1361ca72295SJiafei Pan 		mmio_write_32(0x70725c000 + (i * 4), 0x55555555);
1371ca72295SJiafei Pan 		mmio_write_32(0x70725e000 + (i * 4), 0x55555555);
1381ca72295SJiafei Pan 		mmio_write_32(0x70725e400 + (i * 4), 0x55555555);
1391ca72295SJiafei Pan 		mmio_write_32(0x70725e800 + (i * 4), 0x55555555);
1401ca72295SJiafei Pan 		mmio_write_32(0x70725ec00 + (i * 4), 0x55555555);
1411ca72295SJiafei Pan 		mmio_write_32(0x70725f000 + (i * 4), 0x55555555);
1421ca72295SJiafei Pan 		mmio_write_32(0x70725f400 + (i * 4), 0x55555555);
1431ca72295SJiafei Pan 		mmio_write_32(0x707340000 + (i * 4), 0x55555555);
1441ca72295SJiafei Pan 		mmio_write_32(0x707346000 + (i * 4), 0x55555555);
1451ca72295SJiafei Pan 		mmio_write_32(0x707484000 + (i * 4), 0x55555555);
1461ca72295SJiafei Pan 		mmio_write_32(0x70748a000 + (i * 4), 0x55555555);
1471ca72295SJiafei Pan 		mmio_write_32(0x70748b000 + (i * 4), 0x55555555);
1481ca72295SJiafei Pan 		mmio_write_32(0x70748c000 + (i * 4), 0x55555555);
1491ca72295SJiafei Pan 		mmio_write_32(0x70748d000 + (i * 4), 0x55555555);
1501ca72295SJiafei Pan 	}
1511ca72295SJiafei Pan 
1521ca72295SJiafei Pan 	/* EDMA Internal Memory.*/
1531ca72295SJiafei Pan 	for (i = 0U; i < 5U; i++) {
1541ca72295SJiafei Pan 		mmio_write_32(0x70a208000 + (i * 4), 0x55555555);
1551ca72295SJiafei Pan 		mmio_write_32(0x70a208800 + (i * 4), 0x55555555);
1561ca72295SJiafei Pan 		mmio_write_32(0x70a209000 + (i * 4), 0x55555555);
1571ca72295SJiafei Pan 		mmio_write_32(0x70a209800 + (i * 4), 0x55555555);
1581ca72295SJiafei Pan 	}
1591ca72295SJiafei Pan 
1601ca72295SJiafei Pan 	/* QDMA Internal Memory.*/
1611ca72295SJiafei Pan 	for (i = 0U; i < 5U; i++) {
1621ca72295SJiafei Pan 		mmio_write_32(0x70b008000 + (i * 4), 0x55555555);
1631ca72295SJiafei Pan 		mmio_write_32(0x70b00c000 + (i * 4), 0x55555555);
1641ca72295SJiafei Pan 		mmio_write_32(0x70b010000 + (i * 4), 0x55555555);
1651ca72295SJiafei Pan 		mmio_write_32(0x70b014000 + (i * 4), 0x55555555);
1661ca72295SJiafei Pan 		mmio_write_32(0x70b018000 + (i * 4), 0x55555555);
1671ca72295SJiafei Pan 		mmio_write_32(0x70b018400 + (i * 4), 0x55555555);
1681ca72295SJiafei Pan 		mmio_write_32(0x70b01a000 + (i * 4), 0x55555555);
1691ca72295SJiafei Pan 		mmio_write_32(0x70b01a400 + (i * 4), 0x55555555);
1701ca72295SJiafei Pan 		mmio_write_32(0x70b01c000 + (i * 4), 0x55555555);
1711ca72295SJiafei Pan 		mmio_write_32(0x70b01d000 + (i * 4), 0x55555555);
1721ca72295SJiafei Pan 		mmio_write_32(0x70b01e000 + (i * 4), 0x55555555);
1731ca72295SJiafei Pan 		mmio_write_32(0x70b01e800 + (i * 4), 0x55555555);
1741ca72295SJiafei Pan 		mmio_write_32(0x70b01f000 + (i * 4), 0x55555555);
1751ca72295SJiafei Pan 		mmio_write_32(0x70b01f800 + (i * 4), 0x55555555);
1761ca72295SJiafei Pan 		mmio_write_32(0x70b020000 + (i * 4), 0x55555555);
1771ca72295SJiafei Pan 		mmio_write_32(0x70b020400 + (i * 4), 0x55555555);
1781ca72295SJiafei Pan 		mmio_write_32(0x70b020800 + (i * 4), 0x55555555);
1791ca72295SJiafei Pan 		mmio_write_32(0x70b020c00 + (i * 4), 0x55555555);
1801ca72295SJiafei Pan 		mmio_write_32(0x70b022000 + (i * 4), 0x55555555);
1811ca72295SJiafei Pan 		mmio_write_32(0x70b022400 + (i * 4), 0x55555555);
1821ca72295SJiafei Pan 		mmio_write_32(0x70b024000 + (i * 4), 0x55555555);
1831ca72295SJiafei Pan 		mmio_write_32(0x70b024800 + (i * 4), 0x55555555);
1841ca72295SJiafei Pan 		mmio_write_32(0x70b025000 + (i * 4), 0x55555555);
1851ca72295SJiafei Pan 		mmio_write_32(0x70b025800 + (i * 4), 0x55555555);
1861ca72295SJiafei Pan 	}
1871ca72295SJiafei Pan 	for (i = 0U; i < 4U; i++) {
1881ca72295SJiafei Pan 		mmio_write_32(0x70b026000 + (i * 4), 0x55555555);
1891ca72295SJiafei Pan 		mmio_write_32(0x70b026200 + (i * 4), 0x55555555);
1901ca72295SJiafei Pan 	}
1911ca72295SJiafei Pan 	for (i = 0U; i < 5U; i++) {
1921ca72295SJiafei Pan 		mmio_write_32(0x70b028000 + (i * 4), 0x55555555);
1931ca72295SJiafei Pan 		mmio_write_32(0x70b028800 + (i * 4), 0x55555555);
1941ca72295SJiafei Pan 		mmio_write_32(0x70b029000 + (i * 4), 0x55555555);
1951ca72295SJiafei Pan 		mmio_write_32(0x70b029800 + (i * 4), 0x55555555);
1961ca72295SJiafei Pan 	}
1971ca72295SJiafei Pan 
1981ca72295SJiafei Pan 	/* Disable BIST */
1991ca72295SJiafei Pan 	mmio_write_32(0x700117E60, val3);
2001ca72295SJiafei Pan 	mmio_write_32(0x700117E90, val4);
2011ca72295SJiafei Pan }
202