MIPS: r4kcache: Use correct base register for MIPS R6 cache flushes
authorMarkos Chandras <markos.chandras@imgtec.com>
Tue, 3 Mar 2015 18:48:47 +0000 (18:48 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 10 Apr 2015 13:41:46 +0000 (15:41 +0200)
Commit 934c79231c1b("MIPS: asm: r4kcache: Add MIPS R6 cache unroll
functions") added support for MIPS R6 cache flushes but it used the
wrong base address register to perform the flushes so the same lines
were flushed over and over. Moreover, replace the "addiu" instructions
with LONG_ADDIU so the correct base address is calculated for 64-bit
cores.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Fixes: 934c79231c1b("MIPS: asm: r4kcache: Add MIPS R6 cache unroll functions")
Cc: linux-mips@linux-mips.org
Reviewed-by: Maciej W. Rozycki <macro@linux-mips.org>
Patchwork: https://patchwork.linux-mips.org/patch/9384/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/r4kcache.h

index 1b22d2da88a1ec1b76e42dfde3cbff5cb5b422c2..38902bf97adc46577bf5bc61721a410dc530560c 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef _ASM_R4KCACHE_H
 #define _ASM_R4KCACHE_H
 
+#include <linux/stringify.h>
+
 #include <asm/asm.h>
 #include <asm/cacheops.h>
 #include <asm/compiler.h>
@@ -344,7 +346,7 @@ static inline void invalidate_tcache_page(unsigned long addr)
        "       cache %1, 0x0a0(%0); cache %1, 0x0b0(%0)\n"     \
        "       cache %1, 0x0c0(%0); cache %1, 0x0d0(%0)\n"     \
        "       cache %1, 0x0e0(%0); cache %1, 0x0f0(%0)\n"     \
-       "       addiu $1, $0, 0x100                     \n"     \
+       "       "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x010($1)\n"     \
        "       cache %1, 0x020($1); cache %1, 0x030($1)\n"     \
        "       cache %1, 0x040($1); cache %1, 0x050($1)\n"     \
@@ -368,17 +370,17 @@ static inline void invalidate_tcache_page(unsigned long addr)
        "       cache %1, 0x040(%0); cache %1, 0x060(%0)\n"     \
        "       cache %1, 0x080(%0); cache %1, 0x0a0(%0)\n"     \
        "       cache %1, 0x0c0(%0); cache %1, 0x0e0(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x020($1)\n"     \
        "       cache %1, 0x040($1); cache %1, 0x060($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0a0($1)\n"     \
        "       cache %1, 0x0c0($1); cache %1, 0x0e0($1)\n"     \
-       "       addiu $1, $1, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x020($1)\n"     \
        "       cache %1, 0x040($1); cache %1, 0x060($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0a0($1)\n"     \
        "       cache %1, 0x0c0($1); cache %1, 0x0e0($1)\n"     \
-       "       addiu $1, $1, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100\n"      \
        "       cache %1, 0x000($1); cache %1, 0x020($1)\n"     \
        "       cache %1, 0x040($1); cache %1, 0x060($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0a0($1)\n"     \
@@ -396,25 +398,25 @@ static inline void invalidate_tcache_page(unsigned long addr)
        "       .set noat\n"                                    \
        "       cache %1, 0x000(%0); cache %1, 0x040(%0)\n"     \
        "       cache %1, 0x080(%0); cache %1, 0x0c0(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
        "       cache %1, 0x000($1); cache %1, 0x040($1)\n"     \
        "       cache %1, 0x080($1); cache %1, 0x0c0($1)\n"     \
        "       .set pop\n"                                     \
@@ -429,39 +431,38 @@ static inline void invalidate_tcache_page(unsigned long addr)
        "       .set mips64r6\n"                                \
        "       .set noat\n"                                    \
        "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
-       "       cache %1, 0x000(%0); cache %1, 0x080(%0)\n"     \
-       "       addiu $1, %0, 0x100\n"                          \
+       "       "__stringify(LONG_ADDIU)" $1, %0, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
+       "       "__stringify(LONG_ADDIU)" $1, $1, 0x100 \n"     \
+       "       cache %1, 0x000($1); cache %1, 0x080($1)\n"     \
        "       .set pop\n"                                     \
                :                                               \
                : "r" (base),                                   \