ar71xx: fix lzma loader performance issues
authorJulien Dusser <julien.dusser@free.fr>
Wed, 19 Jul 2017 12:52:35 +0000 (14:52 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 24 Oct 2017 11:24:04 +0000 (13:24 +0200)
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 <julien.dusser@free.fr>
target/linux/ar71xx/image/lzma-loader/src/head.S

index 47a7c9b..d414b14 100644 (file)
@@ -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