mips: mt76xx: Implement new d-cache fix in last_stage_init()
[project/bcm63xx/u-boot.git] / arch / mips / mach-mtmips / cpu.c
index b0a6397d68f0a5366246a4b960f11fb08239d416..7afc2c5940d3a88e3e283ba36249b4961d183a18 100644 (file)
@@ -68,3 +68,29 @@ int print_cpuinfo(void)
 
        return 0;
 }
+
+int last_stage_init(void)
+{
+       void *src, *dst;
+
+       src = malloc(SZ_64K);
+       dst = malloc(SZ_64K);
+       if (!src || !dst) {
+               printf("Can't allocate buffer for cache cleanup copy!\n");
+               return 0;
+       }
+
+       /*
+        * It has been noticed, that sometimes the d-cache is not in a
+        * "clean-state" when U-Boot is running on MT7688. This was
+        * detected when using the ethernet driver (which uses d-cache)
+        * and a TFTP command does not complete. Copying an area of 64KiB
+        * in DDR at a very late bootup time in U-Boot, directly before
+        * calling into the prompt, seems to fix this issue.
+        */
+       memcpy(dst, src, SZ_64K);
+       free(src);
+       free(dst);
+
+       return 0;
+}