Browse Source

Merge tag 'mips-fixes-for-2019.07' of https://gitlab.denx.de/u-boot/custodians/u-boot-mips

- mtmips: network stability fixes for gardena-smart-gateway
Tom Rini 4 years ago
parent
commit
0bd2a92f54
2 changed files with 27 additions and 1 deletions
  1. 1 1
      arch/mips/Kconfig
  2. 26 0
      arch/mips/mach-mtmips/cpu.c

+ 1 - 1
arch/mips/Kconfig

@@ -84,13 +84,13 @@ config ARCH_MTMIPS
 	select DM_SERIAL
 	imply DM_SPI
 	imply DM_SPI_FLASH
+	select LAST_STAGE_INIT
 	select MIPS_TUNE_24KC
 	select OF_CONTROL
 	select ROM_EXCEPTION_VECTORS
 	select SUPPORTS_CPU_MIPS32_R1
 	select SUPPORTS_CPU_MIPS32_R2
 	select SUPPORTS_LITTLE_ENDIAN
-	select SYS_MALLOC_CLEAR_ON_INIT
 	select SYSRESET
 
 config ARCH_JZ47XX

+ 26 - 0
arch/mips/mach-mtmips/cpu.c

@@ -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;
+}