svn commit: r233882 - in projects/armv6/sys: arm/arm arm/at91
arm/econa arm/include arm/mv arm/s3c2xx0 arm/sa11x0 arm/xscale conf
Olivier Houchard
cognet at FreeBSD.org
Wed Apr 4 19:40:16 UTC 2012
Author: cognet
Date: Wed Apr 4 19:40:15 2012
New Revision: 233882
URL: http://svn.freebsd.org/changeset/base/233882
Log:
Introduce a new option, ARM_WANT_TP_ADDRESS, and use that to check if we
need the whole ARM_TP_ADDRESS mess, instead of testing #ifdef SMP
Modified:
projects/armv6/sys/arm/arm/machdep.c
projects/armv6/sys/arm/arm/sys_machdep.c
projects/armv6/sys/arm/arm/vm_machdep.c
projects/armv6/sys/arm/at91/std.at91
projects/armv6/sys/arm/econa/std.econa
projects/armv6/sys/arm/include/asmacros.h
projects/armv6/sys/arm/include/pmap.h
projects/armv6/sys/arm/include/sysarch.h
projects/armv6/sys/arm/mv/std.mv
projects/armv6/sys/arm/s3c2xx0/std.s3c2410
projects/armv6/sys/arm/sa11x0/std.sa11x0
projects/armv6/sys/arm/xscale/std.xscale
projects/armv6/sys/conf/options.arm
Modified: projects/armv6/sys/arm/arm/machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/machdep.c Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/arm/machdep.c Wed Apr 4 19:40:15 2012 (r233882)
@@ -265,7 +265,7 @@ static void
cpu_startup(void *dummy)
{
struct pcb *pcb = thread0.td_pcb;
-#ifndef SMP
+#ifdef ARM_TP_ADDRESS
#ifndef ARM_CACHE_LOCK_ENABLE
vm_page_t m;
#endif
@@ -311,7 +311,7 @@ cpu_startup(void *dummy)
vector_page_setprot(VM_PROT_READ);
pmap_set_pcb_pagedir(pmap_kernel(), pcb);
pmap_postinit();
-#ifndef SMP
+#ifdef ARM_TP_ADDRESS
#ifdef ARM_CACHE_LOCK_ENABLE
pmap_kenter_user(ARM_TP_ADDRESS, ARM_TP_ADDRESS);
arm_lock_cache_line(ARM_TP_ADDRESS);
@@ -739,4 +739,5 @@ pcpu0_init(void)
#endif
pcpu_init(pcpup, 0, sizeof(struct pcpu));
PCPU_SET(curthread, &thread0);
+ PCPU_SET(cpu, 0);
}
Modified: projects/armv6/sys/arm/arm/sys_machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/sys_machdep.c Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/arm/sys_machdep.c Wed Apr 4 19:40:15 2012 (r233882)
@@ -91,7 +91,7 @@ arm32_set_tp(struct thread *td, void *ar
if (td != curthread)
td->td_md.md_tp = (register_t)args;
else
-#ifdef _ARM_ARCH_6
+#ifndef ARM_TP_ADDRESS
set_tls(args);
#else
*(register_t *)ARM_TP_ADDRESS = (register_t)args;
@@ -106,7 +106,7 @@ arm32_get_tp(struct thread *td, void *ar
if (td != curthread)
td->td_retval[0] = td->td_md.md_tp;
else
-#ifdef _ARM_ARCH_6
+#ifndef ARM_TP_ADDRESS
td->td_retval[0] = (register_t)get_tls();
#else
td->td_retval[0] = *(register_t *)ARM_TP_ADDRESS;
Modified: projects/armv6/sys/arm/arm/vm_machdep.c
==============================================================================
--- projects/armv6/sys/arm/arm/vm_machdep.c Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/arm/vm_machdep.c Wed Apr 4 19:40:15 2012 (r233882)
@@ -146,7 +146,7 @@ cpu_fork(register struct thread *td1, re
/* Setup to release spin count in fork_exit(). */
td2->td_md.md_spinlock_count = 1;
td2->td_md.md_saved_cspr = 0;
-#if !defined(SMP)
+#ifdef ARM_TP_ADDRESS
td2->td_md.md_tp = *(register_t *)ARM_TP_ADDRESS;
#else
td2->td_md.md_tp = (register_t) get_tls();
@@ -373,11 +373,10 @@ int
cpu_set_user_tls(struct thread *td, void *tls_base)
{
- if (td != curthread)
- td->td_md.md_tp = (register_t)tls_base;
- else {
+ td->td_md.md_tp = (register_t)tls_base;
+ if (td == curthread) {
critical_enter();
-#if !defined(SMP)
+#ifdef ARM_TP_ADDRESS
*(register_t *)ARM_TP_ADDRESS = (register_t)tls_base;
#else
set_tls((void *)tls_base);
Modified: projects/armv6/sys/arm/at91/std.at91
==============================================================================
--- projects/armv6/sys/arm/at91/std.at91 Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/at91/std.at91 Wed Apr 4 19:40:15 2012 (r233882)
@@ -5,3 +5,4 @@ cpu CPU_ARM9
makeoptions CONF_CFLAGS=-mcpu=arm9
options PHYSADDR=0x20000000
options NO_EVENTTIMERS
+options ARM_WANT_TP_ADDRESS
Modified: projects/armv6/sys/arm/econa/std.econa
==============================================================================
--- projects/armv6/sys/arm/econa/std.econa Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/econa/std.econa Wed Apr 4 19:40:15 2012 (r233882)
@@ -14,3 +14,4 @@ options LOADERRAMADDR=0x00000000
options STARTUP_PAGETABLE_ADDR=0x00100000
options NO_EVENTTIMERS
+options ARM_WANT_TP_ADDRESS
Modified: projects/armv6/sys/arm/include/asmacros.h
==============================================================================
--- projects/armv6/sys/arm/include/asmacros.h Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/include/asmacros.h Wed Apr 4 19:40:15 2012 (r233882)
@@ -59,7 +59,7 @@
* NOTE: r13 and r14 are stored separately as a work around for the
* SA110 rev 2 STM^ bug
*/
-#ifndef SMP
+#ifdef ARM_TP_ADDRESS
#define PUSHFRAME \
str lr, [sp, #-4]!; /* Push the return address */ \
sub sp, sp, #(4*17); /* Adjust the stack pointer */ \
@@ -91,6 +91,7 @@
* Since the current mode is used, the SVC lr field is ignored.
*/
+#ifdef ARM_TP_ADDRESS
#define PULLFRAME \
ldr r0, [sp], #0x0004; /* Get the SPSR from stack */ \
msr spsr_all, r0; \
@@ -98,6 +99,16 @@
mov r0, r0; /* NOP for previous instruction */ \
add sp, sp, #(4*17); /* Adjust the stack pointer */ \
ldr lr, [sp], #0x0004; /* Pull the return address */
+#else
+#define PULLFRAME \
+ ldr r0, [sp], #0x0004; /* Get the SPSR from stack */ \
+ msr spsr_all, r0; \
+ clrex; \
+ ldmia sp, {r0-r14}^; /* Restore registers (usr mode) */ \
+ mov r0, r0; /* NOP for previous instruction */ \
+ add sp, sp, #(4*17); /* Adjust the stack pointer */ \
+ ldr lr, [sp], #0x0004; /* Pull the return address */
+#endif
/*
* PUSHFRAMEINSVC - macro to push a trap frame on the stack in SVC32 mode
@@ -109,7 +120,7 @@
* NOTE: r13 and r14 are stored separately as a work around for the
* SA110 rev 2 STM^ bug
*/
-#ifndef SMP
+#ifdef ARM_TP_ADDRESS
#define PUSHFRAMEINSVC \
stmdb sp, {r0-r3}; /* Save 4 registers */ \
mov r0, lr; /* Save xxx32 r14 */ \
@@ -176,13 +187,24 @@
* exit.
*/
+#ifndef ARM_TP_ADDRESS
+#define PULLFRAMEFROMSVCANDEXIT \
+ ldr r0, [sp], #0x0004; /* Get the SPSR from stack */ \
+ msr spsr_all, r0; /* restore SPSR */ \
+ ldmia sp, {r0-r14}^; /* Restore registers (usr mode) */ \
+ mov r0, r0; /* NOP for previous instruction */ \
+ add sp, sp, #(4*15); /* Adjust the stack pointer */ \
+ ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
+#else
#define PULLFRAMEFROMSVCANDEXIT \
ldr r0, [sp], #0x0004; /* Get the SPSR from stack */ \
msr spsr_all, r0; /* restore SPSR */ \
+ clrex; \
ldmia sp, {r0-r14}^; /* Restore registers (usr mode) */ \
mov r0, r0; /* NOP for previous instruction */ \
add sp, sp, #(4*15); /* Adjust the stack pointer */ \
ldmia sp, {sp, lr, pc}^ /* Restore lr and exit */
+#endif
#define DATA(name) \
.data ; \
Modified: projects/armv6/sys/arm/include/pmap.h
==============================================================================
--- projects/armv6/sys/arm/include/pmap.h Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/include/pmap.h Wed Apr 4 19:40:15 2012 (r233882)
@@ -61,7 +61,7 @@
#else
#define PTE_NOCACHE 1
#endif
-#define PTE_CACHE 4
+#define PTE_CACHE 6
#define PTE_DEVICE 2
#define PTE_PAGETABLE 4
#else
Modified: projects/armv6/sys/arm/include/sysarch.h
==============================================================================
--- projects/armv6/sys/arm/include/sysarch.h Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/include/sysarch.h Wed Apr 4 19:40:15 2012 (r233882)
@@ -50,7 +50,8 @@
* if ARM_RAS_END moves in relation to ARM_RAS_START (look for occurrances
* of ldr/str rm,[rn, #4]).
*/
-#if !defined(SMP)
+
+#ifdef ARM_WANT_TP_ADDRESS
#define ARM_TP_ADDRESS (ARM_VECTORS_HIGH + 0x1000)
#define ARM_RAS_START (ARM_TP_ADDRESS + 4)
#define ARM_RAS_END (ARM_TP_ADDRESS + 8)
Modified: projects/armv6/sys/arm/mv/std.mv
==============================================================================
--- projects/armv6/sys/arm/mv/std.mv Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/mv/std.mv Wed Apr 4 19:40:15 2012 (r233882)
@@ -3,3 +3,4 @@
files "../mv/files.mv"
cpu CPU_ARM9E
makeoptions CONF_CFLAGS="-march=armv5te"
+options ARM_WANT_TP_ADDRESS
Modified: projects/armv6/sys/arm/s3c2xx0/std.s3c2410
==============================================================================
--- projects/armv6/sys/arm/s3c2xx0/std.s3c2410 Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/s3c2xx0/std.s3c2410 Wed Apr 4 19:40:15 2012 (r233882)
@@ -5,3 +5,4 @@ cpu CPU_ARM9
makeoptions CONF_CFLAGS=-mcpu=arm920t
options NO_EVENTTIMERS
+options ARM_WANT_TP_ADDRESS
Modified: projects/armv6/sys/arm/sa11x0/std.sa11x0
==============================================================================
--- projects/armv6/sys/arm/sa11x0/std.sa11x0 Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/sa11x0/std.sa11x0 Wed Apr 4 19:40:15 2012 (r233882)
@@ -6,3 +6,4 @@ cpu CPU_SA1110
makeoptions KERNPHYSADDR=0xc0000000
makeoptions KERNVIRTADDR=0xc0000000
options NO_EVENTTIMERS
+options ARM_WANT_TP_ADDRESS
Modified: projects/armv6/sys/arm/xscale/std.xscale
==============================================================================
--- projects/armv6/sys/arm/xscale/std.xscale Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/arm/xscale/std.xscale Wed Apr 4 19:40:15 2012 (r233882)
@@ -1,3 +1,4 @@
# $FreeBSD$
options ARM_CACHE_LOCK_ENABLE
options NO_EVENTTIMERS
+options ARM_WANT_TP_ADDRESS
Modified: projects/armv6/sys/conf/options.arm
==============================================================================
--- projects/armv6/sys/conf/options.arm Wed Apr 4 19:38:36 2012 (r233881)
+++ projects/armv6/sys/conf/options.arm Wed Apr 4 19:40:15 2012 (r233882)
@@ -6,6 +6,7 @@ ARM_KERN_DIRECTMAP opt_vm.h
ARM_L2_PIPT opt_global.h
ARM_USE_SMALL_ALLOC opt_global.h
ARM_VFP_SUPPORT opt_global.h
+ARM_WANT_TP_ADDRESS opt_global.h
AT91C_MASTER_CLOCK opt_global.h
AT91C_MAIN_CLOCK opt_at91.h
COUNTS_PER_SEC opt_timer.h
More information about the svn-src-projects
mailing list