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