From: Sam Ravnborg via B4 Relay <devnull+sam.ravnborg.org@kernel.org>
To: "David S. Miller" <davem@davemloft.net>,
Arnd Bergmann <arnd@kernel.org>,
Andreas Larsson <andreas@gaisler.com>
Cc: Helge Deller <deller@gmx.de>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Alan Stern <stern@rowland.harvard.edu>,
Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
sparclinux@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-usb@vger.kernel.org, linux-fbdev@vger.kernel.org,
dri-devel@lists.freedesktop.org, linux-sound@vger.kernel.org,
Sam Ravnborg <sam@ravnborg.org>
Subject: [PATCH 17/27] sparc32: Drop run-time patching of ASI instructions
Date: Tue, 19 Dec 2023 23:03:22 +0100 [thread overview]
Message-ID: <20231219-sam-sparc32-sunset-v3-v1-17-64bb44b598c5@ravnborg.org> (raw)
In-Reply-To: <20231219-sam-sparc32-sunset-v3-v1-0-64bb44b598c5@ravnborg.org>
From: Sam Ravnborg <sam@ravnborg.org>
With only LEON supported there is no need to run-time patch
the instructions to match ASI.
Move a few functions back to C with inline asm, now that
run-time patching is not needed.
Deleted a few functions that turns out not to be used rather
than re-implement them in C.
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Arnd Bergmann <arnd@kernel.org>
Cc: Andreas Larsson <andreas@gaisler.com>
---
arch/sparc/include/asm/asmmacro.h | 22 -----------
arch/sparc/include/asm/pgtsrmmu.h | 29 +++++++-------
arch/sparc/include/asm/sections.h | 3 --
arch/sparc/include/asm/winmacro.h | 11 +-----
arch/sparc/kernel/entry.S | 7 +---
arch/sparc/kernel/etrap_32.S | 15 +++----
arch/sparc/kernel/rtrap_32.S | 18 +++------
arch/sparc/kernel/setup_32.c | 37 -----------------
arch/sparc/kernel/vmlinux.lds.S | 5 ---
arch/sparc/kernel/wof.S | 18 +++------
arch/sparc/kernel/wuf.S | 21 ++++------
arch/sparc/mm/Makefile | 1 -
arch/sparc/mm/srmmu_access.S | 83 ---------------------------------------
13 files changed, 43 insertions(+), 227 deletions(-)
diff --git a/arch/sparc/include/asm/asmmacro.h b/arch/sparc/include/asm/asmmacro.h
index 49aaf6f3bc55..d5782dbc7810 100644
--- a/arch/sparc/include/asm/asmmacro.h
+++ b/arch/sparc/include/asm/asmmacro.h
@@ -21,26 +21,4 @@
/* All traps low-level code here must end with this macro. */
#define RESTORE_ALL b ret_trap_entry; clr %l6;
-/* Support for run-time patching of single instructions.
- * This is used to handle the differences in the ASI for
- * MMUREGS for LEON and SUN.
- *
- * Sample:
- * LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %o0
- * SUN_PI_(lda [%g0] ASI_M_MMUREGS, %o0
- * PI == Patch Instruction
- *
- * For LEON we will use the first variant,
- * and for all other we will use the SUN variant.
- * The order is important.
- */
-#define LEON_PI(...) \
-662: __VA_ARGS__
-
-#define SUN_PI_(...) \
- .section .leon_1insn_patch, "ax"; \
- .word 662b; \
- __VA_ARGS__; \
- .previous
-
#endif /* !(_SPARC_ASMMACRO_H) */
diff --git a/arch/sparc/include/asm/pgtsrmmu.h b/arch/sparc/include/asm/pgtsrmmu.h
index 664d4bba1bcb..69c28ff3c4c4 100644
--- a/arch/sparc/include/asm/pgtsrmmu.h
+++ b/arch/sparc/include/asm/pgtsrmmu.h
@@ -107,23 +107,24 @@ extern void *srmmu_nocache_pool;
#define __nocache_va(PADDR) (__va((unsigned long)PADDR) - (unsigned long)srmmu_nocache_pool + SRMMU_NOCACHE_VADDR)
#define __nocache_fix(VADDR) ((__typeof__(VADDR))__va(__nocache_pa(VADDR)))
-/* Accessing the MMU control register. */
-unsigned int srmmu_get_mmureg(void);
-void srmmu_set_mmureg(unsigned long regval);
-void srmmu_set_ctable_ptr(unsigned long paddr);
-void srmmu_set_context(int context);
-int srmmu_get_context(void);
-unsigned int srmmu_get_fstatus(void);
-unsigned int srmmu_get_faddr(void);
-
-/* This is guaranteed on all SRMMU's. */
-static inline void srmmu_flush_whole_tlb(void)
+static inline void srmmu_set_ctable_ptr(unsigned long paddr)
{
- __asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
- "r" (0x400), /* Flush entire TLB!! */
- "i" (ASI_M_FLUSH_PROBE) : "memory");
+ paddr = ((paddr >> 4) & SRMMU_CTX_PMASK);
+ asm volatile("sta %0, [%1] %2\n\t" : : "r" (paddr), "r" (SRMMU_CTXTBL_PTR), "i" (ASI_LEON_MMUREGS) : "memory");
+}
+
+static inline void srmmu_set_context(int context)
+{
+ asm volatile("sta %0, [%1] %2\n\t" : : "r" (context), "r" (SRMMU_CTX_REG), "i" (ASI_LEON_MMUREGS) : "memory");
+}
+static inline int srmmu_get_context(void)
+{
+ register int retval;
+ asm volatile("lda [%1] %2, %0\n\t" : "=r" (retval) : "r" (SRMMU_CTX_REG), "i" (ASI_LEON_MMUREGS));
+ return retval;
}
+
#endif /* !(__ASSEMBLY__) */
#endif /* !(_SPARC_PGTSRMMU_H) */
diff --git a/arch/sparc/include/asm/sections.h b/arch/sparc/include/asm/sections.h
index 08f833453ab3..e9d28148850b 100644
--- a/arch/sparc/include/asm/sections.h
+++ b/arch/sparc/include/asm/sections.h
@@ -8,7 +8,4 @@
/* sparc entry point */
extern char _start[];
-extern char __leon_1insn_patch[];
-extern char __leon_1insn_patch_end[];
-
#endif
diff --git a/arch/sparc/include/asm/winmacro.h b/arch/sparc/include/asm/winmacro.h
index b6e911f5d93c..c496b04cdfaf 100644
--- a/arch/sparc/include/asm/winmacro.h
+++ b/arch/sparc/include/asm/winmacro.h
@@ -108,18 +108,11 @@
661: rd %tbr, %idreg; \
srl %idreg, 10, %idreg; \
and %idreg, 0xc, %idreg; \
- .section .cpuid_patch, "ax"; \
- /* Instruction location. */ \
- .word 661b; \
- /* SUN4D implementation. */ \
- lda [%g0] ASI_M_VIKING_TMP1, %idreg; \
- sll %idreg, 2, %idreg; \
- nop; \
- /* LEON implementation. */ \
+ \
rd %asr17, %idreg; \
srl %idreg, 0x1c, %idreg; \
sll %idreg, 0x02, %idreg; \
- .previous; \
+ \
sethi %hi(current_set), %dest_reg; \
or %dest_reg, %lo(current_set), %dest_reg;\
ld [%idreg + %dest_reg], %dest_reg;
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
index 0f2417ee3f95..9cf8f87e8c42 100644
--- a/arch/sparc/kernel/entry.S
+++ b/arch/sparc/kernel/entry.S
@@ -469,11 +469,8 @@ srmmu_fault:
mov 0x400, %l5
mov 0x300, %l4
-LEON_PI(lda [%l5] ASI_LEON_MMUREGS, %l6) ! read sfar first
-SUN_PI_(lda [%l5] ASI_M_MMUREGS, %l6) ! read sfar first
-
-LEON_PI(lda [%l4] ASI_LEON_MMUREGS, %l5) ! read sfsr last
-SUN_PI_(lda [%l4] ASI_M_MMUREGS, %l5) ! read sfsr last
+ lda [%l5] ASI_LEON_MMUREGS, %l6 ! read sfar first
+ lda [%l4] ASI_LEON_MMUREGS, %l5 ! read sfsr last
andn %l6, 0xfff, %l6
srl %l5, 6, %l5 ! and encode all info into l7
diff --git a/arch/sparc/kernel/etrap_32.S b/arch/sparc/kernel/etrap_32.S
index 9f243f918619..bb222459f097 100644
--- a/arch/sparc/kernel/etrap_32.S
+++ b/arch/sparc/kernel/etrap_32.S
@@ -235,8 +235,7 @@ tsetup_srmmu_stackchk:
cmp %glob_tmp, %sp
bleu,a 1f
-LEON_PI( lda [%g0] ASI_LEON_MMUREGS, %glob_tmp) ! read MMU control
-SUN_PI_( lda [%g0] ASI_M_MMUREGS, %glob_tmp) ! read MMU control
+ lda [%g0] ASI_LEON_MMUREGS, %glob_tmp ! read MMU control
trap_setup_user_stack_is_bolixed:
/* From user/kernel into invalid window w/bad user
@@ -251,24 +250,20 @@ trap_setup_user_stack_is_bolixed:
1:
/* Clear the fault status and turn on the no_fault bit. */
or %glob_tmp, 0x2, %glob_tmp ! or in no_fault bit
-LEON_PI(sta %glob_tmp, [%g0] ASI_LEON_MMUREGS) ! set it
-SUN_PI_(sta %glob_tmp, [%g0] ASI_M_MMUREGS) ! set it
+ sta %glob_tmp, [%g0] ASI_LEON_MMUREGS ! set it
/* Dump the registers and cross fingers. */
STORE_WINDOW(sp)
/* Clear the no_fault bit and check the status. */
andn %glob_tmp, 0x2, %glob_tmp
-LEON_PI(sta %glob_tmp, [%g0] ASI_LEON_MMUREGS)
-SUN_PI_(sta %glob_tmp, [%g0] ASI_M_MMUREGS)
+ sta %glob_tmp, [%g0] ASI_LEON_MMUREGS
mov AC_M_SFAR, %glob_tmp
-LEON_PI(lda [%glob_tmp] ASI_LEON_MMUREGS, %g0)
-SUN_PI_(lda [%glob_tmp] ASI_M_MMUREGS, %g0)
+ lda [%glob_tmp] ASI_LEON_MMUREGS, %g0
mov AC_M_SFSR, %glob_tmp
-LEON_PI(lda [%glob_tmp] ASI_LEON_MMUREGS, %glob_tmp)! save away status of winstore
-SUN_PI_(lda [%glob_tmp] ASI_M_MMUREGS, %glob_tmp) ! save away status of winstore
+ lda [%glob_tmp] ASI_LEON_MMUREGS, %glob_tmp ! save away status of winstore
andcc %glob_tmp, 0x2, %g0 ! did we fault?
bne trap_setup_user_stack_is_bolixed ! failure
diff --git a/arch/sparc/kernel/rtrap_32.S b/arch/sparc/kernel/rtrap_32.S
index 8931fe266346..a232b367c219 100644
--- a/arch/sparc/kernel/rtrap_32.S
+++ b/arch/sparc/kernel/rtrap_32.S
@@ -232,14 +232,11 @@ srmmu_rett_stackchk:
cmp %g1, %fp
bleu ret_trap_user_stack_is_bolixed
mov AC_M_SFSR, %g1
-LEON_PI(lda [%g1] ASI_LEON_MMUREGS, %g0)
-SUN_PI_(lda [%g1] ASI_M_MMUREGS, %g0)
+ lda [%g1] ASI_LEON_MMUREGS, %g0
-LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %g1)
-SUN_PI_(lda [%g0] ASI_M_MMUREGS, %g1)
+ lda [%g0] ASI_LEON_MMUREGS, %g1
or %g1, 0x2, %g1
-LEON_PI(sta %g1, [%g0] ASI_LEON_MMUREGS)
-SUN_PI_(sta %g1, [%g0] ASI_M_MMUREGS)
+ sta %g1, [%g0] ASI_LEON_MMUREGS
restore %g0, %g0, %g0
@@ -248,16 +245,13 @@ SUN_PI_(sta %g1, [%g0] ASI_M_MMUREGS)
save %g0, %g0, %g0
andn %g1, 0x2, %g1
-LEON_PI(sta %g1, [%g0] ASI_LEON_MMUREGS)
-SUN_PI_(sta %g1, [%g0] ASI_M_MMUREGS)
+ sta %g1, [%g0] ASI_LEON_MMUREGS
mov AC_M_SFAR, %g2
-LEON_PI(lda [%g2] ASI_LEON_MMUREGS, %g2)
-SUN_PI_(lda [%g2] ASI_M_MMUREGS, %g2)
+ lda [%g2] ASI_LEON_MMUREGS, %g2
mov AC_M_SFSR, %g1
-LEON_PI(lda [%g1] ASI_LEON_MMUREGS, %g1)
-SUN_PI_(lda [%g1] ASI_M_MMUREGS, %g1)
+ lda [%g1] ASI_LEON_MMUREGS, %g1
andcc %g1, 0x2, %g0
be ret_trap_userwins_ok
nop
diff --git a/arch/sparc/kernel/setup_32.c b/arch/sparc/kernel/setup_32.c
index cb981f2794b3..1035d553d27a 100644
--- a/arch/sparc/kernel/setup_32.c
+++ b/arch/sparc/kernel/setup_32.c
@@ -178,39 +178,6 @@ extern int root_mountflags;
char reboot_command[COMMAND_LINE_SIZE];
-struct cpuid_patch_entry {
- unsigned int addr;
- unsigned int sun4d[3];
- unsigned int leon[3];
-};
-extern struct cpuid_patch_entry __cpuid_patch, __cpuid_patch_end;
-
-static void __init per_cpu_patch(void)
-{
- struct cpuid_patch_entry *p;
-
- p = &__cpuid_patch;
- while (p < &__cpuid_patch_end) {
- unsigned long addr = p->addr;
- unsigned int *insns;
-
- insns = &p->leon[0];
- *(unsigned int *) (addr + 0) = insns[0];
- flushi(addr + 0);
- *(unsigned int *) (addr + 4) = insns[1];
- flushi(addr + 4);
- *(unsigned int *) (addr + 8) = insns[2];
- flushi(addr + 8);
-
- p++;
- }
-}
-
-static __init void leon_patch(void)
-{
- /* Default instruction is leon - no patching */
-}
-
struct tt_entry *sparc_ttable;
/* Called from head_32.S - before we have setup anything
@@ -219,7 +186,6 @@ struct tt_entry *sparc_ttable;
void __init sparc32_start_kernel(struct linux_romvec *rp)
{
prom_init(rp);
- leon_patch();
start_kernel();
}
@@ -271,9 +237,6 @@ void __init setup_arch(char **cmdline_p)
(*(linux_dbvec->teach_debugger))();
}
- /* Run-time patch instructions to match the cpu model */
- per_cpu_patch();
-
paging_init();
smp_setup_cpu_possible_map();
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S
index d317a843f7ea..1cc4d3e79321 100644
--- a/arch/sparc/kernel/vmlinux.lds.S
+++ b/arch/sparc/kernel/vmlinux.lds.S
@@ -113,11 +113,6 @@ SECTIONS
*(.sun4v_2insn_patch)
__sun4v_2insn_patch_end = .;
}
- .leon_1insn_patch : {
- __leon_1insn_patch = .;
- *(.leon_1insn_patch)
- __leon_1insn_patch_end = .;
- }
.swapper_tsb_phys_patch : {
__swapper_tsb_phys_patch = .;
*(.swapper_tsb_phys_patch)
diff --git a/arch/sparc/kernel/wof.S b/arch/sparc/kernel/wof.S
index 96a3a112423a..fe4cfd4abcd2 100644
--- a/arch/sparc/kernel/wof.S
+++ b/arch/sparc/kernel/wof.S
@@ -333,30 +333,24 @@ spwin_srmmu_stackchk:
mov AC_M_SFSR, %glob_tmp
/* Clear the fault status and turn on the no_fault bit. */
-LEON_PI(lda [%glob_tmp] ASI_LEON_MMUREGS, %g0) ! eat SFSR
-SUN_PI_(lda [%glob_tmp] ASI_M_MMUREGS, %g0) ! eat SFSR
+ lda [%glob_tmp] ASI_LEON_MMUREGS, %g0 ! eat SFSR
-LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %glob_tmp) ! read MMU control
-SUN_PI_(lda [%g0] ASI_M_MMUREGS, %glob_tmp) ! read MMU control
+ lda [%g0] ASI_LEON_MMUREGS, %glob_tmp ! read MMU control
or %glob_tmp, 0x2, %glob_tmp ! or in no_fault bit
-LEON_PI(sta %glob_tmp, [%g0] ASI_LEON_MMUREGS) ! set it
-SUN_PI_(sta %glob_tmp, [%g0] ASI_M_MMUREGS) ! set it
+ sta %glob_tmp, [%g0] ASI_LEON_MMUREGS ! set it
/* Dump the registers and cross fingers. */
STORE_WINDOW(sp)
/* Clear the no_fault bit and check the status. */
andn %glob_tmp, 0x2, %glob_tmp
-LEON_PI(sta %glob_tmp, [%g0] ASI_LEON_MMUREGS)
-SUN_PI_(sta %glob_tmp, [%g0] ASI_M_MMUREGS)
+ sta %glob_tmp, [%g0] ASI_LEON_MMUREGS
mov AC_M_SFAR, %glob_tmp
-LEON_PI(lda [%glob_tmp] ASI_LEON_MMUREGS, %g0)
-SUN_PI_(lda [%glob_tmp] ASI_M_MMUREGS, %g0)
+ lda [%glob_tmp] ASI_LEON_MMUREGS, %g0
mov AC_M_SFSR, %glob_tmp
-LEON_PI(lda [%glob_tmp] ASI_LEON_MMUREGS, %glob_tmp)
-SUN_PI_(lda [%glob_tmp] ASI_M_MMUREGS, %glob_tmp)
+ lda [%glob_tmp] ASI_LEON_MMUREGS, %glob_tmp
andcc %glob_tmp, 0x2, %g0 ! did we fault?
be,a spwin_finish_up + 0x4 ! cool beans, success
restore %g0, %g0, %g0
diff --git a/arch/sparc/kernel/wuf.S b/arch/sparc/kernel/wuf.S
index 1a4ca490e9c2..4c52b69d4b7a 100644
--- a/arch/sparc/kernel/wuf.S
+++ b/arch/sparc/kernel/wuf.S
@@ -255,19 +255,16 @@ srmmu_fwin_stackchk:
mov AC_M_SFSR, %l4
cmp %l5, %sp
bleu fwin_user_stack_is_bolixed
-LEON_PI( lda [%l4] ASI_LEON_MMUREGS, %g0) ! clear fault status
-SUN_PI_( lda [%l4] ASI_M_MMUREGS, %g0) ! clear fault status
+ lda [%l4] ASI_LEON_MMUREGS, %g0 ! clear fault status
/* The technique is, turn off faults on this processor,
* just let the load rip, then check the sfsr to see if
* a fault did occur. Then we turn on fault traps again
* and branch conditionally based upon what happened.
*/
-LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %l5) ! read mmu-ctrl reg
-SUN_PI_(lda [%g0] ASI_M_MMUREGS, %l5) ! read mmu-ctrl reg
+ lda [%g0] ASI_LEON_MMUREGS, %l5 ! read mmu-ctrl reg
or %l5, 0x2, %l5 ! turn on no-fault bit
-LEON_PI(sta %l5, [%g0] ASI_LEON_MMUREGS) ! store it
-SUN_PI_(sta %l5, [%g0] ASI_M_MMUREGS) ! store it
+ sta %l5, [%g0] ASI_LEON_MMUREGS ! store it
/* Cross fingers and go for it. */
LOAD_WINDOW(sp)
@@ -279,19 +276,15 @@ SUN_PI_(sta %l5, [%g0] ASI_M_MMUREGS) ! store it
/* LOCATION: Window 'T' */
-LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %twin_tmp1) ! load mmu-ctrl again
-SUN_PI_(lda [%g0] ASI_M_MMUREGS, %twin_tmp1) ! load mmu-ctrl again
+ lda [%g0] ASI_LEON_MMUREGS, %twin_tmp1 ! load mmu-ctrl again
andn %twin_tmp1, 0x2, %twin_tmp1 ! clear no-fault bit
-LEON_PI(sta %twin_tmp1, [%g0] ASI_LEON_MMUREGS) ! store it
-SUN_PI_(sta %twin_tmp1, [%g0] ASI_M_MMUREGS) ! store it
+ sta %twin_tmp1, [%g0] ASI_LEON_MMUREGS ! store it
mov AC_M_SFAR, %twin_tmp2
-LEON_PI(lda [%twin_tmp2] ASI_LEON_MMUREGS, %g0) ! read fault address
-SUN_PI_(lda [%twin_tmp2] ASI_M_MMUREGS, %g0) ! read fault address
+ lda [%twin_tmp2] ASI_LEON_MMUREGS, %g0 ! read fault address
mov AC_M_SFSR, %twin_tmp2
-LEON_PI(lda [%twin_tmp2] ASI_LEON_MMUREGS, %twin_tmp2) ! read fault status
-SUN_PI_(lda [%twin_tmp2] ASI_M_MMUREGS, %twin_tmp2) ! read fault status
+ lda [%twin_tmp2] ASI_LEON_MMUREGS, %twin_tmp2 ! read fault status
andcc %twin_tmp2, 0x2, %g0 ! did fault occur?
bne 1f ! yep, cleanup
diff --git a/arch/sparc/mm/Makefile b/arch/sparc/mm/Makefile
index 4347247d6cb0..357a5816a6bf 100644
--- a/arch/sparc/mm/Makefile
+++ b/arch/sparc/mm/Makefile
@@ -9,7 +9,6 @@ obj-$(CONFIG_SPARC64) += ultra.o tlb.o tsb.o
obj-y += fault_$(BITS).o
obj-y += init_$(BITS).o
obj-$(CONFIG_SPARC32) += srmmu.o iommu.o io-unit.o
-obj-$(CONFIG_SPARC32) += srmmu_access.o
obj-$(CONFIG_SPARC32) += leon_mm.o
# Only used by sparc64
diff --git a/arch/sparc/mm/srmmu_access.S b/arch/sparc/mm/srmmu_access.S
deleted file mode 100644
index d8d2e644a5ca..000000000000
--- a/arch/sparc/mm/srmmu_access.S
+++ /dev/null
@@ -1,83 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Assembler variants of srmmu access functions.
- * Implemented in assembler to allow run-time patching.
- * LEON uses a different ASI for MMUREGS than SUN.
- *
- * The leon_1insn_patch infrastructure is used
- * for the run-time patching.
- */
-
-#include <linux/linkage.h>
-
-#include <asm/asmmacro.h>
-#include <asm/pgtsrmmu.h>
-#include <asm/asi.h>
-
-/* unsigned int srmmu_get_mmureg(void) */
-ENTRY(srmmu_get_mmureg)
-LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %o0)
-SUN_PI_(lda [%g0] ASI_M_MMUREGS, %o0)
- retl
- nop
-ENDPROC(srmmu_get_mmureg)
-
-/* void srmmu_set_mmureg(unsigned long regval) */
-ENTRY(srmmu_set_mmureg)
-LEON_PI(sta %o0, [%g0] ASI_LEON_MMUREGS)
-SUN_PI_(sta %o0, [%g0] ASI_M_MMUREGS)
- retl
- nop
-ENDPROC(srmmu_set_mmureg)
-
-/* void srmmu_set_ctable_ptr(unsigned long paddr) */
-ENTRY(srmmu_set_ctable_ptr)
- /* paddr = ((paddr >> 4) & SRMMU_CTX_PMASK); */
- srl %o0, 4, %g1
- and %g1, SRMMU_CTX_PMASK, %g1
-
- mov SRMMU_CTXTBL_PTR, %g2
-LEON_PI(sta %g1, [%g2] ASI_LEON_MMUREGS)
-SUN_PI_(sta %g1, [%g2] ASI_M_MMUREGS)
- retl
- nop
-ENDPROC(srmmu_set_ctable_ptr)
-
-
-/* void srmmu_set_context(int context) */
-ENTRY(srmmu_set_context)
- mov SRMMU_CTX_REG, %g1
-LEON_PI(sta %o0, [%g1] ASI_LEON_MMUREGS)
-SUN_PI_(sta %o0, [%g1] ASI_M_MMUREGS)
- retl
- nop
-ENDPROC(srmmu_set_context)
-
-
-/* int srmmu_get_context(void) */
-ENTRY(srmmu_get_context)
- mov SRMMU_CTX_REG, %o0
-LEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0)
-SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
- retl
- nop
-ENDPROC(srmmu_get_context)
-
-
-/* unsigned int srmmu_get_fstatus(void) */
-ENTRY(srmmu_get_fstatus)
- mov SRMMU_FAULT_STATUS, %o0
-LEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0)
-SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
- retl
- nop
-ENDPROC(srmmu_get_fstatus)
-
-
-/* unsigned int srmmu_get_faddr(void) */
-ENTRY(srmmu_get_faddr)
- mov SRMMU_FAULT_ADDR, %o0
-LEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0)
-SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
- retl
- nop
-ENDPROC(srmmu_get_faddr)
--
2.34.1
next prev parent reply other threads:[~2023-12-19 22:03 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-19 22:03 [PATCH 00/27] sparc32: sunset sun4m and sun4d Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 01/27] sparc32: Update defconfig to LEON SMP Sam Ravnborg via B4 Relay
2023-12-19 22:23 ` Arnd Bergmann
2023-12-20 6:43 ` Sam Ravnborg
2023-12-20 8:37 ` Arnd Bergmann
2023-12-19 22:03 ` [PATCH 02/27] sparc32: Drop sun4m/sun4d support from head_32.S Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 03/27] sparc32: Drop floppy support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 04/27] sparc32: Drop sun4m specific led driver Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 05/27] sparc32: Drop sun specific power management drivers Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 06/27] sparc32: Drop auxio support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 07/27] sparc32: Drop run-time patching of ipi trap Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 08/27] sparc32: Drop patching of interrupt vector Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 09/27] sparc32: Drop sun4m/sun4d specific irq handling Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 10/27] sparc32: Drop sun4d/sun4m smp support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 11/27] sparc32: Drop pcic support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 12/27] sparc32: Drop mbus support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 13/27] sparc32: Drop unused function __get_{phys,iospace} Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 14/27] sparc32: Drop unused mmu models Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 15/27] sparc32: Drop check for sparc_model Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 16/27] sparc32: Drop use of sparc_config Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` Sam Ravnborg via B4 Relay [this message]
2024-02-16 17:12 ` [PATCH 17/27] sparc32: Drop run-time patching of ASI instructions Andreas Larsson
2024-02-17 11:59 ` Sam Ravnborg
2023-12-19 22:03 ` [PATCH 18/27] sparc32: Drop support for 7 register windows Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 19/27] sparc32: Drop additional sun4d bits Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 20/27] sparc32: Drop unused prom ranges support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 21/27] sparc32: Drop unused iommu support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 22/27] sparc32: Drop sun4m irq support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 23/27] sparc32: Drop unused trampoline code Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 24/27] sparc32: Drop config SPARC_LEON Sam Ravnborg via B4 Relay
2023-12-20 5:52 ` Greg Kroah-Hartman
2023-12-19 22:03 ` [PATCH 25/27] sparc32: Drop sbus support Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 26/27] sbus: char: Drop now unused uctrl driver Sam Ravnborg via B4 Relay
2023-12-19 22:03 ` [PATCH 27/27] fbdev/p9100: Drop now unused driver p9100 Sam Ravnborg via B4 Relay
2024-01-02 8:26 ` Thomas Zimmermann
2024-01-02 16:31 ` Sam Ravnborg
2023-12-20 8:36 ` [PATCH 00/27] sparc32: sunset sun4m and sun4d Arnd Bergmann
2023-12-20 9:28 ` John Paul Adrian Glaubitz
2023-12-20 9:34 ` David Laight
2023-12-20 9:51 ` Arnd Bergmann
2023-12-20 9:54 ` John Paul Adrian Glaubitz
2023-12-20 10:47 ` Arnd Bergmann
2023-12-20 11:30 ` Mark Cave-Ayland
2023-12-20 15:22 ` Sam Ravnborg
2023-12-20 17:25 ` John Paul Adrian Glaubitz
2023-12-22 15:27 ` Andreas Larsson
2023-12-20 14:42 ` Kjetil Oftedal
2024-02-04 19:21 ` Sam Ravnborg
2024-02-05 5:12 ` John Paul Adrian Glaubitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231219-sam-sparc32-sunset-v3-v1-17-64bb44b598c5@ravnborg.org \
--to=devnull+sam.ravnborg.org@kernel.org \
--cc=andreas@gaisler.com \
--cc=arnd@kernel.org \
--cc=davem@davemloft.net \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=perex@perex.cz \
--cc=sam@ravnborg.org \
--cc=sparclinux@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=tiwai@suse.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).