From owner-svn-src-projects@FreeBSD.ORG Wed Apr 4 19:40:16 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8EFDD1065670; Wed, 4 Apr 2012 19:40:16 +0000 (UTC) (envelope-from cognet@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 78B2B8FC19; Wed, 4 Apr 2012 19:40:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q34JeGTa022018; Wed, 4 Apr 2012 19:40:16 GMT (envelope-from cognet@svn.freebsd.org) Received: (from cognet@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q34JeGFA022004; Wed, 4 Apr 2012 19:40:16 GMT (envelope-from cognet@svn.freebsd.org) Message-Id: <201204041940.q34JeGFA022004@svn.freebsd.org> From: Olivier Houchard Date: Wed, 4 Apr 2012 19:40:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r233882 - in projects/armv6/sys: arm/arm arm/at91 arm/econa arm/include arm/mv arm/s3c2xx0 arm/sa11x0 arm/xscale conf X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Apr 2012 19:40:16 -0000 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