Module Name: src
Committed By: matt
Date: Sun May 31 00:02:16 UTC 2015
Modified Files:
src/sys/arch/arm/cortex: a9_mpsubr.S
Log Message:
Add CALL macro to hide ugliness of calling when KERNEL_BASE_VOFFSET is non-0
To generate a diff of this commit:
cvs rdiff -u -r1.40 -r1.41 src/sys/arch/arm/cortex/a9_mpsubr.S
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/cortex/a9_mpsubr.S
diff -u src/sys/arch/arm/cortex/a9_mpsubr.S:1.40 src/sys/arch/arm/cortex/a9_mpsubr.S:1.41
--- src/sys/arch/arm/cortex/a9_mpsubr.S:1.40 Sat May 30 21:44:38 2015
+++ src/sys/arch/arm/cortex/a9_mpsubr.S Sun May 31 00:02:16 2015
@@ -1,4 +1,4 @@
-/* $NetBSD: a9_mpsubr.S,v 1.40 2015/05/30 21:44:38 matt Exp $ */
+/* $NetBSD: a9_mpsubr.S,v 1.41 2015/05/31 00:02:16 matt Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -39,6 +39,18 @@
//#define MPDEBUG
+// Marco to call routines in .text
+#if defined(KERNEL_BASES_EQUAL)
+#define CALL(f) bl _C_LABEL(f)
+#else
+#define CALL(f) \
+ movw ip, #:lower16:_C_LABEL(f); \
+ movt ip, #:upper16:_C_LABEL(f); \
+ sub ip, ip, #KERNEL_BASE_VOFFSET; \
+ blx ip
+#endif
+
+
// We'll modify va and pa at run time so we can use relocatable addresses.
#define MMU_INIT(va,pa,n_sec,attr) \
.word ((va) & 0xffffffff)|(n_sec) ; \
@@ -413,14 +425,7 @@ cortex_init:
// Step 1b, invalidate the data cache
//
XPUTC(#'B')
-#if defined(KERNEL_BASES_EQUAL)
- bl _C_LABEL(armv7_dcache_wbinv_all)
-#else
- movw ip, #:lower16:_C_LABEL(armv7_dcache_wbinv_all)
- movt ip, #:upper16:_C_LABEL(armv7_dcache_wbinv_all)
- sub ip, ip, #KERNEL_BASE_VOFFSET
- blx ip // writeback & toss d-cache
-#endif
+ CALL(armv7_dcache_wbinv_all)
XPUTC(#'C')
//
@@ -566,19 +571,8 @@ cortex_mpstart:
// L1 cache without fear of losing valuable data. Afterwards, we can
// flush icache without worrying about anything getting written back
// to memory.
-#if defined(KERNEL_BASES_EQUAL)
- bl _C_LABEL(armv7_dcache_l1inv_all)// toss-dcache
- bl _C_LABEL(armv7_icache_inv_all) // toss i-cache after d-cache
-#else
- movw ip, #:lower16:_C_LABEL(armv7_dcache_l1inv_all)
- movt ip, #:upper16:_C_LABEL(armv7_dcache_l1inv_all)
- sub ip, ip, #KERNEL_BASE_VOFFSET
- blx ip // toss d-cache
- movw ip, #:lower16:_C_LABEL(armv7_icache_inv_all)
- movt ip, #:upper16:_C_LABEL(armv7_icache_inv_all)
- sub ip, ip, #KERNEL_BASE_VOFFSET
- blx ip // toss i-cache after d-cache
-#endif
+ CALL(armv7_dcache_l1inv_all) // toss-dcache
+ CALL(armv7_icache_inv_all) // toss i-cache after d-cache
#if 0
mrc p15, 0, r0, c1, c1, 2 // NSACR read