powerpc/32s: use CONFIG_PPC_BOOK3S_601 instead of reading PVR
authorChristophe Leroy <christophe.leroy@c-s.fr>
Mon, 26 Aug 2019 15:52:17 +0000 (15:52 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 28 Aug 2019 13:19:33 +0000 (23:19 +1000)
Use CONFIG_PPC_BOOK3S_601 instead of reading PVR to know if
it is a 601 or not.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/909c26db9facd7fe454695b303f952e019dd9eda.1566834712.git.christophe.leroy@c-s.fr
arch/powerpc/kernel/head_32.S
arch/powerpc/kernel/misc_32.S

index 9e6f01a..4a24f8f 100644 (file)
 
 #include "head_32.h"
 
-/* 601 only have IBAT; cr0.eq is set on 601 when using this macro */
+/* 601 only have IBAT */
+#ifdef CONFIG_PPC_BOOK3S_601
+#define LOAD_BAT(n, reg, RA, RB)       \
+       li      RA,0;                   \
+       mtspr   SPRN_IBAT##n##U,RA;     \
+       lwz     RA,(n*16)+0(reg);       \
+       lwz     RB,(n*16)+4(reg);       \
+       mtspr   SPRN_IBAT##n##U,RA;     \
+       mtspr   SPRN_IBAT##n##L,RB
+#else
 #define LOAD_BAT(n, reg, RA, RB)       \
        /* see the comment for clear_bats() -- Cort */ \
        li      RA,0;                   \
        lwz     RB,(n*16)+4(reg);       \
        mtspr   SPRN_IBAT##n##U,RA;     \
        mtspr   SPRN_IBAT##n##L,RB;     \
-       beq     1f;                     \
        lwz     RA,(n*16)+8(reg);       \
        lwz     RB,(n*16)+12(reg);      \
        mtspr   SPRN_DBAT##n##U,RA;     \
-       mtspr   SPRN_DBAT##n##L,RB;     \
-1:
+       mtspr   SPRN_DBAT##n##L,RB
+#endif
 
        __HEAD
        .stabs  "arch/powerpc/kernel/",N_SO,0,0,0f
@@ -820,9 +828,6 @@ load_up_mmu:
 
 /* Load the BAT registers with the values set up by MMU_init.
    MMU_init takes care of whether we're on a 601 or not. */
-       mfpvr   r3
-       srwi    r3,r3,16
-       cmpwi   r3,1
        lis     r3,BATS@ha
        addi    r3,r3,BATS@l
        tophys(r3,r3)
@@ -998,11 +1003,8 @@ EXPORT_SYMBOL(switch_mmu_context)
  */
 clear_bats:
        li      r10,0
-       mfspr   r9,SPRN_PVR
-       rlwinm  r9,r9,16,16,31          /* r9 = 1 for 601, 4 for 604 */
-       cmpwi   r9, 1
-       beq     1f
 
+#ifndef CONFIG_PPC_BOOK3S_601
        mtspr   SPRN_DBAT0U,r10
        mtspr   SPRN_DBAT0L,r10
        mtspr   SPRN_DBAT1U,r10
@@ -1011,7 +1013,7 @@ clear_bats:
        mtspr   SPRN_DBAT2L,r10
        mtspr   SPRN_DBAT3U,r10
        mtspr   SPRN_DBAT3L,r10
-1:
+#endif
        mtspr   SPRN_IBAT0U,r10
        mtspr   SPRN_IBAT0L,r10
        mtspr   SPRN_IBAT1U,r10
@@ -1106,10 +1108,7 @@ mmu_off:
  */
 initial_bats:
        lis     r11,PAGE_OFFSET@h
-       mfspr   r9,SPRN_PVR
-       rlwinm  r9,r9,16,16,31          /* r9 = 1 for 601, 4 for 604 */
-       cmpwi   0,r9,1
-       bne     4f
+#ifdef CONFIG_PPC_BOOK3S_601
        ori     r11,r11,4               /* set up BAT registers for 601 */
        li      r8,0x7f                 /* valid, block length = 8MB */
        mtspr   SPRN_IBAT0U,r11         /* N.B. 601 has valid bit in */
@@ -1122,10 +1121,8 @@ initial_bats:
        addis   r8,r8,0x800000@h
        mtspr   SPRN_IBAT2U,r11
        mtspr   SPRN_IBAT2L,r8
-       isync
-       blr
-
-4:     tophys(r8,r11)
+#else
+       tophys(r8,r11)
 #ifdef CONFIG_SMP
        ori     r8,r8,0x12              /* R/W access, M=1 */
 #else
@@ -1137,10 +1134,10 @@ initial_bats:
        mtspr   SPRN_DBAT0U,r11         /* bit in upper BAT register */
        mtspr   SPRN_IBAT0L,r8
        mtspr   SPRN_IBAT0U,r11
+#endif
        isync
        blr
 
-
 #ifdef CONFIG_BOOTX_TEXT
 setup_disp_bat:
        /*
@@ -1155,15 +1152,13 @@ setup_disp_bat:
        beqlr
        lwz     r11,0(r8)
        lwz     r8,4(r8)
-       mfspr   r9,SPRN_PVR
-       rlwinm  r9,r9,16,16,31          /* r9 = 1 for 601, 4 for 604 */
-       cmpwi   0,r9,1
-       beq     1f
+#ifndef CONFIG_PPC_BOOK3S_601
        mtspr   SPRN_DBAT3L,r8
        mtspr   SPRN_DBAT3U,r11
-       blr
-1:     mtspr   SPRN_IBAT3L,r8
+#else
+       mtspr   SPRN_IBAT3L,r8
        mtspr   SPRN_IBAT3U,r11
+#endif
        blr
 #endif /* CONFIG_BOOTX_TEXT */
 
index 02d90e1..b917641 100644 (file)
@@ -303,11 +303,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_UNIFIED_ID_CACHE)
        mfspr   r3,SPRN_L1CSR1
        ori     r3,r3,L1CSR1_ICFI|L1CSR1_ICLFR
        mtspr   SPRN_L1CSR1,r3
+#elif defined(CONFIG_PPC_BOOK3S_601)
+       blr                     /* for 601, do nothing */
 #else
-       mfspr   r3,SPRN_PVR
-       rlwinm  r3,r3,16,16,31
-       cmpwi   0,r3,1
-       beqlr                   /* for 601, do nothing */
        /* 603/604 processor - use invalidate-all bit in HID0 */
        mfspr   r3,SPRN_HID0
        ori     r3,r3,HID0_ICFI