summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2006-12-27 19:12:50 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2006-12-27 19:12:50 +0000
commit978ac4b99de8fa84fe3f8a8963cb3daccd77dc87 (patch)
tree1bbc05f0d9357a3478bdb74ee700d76447de2cb9 /sys/arch
parent16eff0890adf08347f2a7afec76d60f1ee69776c (diff)
Patch a few more D-cache flush instructions on UltraSPARC-III.
ok miod@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/sparc64/sparc64/locore.s14
1 files changed, 13 insertions, 1 deletions
diff --git a/sys/arch/sparc64/sparc64/locore.s b/sys/arch/sparc64/sparc64/locore.s
index 73c151c9040..bc774ec95cd 100644
--- a/sys/arch/sparc64/sparc64/locore.s
+++ b/sys/arch/sparc64/sparc64/locore.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.s,v 1.65 2006/12/23 12:28:11 kettenis Exp $ */
+/* $OpenBSD: locore.s,v 1.66 2006/12/27 19:12:49 kettenis Exp $ */
/* $NetBSD: locore.s,v 1.137 2001/08/13 06:10:10 jdolecek Exp $ */
/*
@@ -4811,6 +4811,7 @@ _C_LABEL(blast_vcache):
andn %o3, PSTATE_IE, %o4 ! Turn off PSTATE_IE bit
wrpr %o4, 0, %pstate
1:
+dlflush3:
stxa %g0, [%o1] ASI_DCACHE_TAG
brnz,pt %o1, 1b
dec 8, %o1
@@ -4854,6 +4855,7 @@ _C_LABEL(dcache_flush_page):
bne,pt %xcc, 1b
membar #LoadStore
+dlflush4:
stxa %g0, [%o0] ASI_DCACHE_TAG
ba,pt %icc, 1b
membar #StoreLoad
@@ -4888,6 +4890,7 @@ _C_LABEL(cache_flush_virt):
!! Clear from start to end
1:
+dlflush5:
stxa %g0, [%o0] ASI_DCACHE_TAG
dec 16, %o4
brgz,pt %o4, 1b
@@ -4902,6 +4905,7 @@ _C_LABEL(cache_flush_virt):
!! We got a hole. Clear from start to hole
clr %o4
3:
+dlflush6:
stxa %g0, [%o4] ASI_DCACHE_TAG
dec 16, %o1
brgz,pt %o1, 3b
@@ -4955,6 +4959,7 @@ _C_LABEL(cache_flush_phys):
nop
membar #LoadStore
+dlflush7:
stxa %g0, [%o4] ASI_DCACHE_TAG ! Just right
2:
membar #StoreLoad
@@ -6316,6 +6321,7 @@ ENTRY(pmap_zero_phys)
dec 8, %o2
stxa %g0, [%o0] ASI_PHYS_CACHED
inc 8, %o0
+dlflush8:
stxa %g0, [%o1] ASI_DCACHE_TAG
brgz %o2, 1b
inc 16, %o1
@@ -9618,4 +9624,10 @@ _C_LABEL(proc0paddr):
_C_LABEL(dlflush_start):
.xword dlflush1
.xword dlflush2
+ .xword dlflush3
+ .xword dlflush4
+ .xword dlflush5
+ .xword dlflush6
+ .xword dlflush7
+ .xword dlflush8
.xword 0