Browse Source

ar71xx: fix lzma loader performance issues

Some bootloaders set a cache cohenrency to a very slow mode. Use code from
Linux kernel to set it to "Cacheable, noncoherent, write-back, write
allocate".

Perfomance impact is significant on TP-Link EAP245 board, kernel
decompression time fall from 33 seconds to less than 1.

Signed-off-by: Julien Dusser <[email protected]>
Julien Dusser 8 years ago
parent
commit
8c5702f2a0
1 changed files with 13 additions and 0 deletions
  1. 13 0
      target/linux/ar71xx/image/lzma-loader/src/head.S

+ 13 - 0
target/linux/ar71xx/image/lzma-loader/src/head.S

@@ -42,6 +42,19 @@ LEAF(startup)
 	mtc0	t0, CP0_STATUS
 	ehb
 
+	/*
+	 * Some bootloaders set the 'Kseg0 coherency algorithm' to
+	 * 'Cacheable, noncoherent, write-through, no write allocate'
+	 * and this cause performance issues. Let's go and change it to
+	 * 'Cacheable, noncoherent, write-back, write allocate'
+	 */
+	mfc0	t0, CP0_CONFIG
+	li	t1, ~7			#~CONF_CM_CMASK
+	and	t0, t1
+	ori	t0, 3			#CONF_CM_CACHABLE_NONCOHERENT
+	mtc0	t0, CP0_CONFIG
+	nop
+
 	mtc0	zero, CP0_COUNT
 	mtc0	zero, CP0_COMPARE
 	ehb