summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/arch/arm/arm/cpufunc_asm_xscale.S13
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/arch/arm/arm/cpufunc_asm_xscale.S b/sys/arch/arm/arm/cpufunc_asm_xscale.S
index 0f6c8ac2e2f..994148768f4 100644
--- a/sys/arch/arm/arm/cpufunc_asm_xscale.S
+++ b/sys/arch/arm/arm/cpufunc_asm_xscale.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpufunc_asm_xscale.S,v 1.2 2005/01/02 19:57:57 drahn Exp $ */
+/* $OpenBSD: cpufunc_asm_xscale.S,v 1.3 2009/11/08 13:50:14 miod Exp $ */
/* $NetBSD: cpufunc_asm_xscale.S,v 1.16 2002/08/17 16:36:32 thorpej Exp $ */
/*
@@ -76,9 +76,9 @@
#include <machine/asm.h>
/*
- * Size of the XScale core D-cache.
+ * Size of the XScale core caches.
*/
-#define DCACHE_SIZE 0x00008000
+#define CACHE_SIZE 0x8000
#ifndef CACHE_CLEAN_BLOCK_INTR
.Lblock_userspace_access:
@@ -236,7 +236,7 @@ _C_LABEL(xscale_cache_clean_addr):
.global _C_LABEL(xscale_cache_clean_size)
_C_LABEL(xscale_cache_clean_size):
- .word DCACHE_SIZE
+ .word CACHE_SIZE
# .global _C_LABEL(xscale_minidata_clean_addr)
#_C_LABEL(xscale_minidata_clean_addr):
@@ -292,7 +292,7 @@ _C_LABEL(xscale_cache_clean_size):
* alternate between them whenever this is done. No one knows \
* why the work-around works (mmm!). \
*/ \
- eor r0, r0, #(DCACHE_SIZE) ; \
+ eor r0, r0, #(CACHE_SIZE) ; \
str r0, [r2] ; \
add r0, r0, r1
@@ -442,6 +442,9 @@ ENTRY(xscale_cache_syncI_rng)
CPWAIT_AND_RETURN(r0)
ENTRY(xscale_cache_flushD_rng)
+ cmp r1, #(CACHE_SIZE)
+ movcs r1, #(CACHE_SIZE)
+
and r2, r0, #0x1f
add r1, r1, r2
bic r0, r0, #0x1f