parisc: BTLB: Clear possibly existing BTLB entries
authorHelge Deller <deller@gmx.de>
Thu, 7 Sep 2023 06:03:35 +0000 (08:03 +0200)
committerHelge Deller <deller@gmx.de>
Thu, 7 Sep 2023 07:12:20 +0000 (09:12 +0200)
Call PDC to remove all existing BTLB entries (which may exist from
some previous operating system runs) before switching to virtual mode.

Signed-off-by: Helge Deller <deller@gmx.de>
arch/parisc/kernel/head.S

index fd15fd4..a171bf3 100644 (file)
@@ -180,10 +180,10 @@ $pgt_fill_loop:
        std             %dp,0x18(%r10)
 #endif
 
-#ifdef CONFIG_64BIT
-       /* Get PDCE_PROC for monarch CPU. */
 #define MEM_PDC_LO 0x388
 #define MEM_PDC_HI 0x35C
+#ifdef CONFIG_64BIT
+       /* Get PDCE_PROC for monarch CPU. */
        ldw             MEM_PDC_LO(%r0),%r3
        ldw             MEM_PDC_HI(%r0),%r10
        depd            %r10, 31, 32, %r3        /* move to upper word */
@@ -269,7 +269,17 @@ stext_pdc_ret:
        tovirt_r1       %r6
        mtctl           %r6,%cr30               /* restore task thread info */
 #endif
-       
+
+#ifndef CONFIG_64BIT
+       /* clear all BTLBs */
+       ldi             PDC_BLOCK_TLB,%arg0
+       load32          PA(stext_pdc_btlb_ret), %rp
+       ldw             MEM_PDC_LO(%r0),%r3
+       bv              (%r3)
+       ldi             PDC_BTLB_PURGE_ALL,%arg1
+stext_pdc_btlb_ret:
+#endif
+
        /* PARANOID: clear user scratch/user space SR's */
        mtsp    %r0,%sr0
        mtsp    %r0,%sr1