diff options
author | ian <ian@FreeBSD.org> | 2014-05-17 13:53:38 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2014-05-17 13:53:38 +0000 |
commit | f51629e24e56540c52920e2b0e3fa2eddb3c8bed (patch) | |
tree | 21720b45d81bf613d158521e59271dd9e921cd76 /sys | |
parent | 6341a2d92b98c830653de9c38705ec3321702a1e (diff) | |
download | FreeBSD-src-f51629e24e56540c52920e2b0e3fa2eddb3c8bed.zip FreeBSD-src-f51629e24e56540c52920e2b0e3fa2eddb3c8bed.tar.gz |
MFC 262952, 262958, 262966, 262979, 262980, 262986, 262987, 262995, 262997,
263030, 263033, 263034, 263056, 263057,
Remove all the redundant external declarations of exception vectors and
runtime setting of the pointers that's scattered around various places.
Remove all traces of support for ARM chips prior to the arm9 series.
Make the default exception handler vectors point to where I thought they
were already pointing: the default handlers (not a panic that says there
is no default handler).
Eliminate irq_dispatch.S. Move the data items it contained into
arm/intr.c and the functionality it provided into arm/exception.S.
Move the exception vector table (so-called "page0" data) into exception.S
and eliminate vectors.S.
Change the way the asm GET_CURTHREAD_PTR() macro is defined so that code
using it doesn't have to have an "AST_LOCALS" macro somewhere in the file.
Arrange for arm fork_trampoline() to return to userland via the standard
swi_exit code in exception.S instead of having its own inline expansion
of the DO_AST and PULLFRAME macros.
Now that the PUSHFRAME and PULLFRAME macros are used only in the swi
entry/exit code, they don't need to be macros. Except that didn't work
and the whole change was reverted.
Remove some unnecessary indirection and jump right to the handler functions.
Use panic rather than printf to "handle" an arm26 address exception
(should never happen on arm32).
Remove the unreferenced DATA() macro.
Remove #include <machine/asmacros.h> from files that don't need it.
Diffstat (limited to 'sys')
85 files changed, 418 insertions, 6077 deletions
diff --git a/sys/arm/allwinner/a20/files.a20 b/sys/arm/allwinner/a20/files.a20 index fc66cee..c2f34ab 100644 --- a/sys/arm/allwinner/a20/files.a20 +++ b/sys/arm/allwinner/a20/files.a20 @@ -7,7 +7,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/arm/gic.c standard arm/allwinner/a20/a20_cpu_cfg.c standard diff --git a/sys/arm/allwinner/files.a10 b/sys/arm/allwinner/files.a10 index 22bc94e..2d14118 100644 --- a/sys/arm/allwinner/files.a10 +++ b/sys/arm/allwinner/files.a10 @@ -7,7 +7,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/allwinner/a10_clk.c standard arm/allwinner/a10_common.c standard diff --git a/sys/arm/arm/copystr.S b/sys/arm/arm/copystr.S index 7cd3571..0b95686 100644 --- a/sys/arm/arm/copystr.S +++ b/sys/arm/arm/copystr.S @@ -42,7 +42,6 @@ #include "assym.s" #include <machine/asm.h> #include <machine/armreg.h> -#include <machine/asmacros.h> __FBSDID("$FreeBSD$"); #include <sys/errno.h> diff --git a/sys/arm/arm/cpufunc.c b/sys/arm/arm/cpufunc.c index 44e81d8..3b9155f 100644 --- a/sys/arm/arm/cpufunc.c +++ b/sys/arm/arm/cpufunc.c @@ -1,9 +1,6 @@ /* $NetBSD: cpufunc.c,v 1.65 2003/11/05 12:53:15 scw Exp $ */ /*- - * arm7tdmi support code Copyright (c) 2001 John Fremlin - * arm8 support code Copyright (c) 1997 ARM Limited - * arm8 support code Copyright (c) 1997 Causality Limited * arm9 support code Copyright (C) 2001 ARM Ltd * Copyright (c) 1997 Mark Brinicombe. * Copyright (c) 1997 Causality Limited @@ -112,131 +109,6 @@ u_int arm_cache_loc; int cpu_do_powersave; int ctrl; -#ifdef CPU_ARM7TDMI -struct cpu_functions arm7tdmi_cpufuncs = { - /* CPU functions */ - - cpufunc_id, /* id */ - cpufunc_nullop, /* cpwait */ - - /* MMU functions */ - - cpufunc_control, /* control */ - cpufunc_domains, /* domain */ - arm7tdmi_setttb, /* setttb */ - cpufunc_faultstatus, /* faultstatus */ - cpufunc_faultaddress, /* faultaddress */ - - /* TLB functions */ - - arm7tdmi_tlb_flushID, /* tlb_flushID */ - arm7tdmi_tlb_flushID_SE, /* tlb_flushID_SE */ - arm7tdmi_tlb_flushID, /* tlb_flushI */ - arm7tdmi_tlb_flushID_SE, /* tlb_flushI_SE */ - arm7tdmi_tlb_flushID, /* tlb_flushD */ - arm7tdmi_tlb_flushID_SE, /* tlb_flushD_SE */ - - /* Cache operations */ - - cpufunc_nullop, /* icache_sync_all */ - (void *)cpufunc_nullop, /* icache_sync_range */ - - arm7tdmi_cache_flushID, /* dcache_wbinv_all */ - (void *)arm7tdmi_cache_flushID, /* dcache_wbinv_range */ - (void *)arm7tdmi_cache_flushID, /* dcache_inv_range */ - (void *)cpufunc_nullop, /* dcache_wb_range */ - - cpufunc_nullop, /* idcache_inv_all */ - arm7tdmi_cache_flushID, /* idcache_wbinv_all */ - (void *)arm7tdmi_cache_flushID, /* idcache_wbinv_range */ - cpufunc_nullop, /* l2cache_wbinv_all */ - (void *)cpufunc_nullop, /* l2cache_wbinv_range */ - (void *)cpufunc_nullop, /* l2cache_inv_range */ - (void *)cpufunc_nullop, /* l2cache_wb_range */ - - /* Other functions */ - - cpufunc_nullop, /* flush_prefetchbuf */ - cpufunc_nullop, /* drain_writebuf */ - cpufunc_nullop, /* flush_brnchtgt_C */ - (void *)cpufunc_nullop, /* flush_brnchtgt_E */ - - (void *)cpufunc_nullop, /* sleep */ - - /* Soft functions */ - - late_abort_fixup, /* dataabt_fixup */ - cpufunc_null_fixup, /* prefetchabt_fixup */ - - arm7tdmi_context_switch, /* context_switch */ - - arm7tdmi_setup /* cpu setup */ - -}; -#endif /* CPU_ARM7TDMI */ - -#ifdef CPU_ARM8 -struct cpu_functions arm8_cpufuncs = { - /* CPU functions */ - - cpufunc_id, /* id */ - cpufunc_nullop, /* cpwait */ - - /* MMU functions */ - - cpufunc_control, /* control */ - cpufunc_domains, /* domain */ - arm8_setttb, /* setttb */ - cpufunc_faultstatus, /* faultstatus */ - cpufunc_faultaddress, /* faultaddress */ - - /* TLB functions */ - - arm8_tlb_flushID, /* tlb_flushID */ - arm8_tlb_flushID_SE, /* tlb_flushID_SE */ - arm8_tlb_flushID, /* tlb_flushI */ - arm8_tlb_flushID_SE, /* tlb_flushI_SE */ - arm8_tlb_flushID, /* tlb_flushD */ - arm8_tlb_flushID_SE, /* tlb_flushD_SE */ - - /* Cache operations */ - - cpufunc_nullop, /* icache_sync_all */ - (void *)cpufunc_nullop, /* icache_sync_range */ - - arm8_cache_purgeID, /* dcache_wbinv_all */ - (void *)arm8_cache_purgeID, /* dcache_wbinv_range */ -/*XXX*/ (void *)arm8_cache_purgeID, /* dcache_inv_range */ - (void *)arm8_cache_cleanID, /* dcache_wb_range */ - - cpufunc_nullop, /* idcache_inv_all */ - arm8_cache_purgeID, /* idcache_wbinv_all */ - (void *)arm8_cache_purgeID, /* idcache_wbinv_range */ - cpufunc_nullop, /* l2cache_wbinv_all */ - (void *)cpufunc_nullop, /* l2cache_wbinv_range */ - (void *)cpufunc_nullop, /* l2cache_inv_range */ - (void *)cpufunc_nullop, /* l2cache_wb_range */ - - /* Other functions */ - - cpufunc_nullop, /* flush_prefetchbuf */ - cpufunc_nullop, /* drain_writebuf */ - cpufunc_nullop, /* flush_brnchtgt_C */ - (void *)cpufunc_nullop, /* flush_brnchtgt_E */ - - (void *)cpufunc_nullop, /* sleep */ - - /* Soft functions */ - - cpufunc_null_fixup, /* dataabt_fixup */ - cpufunc_null_fixup, /* prefetchabt_fixup */ - - arm8_context_switch, /* context_switch */ - - arm8_setup /* cpu setup */ -}; -#endif /* CPU_ARM8 */ - #ifdef CPU_ARM9 struct cpu_functions arm9_cpufuncs = { /* CPU functions */ @@ -550,192 +422,6 @@ struct cpu_functions pj4bv7_cpufuncs = { }; #endif /* CPU_MV_PJ4B */ -#ifdef CPU_SA110 -struct cpu_functions sa110_cpufuncs = { - /* CPU functions */ - - cpufunc_id, /* id */ - cpufunc_nullop, /* cpwait */ - - /* MMU functions */ - - cpufunc_control, /* control */ - cpufunc_domains, /* domain */ - sa1_setttb, /* setttb */ - cpufunc_faultstatus, /* faultstatus */ - cpufunc_faultaddress, /* faultaddress */ - - /* TLB functions */ - - armv4_tlb_flushID, /* tlb_flushID */ - sa1_tlb_flushID_SE, /* tlb_flushID_SE */ - armv4_tlb_flushI, /* tlb_flushI */ - (void *)armv4_tlb_flushI, /* tlb_flushI_SE */ - armv4_tlb_flushD, /* tlb_flushD */ - armv4_tlb_flushD_SE, /* tlb_flushD_SE */ - - /* Cache operations */ - - sa1_cache_syncI, /* icache_sync_all */ - sa1_cache_syncI_rng, /* icache_sync_range */ - - sa1_cache_purgeD, /* dcache_wbinv_all */ - sa1_cache_purgeD_rng, /* dcache_wbinv_range */ -/*XXX*/ sa1_cache_purgeD_rng, /* dcache_inv_range */ - sa1_cache_cleanD_rng, /* dcache_wb_range */ - - sa1_cache_flushID, /* idcache_inv_all */ - sa1_cache_purgeID, /* idcache_wbinv_all */ - sa1_cache_purgeID_rng, /* idcache_wbinv_range */ - cpufunc_nullop, /* l2cache_wbinv_all */ - (void *)cpufunc_nullop, /* l2cache_wbinv_range */ - (void *)cpufunc_nullop, /* l2cache_inv_range */ - (void *)cpufunc_nullop, /* l2cache_wb_range */ - - /* Other functions */ - - cpufunc_nullop, /* flush_prefetchbuf */ - armv4_drain_writebuf, /* drain_writebuf */ - cpufunc_nullop, /* flush_brnchtgt_C */ - (void *)cpufunc_nullop, /* flush_brnchtgt_E */ - - (void *)cpufunc_nullop, /* sleep */ - - /* Soft functions */ - - cpufunc_null_fixup, /* dataabt_fixup */ - cpufunc_null_fixup, /* prefetchabt_fixup */ - - sa110_context_switch, /* context_switch */ - - sa110_setup /* cpu setup */ -}; -#endif /* CPU_SA110 */ - -#if defined(CPU_SA1100) || defined(CPU_SA1110) -struct cpu_functions sa11x0_cpufuncs = { - /* CPU functions */ - - cpufunc_id, /* id */ - cpufunc_nullop, /* cpwait */ - - /* MMU functions */ - - cpufunc_control, /* control */ - cpufunc_domains, /* domain */ - sa1_setttb, /* setttb */ - cpufunc_faultstatus, /* faultstatus */ - cpufunc_faultaddress, /* faultaddress */ - - /* TLB functions */ - - armv4_tlb_flushID, /* tlb_flushID */ - sa1_tlb_flushID_SE, /* tlb_flushID_SE */ - armv4_tlb_flushI, /* tlb_flushI */ - (void *)armv4_tlb_flushI, /* tlb_flushI_SE */ - armv4_tlb_flushD, /* tlb_flushD */ - armv4_tlb_flushD_SE, /* tlb_flushD_SE */ - - /* Cache operations */ - - sa1_cache_syncI, /* icache_sync_all */ - sa1_cache_syncI_rng, /* icache_sync_range */ - - sa1_cache_purgeD, /* dcache_wbinv_all */ - sa1_cache_purgeD_rng, /* dcache_wbinv_range */ -/*XXX*/ sa1_cache_purgeD_rng, /* dcache_inv_range */ - sa1_cache_cleanD_rng, /* dcache_wb_range */ - - sa1_cache_flushID, /* idcache_inv_all */ - sa1_cache_purgeID, /* idcache_wbinv_all */ - sa1_cache_purgeID_rng, /* idcache_wbinv_range */ - cpufunc_nullop, /* l2cache_wbinv_all */ - (void *)cpufunc_nullop, /* l2cache_wbinv_range */ - (void *)cpufunc_nullop, /* l2cache_inv_range */ - (void *)cpufunc_nullop, /* l2cache_wb_range */ - - /* Other functions */ - - sa11x0_drain_readbuf, /* flush_prefetchbuf */ - armv4_drain_writebuf, /* drain_writebuf */ - cpufunc_nullop, /* flush_brnchtgt_C */ - (void *)cpufunc_nullop, /* flush_brnchtgt_E */ - - sa11x0_cpu_sleep, /* sleep */ - - /* Soft functions */ - - cpufunc_null_fixup, /* dataabt_fixup */ - cpufunc_null_fixup, /* prefetchabt_fixup */ - - sa11x0_context_switch, /* context_switch */ - - sa11x0_setup /* cpu setup */ -}; -#endif /* CPU_SA1100 || CPU_SA1110 */ - -#ifdef CPU_IXP12X0 -struct cpu_functions ixp12x0_cpufuncs = { - /* CPU functions */ - - cpufunc_id, /* id */ - cpufunc_nullop, /* cpwait */ - - /* MMU functions */ - - cpufunc_control, /* control */ - cpufunc_domains, /* domain */ - sa1_setttb, /* setttb */ - cpufunc_faultstatus, /* faultstatus */ - cpufunc_faultaddress, /* faultaddress */ - - /* TLB functions */ - - armv4_tlb_flushID, /* tlb_flushID */ - sa1_tlb_flushID_SE, /* tlb_flushID_SE */ - armv4_tlb_flushI, /* tlb_flushI */ - (void *)armv4_tlb_flushI, /* tlb_flushI_SE */ - armv4_tlb_flushD, /* tlb_flushD */ - armv4_tlb_flushD_SE, /* tlb_flushD_SE */ - - /* Cache operations */ - - sa1_cache_syncI, /* icache_sync_all */ - sa1_cache_syncI_rng, /* icache_sync_range */ - - sa1_cache_purgeD, /* dcache_wbinv_all */ - sa1_cache_purgeD_rng, /* dcache_wbinv_range */ -/*XXX*/ sa1_cache_purgeD_rng, /* dcache_inv_range */ - sa1_cache_cleanD_rng, /* dcache_wb_range */ - - sa1_cache_flushID, /* idcache_inv_all */ - sa1_cache_purgeID, /* idcache_wbinv_all */ - sa1_cache_purgeID_rng, /* idcache_wbinv_range */ - cpufunc_nullop, /* l2cache_wbinv_all */ - (void *)cpufunc_nullop, /* l2cache_wbinv_range */ - (void *)cpufunc_nullop, /* l2cache_inv_range */ - (void *)cpufunc_nullop, /* l2cache_wb_range */ - - /* Other functions */ - - ixp12x0_drain_readbuf, /* flush_prefetchbuf */ - armv4_drain_writebuf, /* drain_writebuf */ - cpufunc_nullop, /* flush_brnchtgt_C */ - (void *)cpufunc_nullop, /* flush_brnchtgt_E */ - - (void *)cpufunc_nullop, /* sleep */ - - /* Soft functions */ - - cpufunc_null_fixup, /* dataabt_fixup */ - cpufunc_null_fixup, /* prefetchabt_fixup */ - - ixp12x0_context_switch, /* context_switch */ - - ixp12x0_setup /* cpu setup */ -}; -#endif /* CPU_IXP12X0 */ - #if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ defined(CPU_XSCALE_80219) @@ -1128,7 +814,7 @@ struct cpu_functions cpufuncs; u_int cputype; u_int cpu_reset_needs_v4_MMU_disable; /* flag used in locore.s */ -#if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined(CPU_ARM9) || \ +#if defined(CPU_ARM9) || \ defined (CPU_ARM9E) || defined (CPU_ARM10) || defined (CPU_ARM1136) || \ defined(CPU_ARM1176) || defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ @@ -1247,61 +933,7 @@ get_cachetype_cp15() arm_dcache_align_mask = arm_dcache_align - 1; } } -#endif /* ARM7TDMI || ARM8 || ARM9 || XSCALE */ - -#if defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \ - defined(CPU_IXP12X0) -/* Cache information for CPUs without cache type registers. */ -struct cachetab { - u_int32_t ct_cpuid; - int ct_pcache_type; - int ct_pcache_unified; - int ct_pdcache_size; - int ct_pdcache_line_size; - int ct_pdcache_ways; - int ct_picache_size; - int ct_picache_line_size; - int ct_picache_ways; -}; - -struct cachetab cachetab[] = { - /* cpuid, cache type, u, dsiz, ls, wy, isiz, ls, wy */ - /* XXX is this type right for SA-1? */ - { CPU_ID_SA110, CPU_CT_CTYPE_WB1, 0, 16384, 32, 32, 16384, 32, 32 }, - { CPU_ID_SA1100, CPU_CT_CTYPE_WB1, 0, 8192, 32, 32, 16384, 32, 32 }, - { CPU_ID_SA1110, CPU_CT_CTYPE_WB1, 0, 8192, 32, 32, 16384, 32, 32 }, - { CPU_ID_IXP1200, CPU_CT_CTYPE_WB1, 0, 16384, 32, 32, 16384, 32, 32 }, /* XXX */ - { 0, 0, 0, 0, 0, 0, 0, 0} -}; - -static void get_cachetype_table(void); - -static void -get_cachetype_table() -{ - int i; - u_int32_t cpuid = cpufunc_id(); - - for (i = 0; cachetab[i].ct_cpuid != 0; i++) { - if (cachetab[i].ct_cpuid == (cpuid & CPU_ID_CPU_MASK)) { - arm_pcache_type = cachetab[i].ct_pcache_type; - arm_pcache_unified = cachetab[i].ct_pcache_unified; - arm_pdcache_size = cachetab[i].ct_pdcache_size; - arm_pdcache_line_size = - cachetab[i].ct_pdcache_line_size; - arm_pdcache_ways = cachetab[i].ct_pdcache_ways; - arm_picache_size = cachetab[i].ct_picache_size; - arm_picache_line_size = - cachetab[i].ct_picache_line_size; - arm_picache_ways = cachetab[i].ct_picache_ways; - } - } - arm_dcache_align = arm_pdcache_line_size; - - arm_dcache_align_mask = arm_dcache_align - 1; -} - -#endif /* SA110 || SA1100 || SA1111 || IXP12X0 */ +#endif /* ARM9 || XSCALE */ /* * Cannot panic here as we may not have a console yet ... @@ -1318,27 +950,6 @@ set_cpufuncs() * CPU type where we want to use it by default, then we set it. */ -#ifdef CPU_ARM7TDMI - if ((cputype & CPU_ID_IMPLEMENTOR_MASK) == CPU_ID_ARM_LTD && - CPU_ID_IS7(cputype) && - (cputype & CPU_ID_7ARCH_MASK) == CPU_ID_7ARCH_V4T) { - cpufuncs = arm7tdmi_cpufuncs; - cpu_reset_needs_v4_MMU_disable = 0; - get_cachetype_cp15(); - pmap_pte_init_generic(); - goto out; - } -#endif -#ifdef CPU_ARM8 - if ((cputype & CPU_ID_IMPLEMENTOR_MASK) == CPU_ID_ARM_LTD && - (cputype & 0x0000f000) == 0x00008000) { - cpufuncs = arm8_cpufuncs; - cpu_reset_needs_v4_MMU_disable = 0; /* XXX correct? */ - get_cachetype_cp15(); - pmap_pte_init_arm8(); - goto out; - } -#endif /* CPU_ARM8 */ #ifdef CPU_ARM9 if (((cputype & CPU_ID_IMPLEMENTOR_MASK) == CPU_ID_ARM_LTD || (cputype & CPU_ID_IMPLEMENTOR_MASK) == CPU_ID_TI) && @@ -1463,39 +1074,7 @@ set_cpufuncs() goto out; } #endif /* CPU_MV_PJ4B */ -#ifdef CPU_SA110 - if (cputype == CPU_ID_SA110) { - cpufuncs = sa110_cpufuncs; - cpu_reset_needs_v4_MMU_disable = 1; /* SA needs it */ - get_cachetype_table(); - pmap_pte_init_sa1(); - goto out; - } -#endif /* CPU_SA110 */ -#ifdef CPU_SA1100 - if (cputype == CPU_ID_SA1100) { - cpufuncs = sa11x0_cpufuncs; - cpu_reset_needs_v4_MMU_disable = 1; /* SA needs it */ - get_cachetype_table(); - pmap_pte_init_sa1(); - /* Use powersave on this CPU. */ - cpu_do_powersave = 1; - goto out; - } -#endif /* CPU_SA1100 */ -#ifdef CPU_SA1110 - if (cputype == CPU_ID_SA1110) { - cpufuncs = sa11x0_cpufuncs; - cpu_reset_needs_v4_MMU_disable = 1; /* SA needs it */ - get_cachetype_table(); - pmap_pte_init_sa1(); - /* Use powersave on this CPU. */ - cpu_do_powersave = 1; - - goto out; - } -#endif /* CPU_SA1110 */ #if defined(CPU_FA526) || defined(CPU_FA626TE) if (cputype == CPU_ID_FA526 || cputype == CPU_ID_FA626TE) { cpufuncs = fa526_cpufuncs; @@ -1509,15 +1088,7 @@ set_cpufuncs() goto out; } #endif /* CPU_FA526 || CPU_FA626TE */ -#ifdef CPU_IXP12X0 - if (cputype == CPU_ID_IXP1200) { - cpufuncs = ixp12x0_cpufuncs; - cpu_reset_needs_v4_MMU_disable = 1; - get_cachetype_table(); - pmap_pte_init_sa1(); - goto out; - } -#endif /* CPU_IXP12X0 */ + #ifdef CPU_XSCALE_80200 if (cputype == CPU_ID_80200) { int rev = cpufunc_id() & CPU_ID_REVISION_MASK; @@ -1626,8 +1197,6 @@ out: * * DEBUG_FAULT_CORRECTION - Print debugging information during the * correction of registers after a fault. - * ARM6_LATE_ABORT - ARM6 supports both early and late aborts - * when defined should use late aborts */ @@ -1642,344 +1211,12 @@ cpufunc_null_fixup(arg) return(ABORT_FIXUP_OK); } - -#if defined(CPU_ARM7TDMI) - -#ifdef DEBUG_FAULT_CORRECTION -#define DFC_PRINTF(x) printf x -#define DFC_DISASSEMBLE(x) disassemble(x) -#else -#define DFC_PRINTF(x) /* nothing */ -#define DFC_DISASSEMBLE(x) /* nothing */ -#endif - -/* - * "Early" data abort fixup. - * - * For ARM2, ARM2as, ARM3 and ARM6 (in early-abort mode). Also used - * indirectly by ARM6 (in late-abort mode) and ARM7[TDMI]. - * - * In early aborts, we may have to fix up LDM, STM, LDC and STC. - */ -int -early_abort_fixup(arg) - void *arg; -{ - struct trapframe *frame = arg; - u_int fault_pc; - u_int fault_instruction; - int saved_lr = 0; - - if ((frame->tf_spsr & PSR_MODE) == PSR_SVC32_MODE) { - - /* Ok an abort in SVC mode */ - - /* - * Copy the SVC r14 into the usr r14 - The usr r14 is garbage - * as the fault happened in svc mode but we need it in the - * usr slot so we can treat the registers as an array of ints - * during fixing. - * NOTE: This PC is in the position but writeback is not - * allowed on r15. - * Doing it like this is more efficient than trapping this - * case in all possible locations in the following fixup code. - */ - - saved_lr = frame->tf_usr_lr; - frame->tf_usr_lr = frame->tf_svc_lr; - - /* - * Note the trapframe does not have the SVC r13 so a fault - * from an instruction with writeback to r13 in SVC mode is - * not allowed. This should not happen as the kstack is - * always valid. - */ - } - - /* Get fault address and status from the CPU */ - - fault_pc = frame->tf_pc; - fault_instruction = *((volatile unsigned int *)fault_pc); - - /* Decode the fault instruction and fix the registers as needed */ - - if ((fault_instruction & 0x0e000000) == 0x08000000) { - int base; - int loop; - int count; - int *registers = &frame->tf_r0; - - DFC_PRINTF(("LDM/STM\n")); - DFC_DISASSEMBLE(fault_pc); - if (fault_instruction & (1 << 21)) { - DFC_PRINTF(("This instruction must be corrected\n")); - base = (fault_instruction >> 16) & 0x0f; - if (base == 15) - return ABORT_FIXUP_FAILED; - /* Count registers transferred */ - count = 0; - for (loop = 0; loop < 16; ++loop) { - if (fault_instruction & (1<<loop)) - ++count; - } - DFC_PRINTF(("%d registers used\n", count)); - DFC_PRINTF(("Corrected r%d by %d bytes ", - base, count * 4)); - if (fault_instruction & (1 << 23)) { - DFC_PRINTF(("down\n")); - registers[base] -= count * 4; - } else { - DFC_PRINTF(("up\n")); - registers[base] += count * 4; - } - } - } else if ((fault_instruction & 0x0e000000) == 0x0c000000) { - int base; - int offset; - int *registers = &frame->tf_r0; - - /* REGISTER CORRECTION IS REQUIRED FOR THESE INSTRUCTIONS */ - - DFC_DISASSEMBLE(fault_pc); - - /* Only need to fix registers if write back is turned on */ - - if ((fault_instruction & (1 << 21)) != 0) { - base = (fault_instruction >> 16) & 0x0f; - if (base == 13 && - (frame->tf_spsr & PSR_MODE) == PSR_SVC32_MODE) - return ABORT_FIXUP_FAILED; - if (base == 15) - return ABORT_FIXUP_FAILED; - - offset = (fault_instruction & 0xff) << 2; - DFC_PRINTF(("r%d=%08x\n", base, registers[base])); - if ((fault_instruction & (1 << 23)) != 0) - offset = -offset; - registers[base] += offset; - DFC_PRINTF(("r%d=%08x\n", base, registers[base])); - } - } else if ((fault_instruction & 0x0e000000) == 0x0c000000) - return ABORT_FIXUP_FAILED; - - if ((frame->tf_spsr & PSR_MODE) == PSR_SVC32_MODE) { - - /* Ok an abort in SVC mode */ - - /* - * Copy the SVC r14 into the usr r14 - The usr r14 is garbage - * as the fault happened in svc mode but we need it in the - * usr slot so we can treat the registers as an array of ints - * during fixing. - * NOTE: This PC is in the position but writeback is not - * allowed on r15. - * Doing it like this is more efficient than trapping this - * case in all possible locations in the prior fixup code. - */ - - frame->tf_svc_lr = frame->tf_usr_lr; - frame->tf_usr_lr = saved_lr; - - /* - * Note the trapframe does not have the SVC r13 so a fault - * from an instruction with writeback to r13 in SVC mode is - * not allowed. This should not happen as the kstack is - * always valid. - */ - } - - return(ABORT_FIXUP_OK); -} -#endif /* CPU_ARM2/250/3/6/7 */ - - -#if defined(CPU_ARM7TDMI) -/* - * "Late" (base updated) data abort fixup - * - * For ARM6 (in late-abort mode) and ARM7. - * - * In this model, all data-transfer instructions need fixing up. We defer - * LDM, STM, LDC and STC fixup to the early-abort handler. - */ -int -late_abort_fixup(arg) - void *arg; -{ - struct trapframe *frame = arg; - u_int fault_pc; - u_int fault_instruction; - int saved_lr = 0; - - if ((frame->tf_spsr & PSR_MODE) == PSR_SVC32_MODE) { - - /* Ok an abort in SVC mode */ - - /* - * Copy the SVC r14 into the usr r14 - The usr r14 is garbage - * as the fault happened in svc mode but we need it in the - * usr slot so we can treat the registers as an array of ints - * during fixing. - * NOTE: This PC is in the position but writeback is not - * allowed on r15. - * Doing it like this is more efficient than trapping this - * case in all possible locations in the following fixup code. - */ - - saved_lr = frame->tf_usr_lr; - frame->tf_usr_lr = frame->tf_svc_lr; - - /* - * Note the trapframe does not have the SVC r13 so a fault - * from an instruction with writeback to r13 in SVC mode is - * not allowed. This should not happen as the kstack is - * always valid. - */ - } - - /* Get fault address and status from the CPU */ - - fault_pc = frame->tf_pc; - fault_instruction = *((volatile unsigned int *)fault_pc); - - /* Decode the fault instruction and fix the registers as needed */ - - /* Was is a swap instruction ? */ - - if ((fault_instruction & 0x0fb00ff0) == 0x01000090) { - DFC_DISASSEMBLE(fault_pc); - } else if ((fault_instruction & 0x0c000000) == 0x04000000) { - - /* Was is a ldr/str instruction */ - /* This is for late abort only */ - - int base; - int offset; - int *registers = &frame->tf_r0; - - DFC_DISASSEMBLE(fault_pc); - - /* This is for late abort only */ - - if ((fault_instruction & (1 << 24)) == 0 - || (fault_instruction & (1 << 21)) != 0) { - /* postindexed ldr/str with no writeback */ - - base = (fault_instruction >> 16) & 0x0f; - if (base == 13 && - (frame->tf_spsr & PSR_MODE) == PSR_SVC32_MODE) - return ABORT_FIXUP_FAILED; - if (base == 15) - return ABORT_FIXUP_FAILED; - DFC_PRINTF(("late abt fix: r%d=%08x : ", - base, registers[base])); - if ((fault_instruction & (1 << 25)) == 0) { - /* Immediate offset - easy */ - - offset = fault_instruction & 0xfff; - if ((fault_instruction & (1 << 23))) - offset = -offset; - registers[base] += offset; - DFC_PRINTF(("imm=%08x ", offset)); - } else { - /* offset is a shifted register */ - int shift; - - offset = fault_instruction & 0x0f; - if (offset == base) - return ABORT_FIXUP_FAILED; - - /* - * Register offset - hard we have to - * cope with shifts ! - */ - offset = registers[offset]; - - if ((fault_instruction & (1 << 4)) == 0) - /* shift with amount */ - shift = (fault_instruction >> 7) & 0x1f; - else { - /* shift with register */ - if ((fault_instruction & (1 << 7)) != 0) - /* undefined for now so bail out */ - return ABORT_FIXUP_FAILED; - shift = ((fault_instruction >> 8) & 0xf); - if (base == shift) - return ABORT_FIXUP_FAILED; - DFC_PRINTF(("shift reg=%d ", shift)); - shift = registers[shift]; - } - DFC_PRINTF(("shift=%08x ", shift)); - switch (((fault_instruction >> 5) & 0x3)) { - case 0 : /* Logical left */ - offset = (int)(((u_int)offset) << shift); - break; - case 1 : /* Logical Right */ - if (shift == 0) shift = 32; - offset = (int)(((u_int)offset) >> shift); - break; - case 2 : /* Arithmetic Right */ - if (shift == 0) shift = 32; - offset = (int)(((int)offset) >> shift); - break; - case 3 : /* Rotate right (rol or rxx) */ - return ABORT_FIXUP_FAILED; - break; - } - - DFC_PRINTF(("abt: fixed LDR/STR with " - "register offset\n")); - if ((fault_instruction & (1 << 23))) - offset = -offset; - DFC_PRINTF(("offset=%08x ", offset)); - registers[base] += offset; - } - DFC_PRINTF(("r%d=%08x\n", base, registers[base])); - } - } - - if ((frame->tf_spsr & PSR_MODE) == PSR_SVC32_MODE) { - - /* Ok an abort in SVC mode */ - - /* - * Copy the SVC r14 into the usr r14 - The usr r14 is garbage - * as the fault happened in svc mode but we need it in the - * usr slot so we can treat the registers as an array of ints - * during fixing. - * NOTE: This PC is in the position but writeback is not - * allowed on r15. - * Doing it like this is more efficient than trapping this - * case in all possible locations in the prior fixup code. - */ - - frame->tf_svc_lr = frame->tf_usr_lr; - frame->tf_usr_lr = saved_lr; - - /* - * Note the trapframe does not have the SVC r13 so a fault - * from an instruction with writeback to r13 in SVC mode is - * not allowed. This should not happen as the kstack is - * always valid. - */ - } - - /* - * Now let the early-abort fixup routine have a go, in case it - * was an LDM, STM, LDC or STC that faulted. - */ - - return early_abort_fixup(arg); -} -#endif /* CPU_ARM7TDMI */ - /* * CPU Setup code */ -#if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined (CPU_ARM9) || \ +#if defined (CPU_ARM9) || \ defined(CPU_ARM9E) || \ - defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \ defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ defined(CPU_XSCALE_80219) || defined(CPU_XSCALE_81342) || \ @@ -2029,148 +1266,7 @@ parse_cpu_options(args, optlist, cpuctrl) } return(cpuctrl); } -#endif /* CPU_ARM7TDMI || CPU_ARM8 || CPU_SA110 || XSCALE*/ - -#if defined(CPU_ARM7TDMI) || defined(CPU_ARM8) -struct cpu_option arm678_options[] = { -#ifdef COMPAT_12 - { "nocache", IGN, BIC, CPU_CONTROL_IDC_ENABLE }, - { "nowritebuf", IGN, BIC, CPU_CONTROL_WBUF_ENABLE }, -#endif /* COMPAT_12 */ - { "cpu.cache", BIC, OR, CPU_CONTROL_IDC_ENABLE }, - { "cpu.nocache", OR, BIC, CPU_CONTROL_IDC_ENABLE }, - { "cpu.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { "cpu.nowritebuf", OR, BIC, CPU_CONTROL_WBUF_ENABLE }, - { NULL, IGN, IGN, 0 } -}; - -#endif /* CPU_ARM6 || CPU_ARM7 || CPU_ARM7TDMI || CPU_ARM8 */ - -#ifdef CPU_ARM7TDMI -struct cpu_option arm7tdmi_options[] = { - { "arm7.cache", BIC, OR, CPU_CONTROL_IDC_ENABLE }, - { "arm7.nocache", OR, BIC, CPU_CONTROL_IDC_ENABLE }, - { "arm7.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { "arm7.nowritebuf", OR, BIC, CPU_CONTROL_WBUF_ENABLE }, -#ifdef COMPAT_12 - { "fpaclk2", BIC, OR, CPU_CONTROL_CPCLK }, -#endif /* COMPAT_12 */ - { "arm700.fpaclk", BIC, OR, CPU_CONTROL_CPCLK }, - { NULL, IGN, IGN, 0 } -}; - -void -arm7tdmi_setup(args) - char *args; -{ - int cpuctrl; - - cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IDC_ENABLE | CPU_CONTROL_WBUF_ENABLE; - - cpuctrl = parse_cpu_options(args, arm678_options, cpuctrl); - cpuctrl = parse_cpu_options(args, arm7tdmi_options, cpuctrl); - -#ifdef __ARMEB__ - cpuctrl |= CPU_CONTROL_BEND_ENABLE; -#endif - - /* Clear out the cache */ - cpu_idcache_wbinv_all(); - - /* Set the control register */ - ctrl = cpuctrl; - cpu_control(0xffffffff, cpuctrl); -} -#endif /* CPU_ARM7TDMI */ - -#ifdef CPU_ARM8 -struct cpu_option arm8_options[] = { - { "arm8.cache", BIC, OR, CPU_CONTROL_IDC_ENABLE }, - { "arm8.nocache", OR, BIC, CPU_CONTROL_IDC_ENABLE }, - { "arm8.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { "arm8.nowritebuf", OR, BIC, CPU_CONTROL_WBUF_ENABLE }, -#ifdef COMPAT_12 - { "branchpredict", BIC, OR, CPU_CONTROL_BPRD_ENABLE }, -#endif /* COMPAT_12 */ - { "cpu.branchpredict", BIC, OR, CPU_CONTROL_BPRD_ENABLE }, - { "arm8.branchpredict", BIC, OR, CPU_CONTROL_BPRD_ENABLE }, - { NULL, IGN, IGN, 0 } -}; - -void -arm8_setup(args) - char *args; -{ - int integer; - int cpuctrl, cpuctrlmask; - int clocktest; - int setclock = 0; - - cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IDC_ENABLE | CPU_CONTROL_WBUF_ENABLE; - cpuctrlmask = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IDC_ENABLE | CPU_CONTROL_WBUF_ENABLE - | CPU_CONTROL_BPRD_ENABLE | CPU_CONTROL_ROM_ENABLE - | CPU_CONTROL_BEND_ENABLE | CPU_CONTROL_AFLT_ENABLE; - -#ifndef ARM32_DISABLE_ALIGNMENT_FAULTS - cpuctrl |= CPU_CONTROL_AFLT_ENABLE; -#endif - - cpuctrl = parse_cpu_options(args, arm678_options, cpuctrl); - cpuctrl = parse_cpu_options(args, arm8_options, cpuctrl); - -#ifdef __ARMEB__ - cpuctrl |= CPU_CONTROL_BEND_ENABLE; -#endif - - /* Get clock configuration */ - clocktest = arm8_clock_config(0, 0) & 0x0f; - - /* Special ARM8 clock and test configuration */ - if (get_bootconf_option(args, "arm8.clock.reset", BOOTOPT_TYPE_BOOLEAN, &integer)) { - clocktest = 0; - setclock = 1; - } - if (get_bootconf_option(args, "arm8.clock.dynamic", BOOTOPT_TYPE_BOOLEAN, &integer)) { - if (integer) - clocktest |= 0x01; - else - clocktest &= ~(0x01); - setclock = 1; - } - if (get_bootconf_option(args, "arm8.clock.sync", BOOTOPT_TYPE_BOOLEAN, &integer)) { - if (integer) - clocktest |= 0x02; - else - clocktest &= ~(0x02); - setclock = 1; - } - if (get_bootconf_option(args, "arm8.clock.fast", BOOTOPT_TYPE_BININT, &integer)) { - clocktest = (clocktest & ~0xc0) | (integer & 3) << 2; - setclock = 1; - } - if (get_bootconf_option(args, "arm8.test", BOOTOPT_TYPE_BININT, &integer)) { - clocktest |= (integer & 7) << 5; - setclock = 1; - } - - /* Clear out the cache */ - cpu_idcache_wbinv_all(); - - /* Set the control register */ - ctrl = cpuctrl; - cpu_control(0xffffffff, cpuctrl); - - /* Set the clock/test register */ - if (setclock) - arm8_clock_config(0x7f, clocktest); -} -#endif /* CPU_ARM8 */ +#endif /* CPU_ARM9 || XSCALE*/ #ifdef CPU_ARM9 struct cpu_option arm9_options[] = { @@ -2470,124 +1566,6 @@ cortexa_setup(char *args) } #endif /* CPU_CORTEXA */ - -#ifdef CPU_SA110 -struct cpu_option sa110_options[] = { -#ifdef COMPAT_12 - { "nocache", IGN, BIC, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "nowritebuf", IGN, BIC, CPU_CONTROL_WBUF_ENABLE }, -#endif /* COMPAT_12 */ - { "cpu.cache", BIC, OR, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "cpu.nocache", OR, BIC, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "sa110.cache", BIC, OR, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "sa110.icache", BIC, OR, CPU_CONTROL_IC_ENABLE }, - { "sa110.dcache", BIC, OR, CPU_CONTROL_DC_ENABLE }, - { "cpu.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { "cpu.nowritebuf", OR, BIC, CPU_CONTROL_WBUF_ENABLE }, - { "sa110.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { NULL, IGN, IGN, 0 } -}; - -void -sa110_setup(args) - char *args; -{ - int cpuctrl, cpuctrlmask; - - cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE - | CPU_CONTROL_WBUF_ENABLE; - cpuctrlmask = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE - | CPU_CONTROL_WBUF_ENABLE | CPU_CONTROL_ROM_ENABLE - | CPU_CONTROL_BEND_ENABLE | CPU_CONTROL_AFLT_ENABLE - | CPU_CONTROL_LABT_ENABLE | CPU_CONTROL_BPRD_ENABLE - | CPU_CONTROL_CPCLK; - -#ifndef ARM32_DISABLE_ALIGNMENT_FAULTS - cpuctrl |= CPU_CONTROL_AFLT_ENABLE; -#endif - - cpuctrl = parse_cpu_options(args, sa110_options, cpuctrl); - -#ifdef __ARMEB__ - cpuctrl |= CPU_CONTROL_BEND_ENABLE; -#endif - - /* Clear out the cache */ - cpu_idcache_wbinv_all(); - - /* Set the control register */ - ctrl = cpuctrl; -/* cpu_control(cpuctrlmask, cpuctrl);*/ - cpu_control(0xffffffff, cpuctrl); - - /* - * enable clockswitching, note that this doesn't read or write to r0, - * r0 is just to make it valid asm - */ - __asm ("mcr 15, 0, r0, c15, c1, 2"); -} -#endif /* CPU_SA110 */ - -#if defined(CPU_SA1100) || defined(CPU_SA1110) -struct cpu_option sa11x0_options[] = { -#ifdef COMPAT_12 - { "nocache", IGN, BIC, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "nowritebuf", IGN, BIC, CPU_CONTROL_WBUF_ENABLE }, -#endif /* COMPAT_12 */ - { "cpu.cache", BIC, OR, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "cpu.nocache", OR, BIC, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "sa11x0.cache", BIC, OR, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "sa11x0.icache", BIC, OR, CPU_CONTROL_IC_ENABLE }, - { "sa11x0.dcache", BIC, OR, CPU_CONTROL_DC_ENABLE }, - { "cpu.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { "cpu.nowritebuf", OR, BIC, CPU_CONTROL_WBUF_ENABLE }, - { "sa11x0.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { NULL, IGN, IGN, 0 } -}; - -void -sa11x0_setup(args) - char *args; -{ - int cpuctrl, cpuctrlmask; - - cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE - | CPU_CONTROL_WBUF_ENABLE | CPU_CONTROL_LABT_ENABLE; - cpuctrlmask = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_32BP_ENABLE - | CPU_CONTROL_32BD_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE - | CPU_CONTROL_WBUF_ENABLE | CPU_CONTROL_ROM_ENABLE - | CPU_CONTROL_BEND_ENABLE | CPU_CONTROL_AFLT_ENABLE - | CPU_CONTROL_LABT_ENABLE | CPU_CONTROL_BPRD_ENABLE - | CPU_CONTROL_CPCLK | CPU_CONTROL_VECRELOC; - -#ifndef ARM32_DISABLE_ALIGNMENT_FAULTS - cpuctrl |= CPU_CONTROL_AFLT_ENABLE; -#endif - - - cpuctrl = parse_cpu_options(args, sa11x0_options, cpuctrl); - -#ifdef __ARMEB__ - cpuctrl |= CPU_CONTROL_BEND_ENABLE; -#endif - - if (vector_page == ARM_VECTORS_HIGH) - cpuctrl |= CPU_CONTROL_VECRELOC; - /* Clear out the cache */ - cpu_idcache_wbinv_all(); - /* Set the control register */ - ctrl = cpuctrl; - cpu_control(0xffffffff, cpuctrl); -} -#endif /* CPU_SA1100 || CPU_SA1110 */ - #if defined(CPU_FA526) || defined(CPU_FA626TE) struct cpu_option fa526_options[] = { #ifdef COMPAT_12 @@ -2644,60 +1622,6 @@ fa526_setup(char *args) } #endif /* CPU_FA526 || CPU_FA626TE */ - -#if defined(CPU_IXP12X0) -struct cpu_option ixp12x0_options[] = { - { "cpu.cache", BIC, OR, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "cpu.nocache", OR, BIC, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "ixp12x0.cache", BIC, OR, (CPU_CONTROL_IC_ENABLE | CPU_CONTROL_DC_ENABLE) }, - { "ixp12x0.icache", BIC, OR, CPU_CONTROL_IC_ENABLE }, - { "ixp12x0.dcache", BIC, OR, CPU_CONTROL_DC_ENABLE }, - { "cpu.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { "cpu.nowritebuf", OR, BIC, CPU_CONTROL_WBUF_ENABLE }, - { "ixp12x0.writebuf", BIC, OR, CPU_CONTROL_WBUF_ENABLE }, - { NULL, IGN, IGN, 0 } -}; - -void -ixp12x0_setup(args) - char *args; -{ - int cpuctrl, cpuctrlmask; - - - cpuctrl = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE - | CPU_CONTROL_WBUF_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_IC_ENABLE; - - cpuctrlmask = CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_AFLT_ENABLE - | CPU_CONTROL_DC_ENABLE | CPU_CONTROL_WBUF_ENABLE - | CPU_CONTROL_BEND_ENABLE | CPU_CONTROL_SYST_ENABLE - | CPU_CONTROL_ROM_ENABLE | CPU_CONTROL_IC_ENABLE - | CPU_CONTROL_VECRELOC; - -#ifndef ARM32_DISABLE_ALIGNMENT_FAULTS - cpuctrl |= CPU_CONTROL_AFLT_ENABLE; -#endif - - cpuctrl = parse_cpu_options(args, ixp12x0_options, cpuctrl); - -#ifdef __ARMEB__ - cpuctrl |= CPU_CONTROL_BEND_ENABLE; -#endif - - if (vector_page == ARM_VECTORS_HIGH) - cpuctrl |= CPU_CONTROL_VECRELOC; - - /* Clear out the cache */ - cpu_idcache_wbinv_all(); - - /* Set the control register */ - ctrl = cpuctrl; - /* cpu_control(0xffffffff, cpuctrl); */ - cpu_control(cpuctrlmask, cpuctrl); -} -#endif /* CPU_IXP12X0 */ - #if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ defined(CPU_XSCALE_80219) || defined(CPU_XSCALE_81342) diff --git a/sys/arm/arm/cpufunc_asm_arm7tdmi.S b/sys/arm/arm/cpufunc_asm_arm7tdmi.S deleted file mode 100644 index 2ac2502..0000000 --- a/sys/arm/arm/cpufunc_asm_arm7tdmi.S +++ /dev/null @@ -1,106 +0,0 @@ -/* $NetBSD: cpufunc_asm_arm7tdmi.S,v 1.1 2001/11/10 23:14:09 thorpej Exp $ */ - -/*- - * Copyright (c) 2001 John Fremlin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Causality Limited. - * 4. The name of Causality Limited may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY CAUSALITY LIMITED ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL CAUSALITY LIMITED BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * ARM7TDMI assembly functions for CPU / MMU / TLB specific operations - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -/* - * Functions to set the MMU Translation Table Base register - * - * We need to clean and flush the cache as it uses virtual - * addresses that are about to change. - */ -ENTRY(arm7tdmi_setttb) - mov r1, r0 /* store the TTB in a safe place */ - mov r2, lr /* ditto with lr */ - - bl _C_LABEL(arm7tdmi_cache_flushID) - - /* Write the TTB */ - mcr p15, 0, r1, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - bl _C_LABEL(arm7tdmi_tlb_flushID) - - /* For good measure we will flush the IDC as well */ - bl _C_LABEL(arm7tdmi_cache_flushID) - - mov pc, r2 -END(arm7tdmi_setttb) - -/* - * TLB functions - */ -ENTRY(arm7tdmi_tlb_flushID) - mov r0, #0 - mcr p15, 0, r0, c8, c7, 0 - RET -END(arm7tdmi_tlb_flushID) - -ENTRY(arm7tdmi_tlb_flushID_SE) - mcr p15, 0, r0, c8, c7, 1 - RET -END(arm7tdmi_tlb_flushID_SE) - -/* - * Cache functions - */ -ENTRY(arm7tdmi_cache_flushID) - mov r0, #0 - - mcr p15, 0, r0, c7, c7, 0 - - /* Make sure that the pipeline is emptied */ - mov r0, r0 - mov r0, r0 - - RET -END(arm7tdmi_cache_flushID) - -/* - * Context switch. - * - * These is the CPU-specific parts of the context switcher cpu_switch() - * These functions actually perform the TTB reload. - * - * NOTE: Special calling convention - * r1, r4-r13 must be preserved - */ -ENTRY(arm7tdmi_context_switch) - b _C_LABEL(arm7tdmi_setttb) -END(arm7tdmi_context_switch) - diff --git a/sys/arm/arm/cpufunc_asm_arm8.S b/sys/arm/arm/cpufunc_asm_arm8.S deleted file mode 100644 index 787e5b2..0000000 --- a/sys/arm/arm/cpufunc_asm_arm8.S +++ /dev/null @@ -1,296 +0,0 @@ -/* $NetBSD: cpufunc_asm_arm8.S,v 1.2 2001/11/11 00:47:49 thorpej Exp $ */ - -/*- - * Copyright (c) 1997 ARM Limited - * Copyright (c) 1997 Causality Limited - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Causality Limited. - * 4. The name of Causality Limited may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY CAUSALITY LIMITED ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL CAUSALITY LIMITED BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * ARM8 assembly functions for CPU / MMU / TLB specific operations - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -ENTRY(arm8_clock_config) - mrc p15, 0, r3, c15, c0, 0 /* Read the clock register */ - bic r2, r3, #0x11 /* turn off dynamic clocking - and clear L bit */ - mcr p15, 0, r2, c15, c0, 0 /* Write clock register */ - - bic r2, r3, r0 /* Clear bits */ - eor r2, r2, r1 /* XOR bits */ - bic r2, r2, #0x10 /* clear the L bit */ - - bic r1, r2, #0x01 /* still keep dynamic clocking off */ - mcr p15, 0, r1, c15, c0, 0 /* Write clock register */ - mov r0, r0 /* NOP */ - mov r0, r0 /* NOP */ - mov r0, r0 /* NOP */ - mov r0, r0 /* NOP */ - mcr p15, 0, r2, c15, c0, 0 /* Write clock register */ - mov r0, r3 /* Return old value */ - RET -END(arm8_clock_config) - -/* - * Functions to set the MMU Translation Table Base register - * - * We need to clean and flush the cache as it uses virtual - * addresses that are about to change. - */ -ENTRY(arm8_setttb) - mrs r3, cpsr - orr r1, r3, #(I32_bit | F32_bit) - msr cpsr_fsxc, r1 - - stmfd sp!, {r0-r3, lr} - bl _C_LABEL(arm8_cache_cleanID) - ldmfd sp!, {r0-r3, lr} - mcr p15, 0, r0, c7, c7, 0 /* flush I+D cache */ - - /* Write the TTB */ - mcr p15, 0, r0, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - mcr p15, 0, r0, c8, c7, 0 - - /* For good measure we will flush the IDC as well */ - mcr p15, 0, r0, c7, c7, 0 - - /* Make sure that pipeline is emptied */ - mov r0, r0 - mov r0, r0 - msr cpsr_fsxc, r3 - - RET -END(arm8_setttb) - -/* - * TLB functions - */ -ENTRY(arm8_tlb_flushID) - mcr p15, 0, r0, c8, c7, 0 /* flush I+D tlb */ - RET -END(arm8_tlb_flushID) - -ENTRY(arm8_tlb_flushID_SE) - mcr p15, 0, r0, c8, c7, 1 /* flush I+D tlb single entry */ - RET -END(arm8_tlb_flushID_SE) - -/* - * Cache functions - */ -ENTRY(arm8_cache_flushID) - mcr p15, 0, r0, c7, c7, 0 /* flush I+D cache */ - RET -END(arm8_cache_flushID) - -ENTRY(arm8_cache_flushID_E) - mcr p15, 0, r0, c7, c7, 1 /* flush I+D single entry */ - RET -END(arm8_cache_flushID_E) - -ENTRY(arm8_cache_cleanID) - mov r0, #0x00000000 - -1: mov r2, r0 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - - adds r0, r0, #0x04000000 - bne 1b - - RET -END(arm8_cache_cleanID) - -ENTRY(arm8_cache_cleanID_E) - mcr p15, 0, r0, c7, c11, 1 /* clean I+D single entry */ - RET -END(arm8_cache_cleanID_E) - -ENTRY(arm8_cache_purgeID) - /* - * ARM810 bug 3 - * - * Clean and invalidate entry will not invalidate the entry - * if the line was already clean. (mcr p15, 0, rd, c7, 15, 1) - * - * Instead of using the clean and invalidate entry operation - * use a separate clean and invalidate entry operations. - * i.e. - * mcr p15, 0, rd, c7, c11, 1 - * mcr p15, 0, rd, c7, c7, 1 - */ - - mov r0, #0x00000000 - - mrs r3, cpsr - orr r2, r3, #(I32_bit | F32_bit) - msr cpsr_fsxc, r2 - -1: mov r2, r0 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - add r2, r2, #0x10 - mcr p15, 0, r2, c7, c11, 1 - mcr p15, 0, r2, c7, c7, 1 - - adds r0, r0, #0x04000000 - bne 1b - - msr cpsr_fsxc, r3 - RET -END(arm8_cache_purgeID) - -ENTRY(arm8_cache_purgeID_E) - /* - * ARM810 bug 3 - * - * Clean and invalidate entry will not invalidate the entry - * if the line was already clean. (mcr p15, 0, rd, c7, 15, 1) - * - * Instead of using the clean and invalidate entry operation - * use a separate clean and invalidate entry operations. - * i.e. - * mcr p15, 0, rd, c7, c11, 1 - * mcr p15, 0, rd, c7, c7, 1 - */ - mrs r3, cpsr - orr r2, r3, #(I32_bit | F32_bit) - msr cpsr_fsxc, r2 - mcr p15, 0, r0, c7, c11, 1 /* clean I+D single entry */ - mcr p15, 0, r0, c7, c7, 1 /* flush I+D single entry */ - msr cpsr_fsxc, r3 - RET -END(arm8_cache_purgeID_E) - -/* - * Context switch. - * - * These is the CPU-specific parts of the context switcher cpu_switch() - * These functions actually perform the TTB reload. - * - * NOTE: Special calling convention - * r1, r4-r13 must be preserved - */ -ENTRY(arm8_context_switch) - /* For good measure we will flush the IDC as well */ - mcr p15, 0, r0, c7, c7, 0 /* flush I+D cache */ - - /* Write the TTB */ - mcr p15, 0, r0, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - mcr p15, 0, r0, c8, c7, 0 /* flush the I+D tlb */ - -#if 0 - /* For good measure we will flush the IDC as well */ - mcr p15, 0, r0, c7, c7, 0 /* flush I+D cache */ -#endif - - /* Make sure that pipeline is emptied */ - mov r0, r0 - mov r0, r0 - RET -END(arm8_context_switch) - diff --git a/sys/arm/arm/cpufunc_asm_ixp12x0.S b/sys/arm/arm/cpufunc_asm_ixp12x0.S deleted file mode 100644 index 481cf0d..0000000 --- a/sys/arm/arm/cpufunc_asm_ixp12x0.S +++ /dev/null @@ -1,92 +0,0 @@ -/* $NetBSD: cpufunc_asm_ixp12x0.S,v 1.2 2002/08/17 16:36:31 thorpej Exp $ */ - -/*- - * Copyright (c) 2002 Wasabi Systems, Inc. - * All rights reserved. - * - * Written by Jason R. Thorpe for Wasabi Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the NetBSD Project by - * Wasabi Systems, Inc. - * 4. The name of Wasabi Systems, Inc. may not be used to endorse - * or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -/* - * This function is the same as sa110_context_switch for now, the plan - * is to make use of the process id register to avoid cache flushes. - */ -ENTRY(ixp12x0_context_switch) - /* - * CF_CACHE_PURGE_ID will *ALWAYS* be called prior to this. - * Thus the data cache will contain only kernel data and the - * instruction cache will contain only kernel code, and all - * kernel mappings are shared by all processes. - */ - - /* Write the TTB */ - mcr p15, 0, r0, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - mcr p15, 0, r0, c8, c7, 0 /* flush the I+D tlb */ - - /* Make sure that pipeline is emptied */ - mov r0, r0 - mov r0, r0 - RET -END(ixp12x0_context_switch) - -ENTRY(ixp12x0_drain_readbuf) - mcr p15, 0, r0, c9, c0, 0 /* drain read buffer */ - RET -END(ixp12x0_drain_readbuf) - -/* - * Information for the IXP12X0 cache clean/purge functions: - * - * * Virtual address of the memory region to use - * * Size of memory region - */ - .data - - .global _C_LABEL(ixp12x0_cache_clean_addr) -_C_LABEL(ixp12x0_cache_clean_addr): - .word 0xf0000000 - - .global _C_LABEL(ixp12x0_cache_clean_size) -_C_LABEL(ixp12x0_cache_clean_size): - .word 0x00008000 - - .text - -.Lixp12x0_cache_clean_addr: - .word _C_LABEL(ixp12x0_cache_clean_addr) -.Lixp12x0_cache_clean_size: - .word _C_LABEL(ixp12x0_cache_clean_size) diff --git a/sys/arm/arm/cpufunc_asm_sa1.S b/sys/arm/arm/cpufunc_asm_sa1.S deleted file mode 100644 index 77602b1..0000000 --- a/sys/arm/arm/cpufunc_asm_sa1.S +++ /dev/null @@ -1,337 +0,0 @@ -/* $NetBSD: cpufunc_asm_sa1.S,v 1.8 2002/08/17 16:36:32 thorpej Exp $ */ - -/*- - * Copyright (c) 1997,1998 Mark Brinicombe. - * Copyright (c) 1997 Causality Limited - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Causality Limited. - * 4. The name of Causality Limited may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY CAUSALITY LIMITED ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL CAUSALITY LIMITED BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * SA-1 assembly functions for CPU / MMU / TLB specific operations - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -.Lblock_userspace_access: - .word _C_LABEL(block_userspace_access) - -/* - * Functions to set the MMU Translation Table Base register - * - * We need to clean and flush the cache as it uses virtual - * addresses that are about to change. - */ -ENTRY(getttb) - mrc p15, 0, r0, c2, c0, 0 -ENTRY(sa1_setttb) -#ifdef CACHE_CLEAN_BLOCK_INTR - mrs r3, cpsr - orr r1, r3, #(I32_bit | F32_bit) - msr cpsr_fsxc, r1 -#else - ldr r3, .Lblock_userspace_access - ldr r2, [r3] - orr r1, r2, #1 - str r1, [r3] -#endif - stmfd sp!, {r0-r3, lr} - bl _C_LABEL(sa1_cache_cleanID) - ldmfd sp!, {r0-r3, lr} - mcr p15, 0, r0, c7, c5, 0 /* invalidate I$ and BTB */ - mcr p15, 0, r0, c7, c10, 4 /* drain write and fill buffer */ - - /* Write the TTB */ - mcr p15, 0, r0, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - mcr p15, 0, r0, c8, c7, 0 /* invalidate I+D TLB */ - - /* The cleanID above means we only need to flush the I cache here */ - mcr p15, 0, r0, c7, c5, 0 /* invalidate I$ and BTB */ - - /* Make sure that pipeline is emptied */ - mov r0, r0 - mov r0, r0 -#ifdef CACHE_CLEAN_BLOCK_INTR - msr cpsr_fsxc, r3 -#else - str r2, [r3] -#endif - RET -END(getttb) -END(sa1_setttb) - -/* - * TLB functions - */ -ENTRY(sa1_tlb_flushID_SE) - mcr p15, 0, r0, c8, c6, 1 /* flush D tlb single entry */ - mcr p15, 0, r0, c8, c5, 0 /* flush I tlb */ - RET -END(sa1_tlb_flushID_SE) - -/* - * Cache functions - */ -ENTRY(sa1_cache_flushID) - mcr p15, 0, r0, c7, c7, 0 /* flush I+D cache */ - RET -END(sa1_cache_flushID) - -ENTRY(sa1_cache_flushI) - mcr p15, 0, r0, c7, c5, 0 /* flush I cache */ - RET -END(sa1_cache_flushI) - -ENTRY(sa1_cache_flushD) - mcr p15, 0, r0, c7, c6, 0 /* flush D cache */ - RET -END(sa1_cache_flushD) - -ENTRY(sa1_cache_flushD_SE) - mcr p15, 0, r0, c7, c6, 1 /* flush D cache single entry */ - RET -END(sa1_cache_flushD_SE) - -ENTRY(sa1_cache_cleanD_E) - mcr p15, 0, r0, c7, c10, 1 /* clean D cache entry */ - RET -END(sa1_cache_cleanD_E) - -/* - * Information for the SA-1 cache clean/purge functions: - * - * * Virtual address of the memory region to use - * * Size of memory region - */ - .data - - .global _C_LABEL(sa1_cache_clean_addr) -_C_LABEL(sa1_cache_clean_addr): - .word 0xf0000000 - - .global _C_LABEL(sa1_cache_clean_size) -_C_LABEL(sa1_cache_clean_size): -#if defined(CPU_SA1100) || defined(CPU_SA1110) - .word 0x00004000 -#else - .word 0x00008000 -#endif - - .text - -.Lsa1_cache_clean_addr: - .word _C_LABEL(sa1_cache_clean_addr) -.Lsa1_cache_clean_size: - .word _C_LABEL(sa1_cache_clean_size) - -#ifdef CACHE_CLEAN_BLOCK_INTR -#define SA1_CACHE_CLEAN_BLOCK \ - mrs r3, cpsr ; \ - orr r0, r3, #(I32_bit | F32_bit) ; \ - msr cpsr_fsxc, r0 - -#define SA1_CACHE_CLEAN_UNBLOCK \ - msr cpsr_fsxc, r3 -#else -#define SA1_CACHE_CLEAN_BLOCK \ - ldr r3, .Lblock_userspace_access ; \ - ldr ip, [r3] ; \ - orr r0, ip, #1 ; \ - str r0, [r3] - -#define SA1_CACHE_CLEAN_UNBLOCK \ - str ip, [r3] -#endif /* CACHE_CLEAN_BLOCK_INTR */ - -#ifdef DOUBLE_CACHE_CLEAN_BANK -#define SA1_DOUBLE_CACHE_CLEAN_BANK \ - eor r0, r0, r1 ; \ - str r0, [r2] -#else -#define SA1_DOUBLE_CACHE_CLEAN_BANK /* nothing */ -#endif /* DOUBLE_CACHE_CLEAN_BANK */ - -#define SA1_CACHE_CLEAN_PROLOGUE \ - SA1_CACHE_CLEAN_BLOCK ; \ - ldr r2, .Lsa1_cache_clean_addr ; \ - ldmia r2, {r0, r1} ; \ - SA1_DOUBLE_CACHE_CLEAN_BANK - -#define SA1_CACHE_CLEAN_EPILOGUE \ - SA1_CACHE_CLEAN_UNBLOCK - -ENTRY_NP(sa1_cache_syncI) -ENTRY_NP(sa1_cache_purgeID) - mcr p15, 0, r0, c7, c5, 0 /* flush I cache (D cleaned below) */ -ENTRY_NP(sa1_cache_cleanID) -ENTRY_NP(sa1_cache_purgeD) -ENTRY(sa1_cache_cleanD) - SA1_CACHE_CLEAN_PROLOGUE - -1: ldr r2, [r0], #32 - subs r1, r1, #32 - bne 1b - - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - - SA1_CACHE_CLEAN_EPILOGUE - RET -END(sa1_cache_syncI) -END(sa1_cache_purgeID) -END(sa1_cache_cleanID) -END(sa1_cache_purgeD) -END(sa1_cache_cleanD) - -ENTRY(sa1_cache_purgeID_E) - mcr p15, 0, r0, c7, c10, 1 /* clean dcache entry */ - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - mcr p15, 0, r0, c7, c5, 0 /* flush I cache */ - mcr p15, 0, r0, c7, c6, 1 /* flush D cache single entry */ - RET -END(sa1_cache_purgeID_E) - -ENTRY(sa1_cache_purgeD_E) - mcr p15, 0, r0, c7, c10, 1 /* clean dcache entry */ - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - mcr p15, 0, r0, c7, c6, 1 /* flush D cache single entry */ - RET -END(sa1_cache_purgeD_E) - -/* - * Soft functions - */ -/* sa1_cache_syncI is identical to sa1_cache_purgeID */ - -ENTRY(sa1_cache_cleanID_rng) -ENTRY(sa1_cache_cleanD_rng) - cmp r1, #0x4000 - bcs _C_LABEL(sa1_cache_cleanID) - - and r2, r0, #0x1f - add r1, r1, r2 - bic r0, r0, #0x1f - -1: mcr p15, 0, r0, c7, c10, 1 /* clean D cache entry */ - add r0, r0, #32 - subs r1, r1, #32 - bhi 1b - - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - RET -END(sa1_cache_cleanID_rng) -END(sa1_cache_cleanD_rng) - -ENTRY(sa1_cache_purgeID_rng) - cmp r1, #0x4000 - bcs _C_LABEL(sa1_cache_purgeID) - - and r2, r0, #0x1f - add r1, r1, r2 - bic r0, r0, #0x1f - -1: mcr p15, 0, r0, c7, c10, 1 /* clean D cache entry */ - mcr p15, 0, r0, c7, c6, 1 /* flush D cache single entry */ - add r0, r0, #32 - subs r1, r1, #32 - bhi 1b - - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - mcr p15, 0, r0, c7, c5, 0 /* flush I cache */ - RET -END(sa1_cache_purgeID_rng) - -ENTRY(sa1_cache_purgeD_rng) - cmp r1, #0x4000 - bcs _C_LABEL(sa1_cache_purgeD) - - and r2, r0, #0x1f - add r1, r1, r2 - bic r0, r0, #0x1f - -1: mcr p15, 0, r0, c7, c10, 1 /* clean D cache entry */ - mcr p15, 0, r0, c7, c6, 1 /* flush D cache single entry */ - add r0, r0, #32 - subs r1, r1, #32 - bhi 1b - - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - RET -END(sa1_cache_purgeD_rng) - -ENTRY(sa1_cache_syncI_rng) - cmp r1, #0x4000 - bcs _C_LABEL(sa1_cache_syncI) - - and r2, r0, #0x1f - add r1, r1, r2 - bic r0, r0, #0x1f - -1: mcr p15, 0, r0, c7, c10, 1 /* clean D cache entry */ - add r0, r0, #32 - subs r1, r1, #32 - bhi 1b - - mcr p15, 0, r0, c7, c10, 4 /* drain write buffer */ - mcr p15, 0, r0, c7, c5, 0 /* flush I cache */ - - RET -END(sa1_cache_syncI_rng) - -/* - * Context switch. - * - * These is the CPU-specific parts of the context switcher cpu_switch() - * These functions actually perform the TTB reload. - * - * NOTE: Special calling convention - * r1, r4-r13 must be preserved - */ -#if defined(CPU_SA110) -ENTRY(sa110_context_switch) - /* - * CF_CACHE_PURGE_ID will *ALWAYS* be called prior to this. - * Thus the data cache will contain only kernel data and the - * instruction cache will contain only kernel code, and all - * kernel mappings are shared by all processes. - */ - - /* Write the TTB */ - mcr p15, 0, r0, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - mcr p15, 0, r0, c8, c7, 0 /* flush the I+D tlb */ - - /* Make sure that pipeline is emptied */ - mov r0, r0 - mov r0, r0 - RET -END(sa110_context_switch) -#endif diff --git a/sys/arm/arm/cpufunc_asm_sa11x0.S b/sys/arm/arm/cpufunc_asm_sa11x0.S deleted file mode 100644 index ffd214e..0000000 --- a/sys/arm/arm/cpufunc_asm_sa11x0.S +++ /dev/null @@ -1,128 +0,0 @@ -/* $NetBSD: cpufunc_asm_sa11x0.S,v 1.3 2002/08/17 16:36:32 thorpej Exp $ */ - -/*- - * Copyright (c) 2002 Wasabi Systems, Inc. - * All rights reserved. - * - * Written by Jason R. Thorpe for Wasabi Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the NetBSD Project by - * Wasabi Systems, Inc. - * 4. The name of Wasabi Systems, Inc. may not be used to endorse - * or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - - .data - .global _C_LABEL(sa11x0_idle_mem) -_C_LABEL(sa11x0_idle_mem): - .word 0 - - .text - - .align 5 - - /* We're now 32-byte aligned */ - -.Lsa11x0_idle_mem: - .word _C_LABEL(sa11x0_idle_mem) /* 1 */ - -/* - * sa11x0_cpusleep - * - * This is called when there is nothing on any of the run queues. - * We go into IDLE mode so that any IRQ or FIQ will awaken us. - */ -ENTRY(sa11x0_cpu_sleep) - ldr r1, .Lsa11x0_idle_mem /* get address of... */ /* 2 */ - nop /* 3 */ - ldr r1, [r1] /* ...non-cacheable page */ /* 4 */ - nop /* 5 */ - - /* - * SA-1110 manual, 9.5.2.1 (Entering Idle Mode) says that - * to enter idle mode: - * - * * Disable clock switching - * * Issue load from non-cacheable address - * * Issue "wait for interrupt" - * - * The 3-insn sequence must reside in the first 3 words - * of a cache line. - * - * We must disable interrupts in the CPSR so that we can - * re-enable clock switching before servicing interrupts. - */ - - mrs r3, cpsr /* 6 */ - orr r2, r3, #(I32_bit|F32_bit) /* 7 */ - msr cpsr_fsxc, r2 /* 8 */ - - /* We're now 32-byte aligned */ - - mcr p15, 0, r0, c15, c2, 2 /* disable clock switching */ - ldr r0, [r1] /* load from non-cacheable address */ - mcr p15, 0, r0, c15, c8, 2 /* wait for interrupt */ - - mcr p15, 0, r0, c15, c1, 2 /* re-enable clock switching */ - - /* Restore interrupts (which will cause them to be serviced). */ - msr cpsr_fsxc, r3 - RET -END(sa11x0_cpu_sleep) - -/* - * This function is the same as sa110_context_switch for now, the plan - * is to make use of the process id register to avoid cache flushes. - */ -ENTRY(sa11x0_context_switch) - /* - * CF_CACHE_PURGE_ID will *ALWAYS* be called prior to this. - * Thus the data cache will contain only kernel data and the - * instruction cache will contain only kernel code, and all - * kernel mappings are shared by all processes. - */ - - /* Write the TTB */ - mcr p15, 0, r0, c2, c0, 0 - - /* If we have updated the TTB we must flush the TLB */ - mcr p15, 0, r0, c8, c7, 0 /* flush the I+D tlb */ - - /* Make sure that pipeline is emptied */ - mov r0, r0 - mov r0, r0 - RET -END(sa11x0_context_switch) - -ENTRY(sa11x0_drain_readbuf) - mcr p15, 0, r0, c9, c0, 0 /* drain read buffer */ - RET -END(sa11x0_drain_readbuf) - diff --git a/sys/arm/arm/elf_trampoline.c b/sys/arm/arm/elf_trampoline.c index 9371a6d..559b992 100644 --- a/sys/arm/arm/elf_trampoline.c +++ b/sys/arm/arm/elf_trampoline.c @@ -56,13 +56,7 @@ extern void do_call(void *, void *, void *, int); #define GZ_HEAD 0xa -#ifdef CPU_ARM7TDMI -#define cpu_idcache_wbinv_all arm7tdmi_cache_flushID -extern void arm7tdmi_cache_flushID(void); -#elif defined(CPU_ARM8) -#define cpu_idcache_wbinv_all arm8_cache_purgeID -extern void arm8_cache_purgeID(void); -#elif defined(CPU_ARM9) +#if defined(CPU_ARM9) #define cpu_idcache_wbinv_all arm9_idcache_wbinv_all extern void arm9_idcache_wbinv_all(void); #elif defined(CPU_FA526) || defined(CPU_FA626TE) @@ -76,10 +70,6 @@ extern void armv5_ec_idcache_wbinv_all(void); extern void arm10_idcache_wbinv_all(void); #elif defined(CPU_ARM1136) || defined(CPU_ARM1176) #define cpu_idcache_wbinv_all armv6_idcache_wbinv_all -#elif defined(CPU_SA110) || defined(CPU_SA1110) || defined(CPU_SA1100) || \ - defined(CPU_IXP12X0) -#define cpu_idcache_wbinv_all sa1_cache_purgeID -extern void sa1_cache_purgeID(void); #elif defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ defined(CPU_XSCALE_80219) diff --git a/sys/arm/arm/exception.S b/sys/arm/arm/exception.S index d7ef5f2..d49e20d 100644 --- a/sys/arm/arm/exception.S +++ b/sys/arm/arm/exception.S @@ -56,187 +56,408 @@ __FBSDID("$FreeBSD$"); .text .align 0 -AST_LOCALS +/* + * ASM macros for pushing and pulling trapframes from the stack + * + * These macros are used to handle the irqframe and trapframe structures + * defined above. + */ /* - * reset_entry: + * PUSHFRAME - macro to push a trap frame on the stack in the current mode + * Since the current mode is used, the SVC lr field is not defined. * - * Handler for Reset exception. + * NOTE: r13 and r14 are stored separately as a work around for the + * SA110 rev 2 STM^ bug */ -ASENTRY_NP(reset_entry) - adr r0, Lreset_panicmsg - bl _C_LABEL(panic) - /* NOTREACHED */ -Lreset_panicmsg: - .asciz "Reset vector called, LR = 0x%08x" - .balign 4 -END(reset_entry) +#ifdef ARM_TP_ADDRESS +#define PUSHFRAME \ + sub sp, sp, #4; /* Align the stack */ \ + str lr, [sp, #-4]!; /* Push the return address */ \ + sub sp, sp, #(4*17); /* Adjust the stack pointer */ \ + stmia sp, {r0-r12}; /* Push the user mode registers */ \ + add r0, sp, #(4*13); /* Adjust the stack pointer */ \ + stmia r0, {r13-r14}^; /* Push the user mode registers */ \ + mov r0, r0; /* NOP for previous instruction */ \ + mrs r0, spsr; /* Put the SPSR on the stack */ \ + str r0, [sp, #-4]!; \ + ldr r0, =ARM_RAS_START; \ + mov r1, #0; \ + str r1, [r0]; \ + mov r1, #0xffffffff; \ + str r1, [r0, #4]; +#else +#define PUSHFRAME \ + sub sp, sp, #4; /* Align the stack */ \ + str lr, [sp, #-4]!; /* Push the return address */ \ + sub sp, sp, #(4*17); /* Adjust the stack pointer */ \ + stmia sp, {r0-r12}; /* Push the user mode registers */ \ + add r0, sp, #(4*13); /* Adjust the stack pointer */ \ + stmia r0, {r13-r14}^; /* Push the user mode registers */ \ + mov r0, r0; /* NOP for previous instruction */ \ + mrs r0, spsr; /* Put the SPSR on the stack */ \ + str r0, [sp, #-4]!; +#endif /* - * swi_entry + * PULLFRAME - macro to pull a trap frame from the stack in the current mode + * Since the current mode is used, the SVC lr field is ignored. + */ + +#ifdef ARM_TP_ADDRESS +#define PULLFRAME \ + ldr r0, [sp], #4; /* Get the SPSR from stack */ \ + msr spsr_fsxc, r0; \ + 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], #4; /* Pull the return address */ \ + add sp, sp, #4 /* Align the stack */ +#else +#define PULLFRAME \ + ldr r0, [sp], #4 ; /* Get the SPSR from stack */ \ + msr spsr_fsxc, 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], #4; /* Pull the return address */ \ + add sp, sp, #4 /* Align the stack */ +#endif + +/* + * PUSHFRAMEINSVC - macro to push a trap frame on the stack in SVC32 mode + * This should only be used if the processor is not currently in SVC32 + * mode. The processor mode is switched to SVC mode and the trap frame is + * stored. The SVC lr field is used to store the previous value of + * lr in SVC mode. * - * Handler for the Software Interrupt exception. + * NOTE: r13 and r14 are stored separately as a work around for the + * SA110 rev 2 STM^ bug */ -ASENTRY_NP(swi_entry) - STOP_UNWINDING /* Don't unwind past here */ +#ifdef ARM_TP_ADDRESS +#define PUSHFRAMEINSVC \ + stmdb sp, {r0-r3}; /* Save 4 registers */ \ + mov r0, lr; /* Save xxx32 r14 */ \ + mov r1, sp; /* Save xxx32 sp */ \ + mrs r3, spsr; /* Save xxx32 spsr */ \ + mrs r2, cpsr; /* Get the CPSR */ \ + bic r2, r2, #(PSR_MODE); /* Fix for SVC mode */ \ + orr r2, r2, #(PSR_SVC32_MODE); \ + msr cpsr_c, r2; /* Punch into SVC mode */ \ + mov r2, sp; /* Save SVC sp */ \ + bic sp, sp, #7; /* Align sp to an 8-byte addrress */ \ + sub sp, sp, #4; /* Pad trapframe to keep alignment */ \ + str r0, [sp, #-4]!; /* Push return address */ \ + str lr, [sp, #-4]!; /* Push SVC lr */ \ + str r2, [sp, #-4]!; /* Push SVC sp */ \ + msr spsr_fsxc, r3; /* Restore correct spsr */ \ + ldmdb r1, {r0-r3}; /* Restore 4 regs from xxx mode */ \ + sub sp, sp, #(4*15); /* Adjust the stack pointer */ \ + stmia sp, {r0-r12}; /* Push the user mode registers */ \ + add r0, sp, #(4*13); /* Adjust the stack pointer */ \ + stmia r0, {r13-r14}^; /* Push the user mode registers */ \ + mov r0, r0; /* NOP for previous instruction */ \ + ldr r5, =ARM_RAS_START; /* Check if there's any RAS */ \ + ldr r4, [r5, #4]; /* reset it to point at the */ \ + cmp r4, #0xffffffff; /* end of memory if necessary; */ \ + movne r1, #0xffffffff; /* leave value in r4 for later */ \ + strne r1, [r5, #4]; /* comparision against PC. */ \ + ldr r3, [r5]; /* Retrieve global RAS_START */ \ + cmp r3, #0; /* and reset it if non-zero. */ \ + movne r1, #0; /* If non-zero RAS_START and */ \ + strne r1, [r5]; /* PC was lower than RAS_END, */ \ + ldrne r1, [r0, #16]; /* adjust the saved PC so that */ \ + cmpne r4, r1; /* execution later resumes at */ \ + strhi r3, [r0, #16]; /* the RAS_START location. */ \ + mrs r0, spsr; \ + str r0, [sp, #-4]! +#else +#define PUSHFRAMEINSVC \ + stmdb sp, {r0-r3}; /* Save 4 registers */ \ + mov r0, lr; /* Save xxx32 r14 */ \ + mov r1, sp; /* Save xxx32 sp */ \ + mrs r3, spsr; /* Save xxx32 spsr */ \ + mrs r2, cpsr; /* Get the CPSR */ \ + bic r2, r2, #(PSR_MODE); /* Fix for SVC mode */ \ + orr r2, r2, #(PSR_SVC32_MODE); \ + msr cpsr_c, r2; /* Punch into SVC mode */ \ + mov r2, sp; /* Save SVC sp */ \ + bic sp, sp, #7; /* Align sp to an 8-byte addrress */ \ + sub sp, sp, #4; /* Pad trapframe to keep alignment */ \ + str r0, [sp, #-4]!; /* Push return address */ \ + str lr, [sp, #-4]!; /* Push SVC lr */ \ + str r2, [sp, #-4]!; /* Push SVC sp */ \ + msr spsr_fsxc, r3; /* Restore correct spsr */ \ + ldmdb r1, {r0-r3}; /* Restore 4 regs from xxx mode */ \ + sub sp, sp, #(4*15); /* Adjust the stack pointer */ \ + stmia sp, {r0-r12}; /* Push the user mode registers */ \ + add r0, sp, #(4*13); /* Adjust the stack pointer */ \ + stmia r0, {r13-r14}^; /* Push the user mode registers */ \ + mov r0, r0; /* NOP for previous instruction */ \ + mrs r0, spsr; /* Put the SPSR on the stack */ \ + str r0, [sp, #-4]! +#endif - PUSHFRAME +/* + * PULLFRAMEFROMSVCANDEXIT - macro to pull a trap frame from the stack + * in SVC32 mode and restore the saved processor mode and PC. + * This should be used when the SVC lr register needs to be restored on + * exit. + */ - mov r0, sp /* Pass the frame to any function */ - bl _C_LABEL(swi_handler) /* It's a SWI ! */ +#ifdef ARM_TP_ADDRESS +#define PULLFRAMEFROMSVCANDEXIT \ + ldr r0, [sp], #4; /* Get the SPSR from stack */ \ + msr spsr_fsxc, 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], #4; /* Get the SPSR from stack */ \ + msr spsr_fsxc, 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 - DO_AST - PULLFRAME - movs pc, lr /* Exit */ +#if defined(__ARM_EABI__) +/* + * Unwind hints so we can unwind past functions that use + * PULLFRAMEFROMSVCANDEXIT. They are run in reverse order. + * As the last thing we do is restore the stack pointer + * we can ignore the padding at the end of struct trapframe. + */ +#define UNWINDSVCFRAME \ + .save {r13-r15}; /* Restore sp, lr, pc */ \ + .pad #(2*4); /* Skip user sp and lr */ \ + .save {r0-r12}; /* Restore r0-r12 */ \ + .pad #(4) /* Skip spsr */ +#else +#define UNWINDSVCFRAME +#endif + +#define DO_AST \ + ldr r0, [sp] /* Get the SPSR from stack */ ;\ + mrs r4, cpsr /* save CPSR */ ;\ + orr r1, r4, #(I32_bit|F32_bit) ;\ + msr cpsr_c, r1 /* Disable interrupts */ ;\ + and r0, r0, #(PSR_MODE) /* Returning to USR mode? */ ;\ + teq r0, #(PSR_USR32_MODE) ;\ + bne 2f /* Nope, get out now */ ;\ + bic r4, r4, #(I32_bit|F32_bit) ;\ +1: GET_CURTHREAD_PTR(r5) ;\ + ldr r1, [r5, #(TD_FLAGS)] ;\ + and r1, r1, #(TDF_ASTPENDING|TDF_NEEDRESCHED) ;\ + teq r1, #0x00000000 ;\ + beq 2f /* Nope. Just bail */ ;\ + msr cpsr_c, r4 /* Restore interrupts */ ;\ + mov r0, sp ;\ + bl _C_LABEL(ast) /* ast(frame) */ ;\ + orr r0, r4, #(I32_bit|F32_bit) ;\ + msr cpsr_c, r0 ;\ + b 1b ;\ +2: + + +/* + * Entry point for a Software Interrupt (SWI). + * + * The hardware switches to svc32 mode on a swi, so we're already on the + * right stack; just build a trapframe and call the handler. + */ +ASENTRY_NP(swi_entry) + PUSHFRAME /* Build the trapframe on the */ + mov r0, sp /* scv32 stack, pass it to the */ + bl _C_LABEL(swi_handler) /* swi handler. */ + /* + * The fork_trampoline() code in swtch.S aranges for the MI fork_exit() + * to return to swi_exit here, to return to userland. The net effect is + * that a newly created thread appears to return from a SWI just like + * the parent thread that created it. + */ +ASENTRY_NP(swi_exit) + DO_AST /* Handle pending signals. */ + PULLFRAME /* Deallocate trapframe. */ + movs pc, lr /* Return to userland. */ + STOP_UNWINDING /* Don't unwind into user mode. */ +END(swi_exit) END(swi_entry) /* - * prefetch_abort_entry: + * Standard exception exit handler. * - * Handler for the Prefetch Abort exception. + * This is used to return from all exceptions except SWI. It uses DO_AST and + * PULLFRAMEFROMSVCANDEXIT and can only be called if the exception entry code + * used PUSHFRAMEINSVC. + * + * If the return is to user mode, this uses DO_AST to deliver any pending + * signals and/or handle TDF_NEEDRESCHED first. + */ +ASENTRY_NP(exception_exit) + DO_AST /* Handle pending signals. */ + PULLFRAMEFROMSVCANDEXIT /* Return. */ + UNWINDSVCFRAME /* Special unwinding for exceptions. */ +END(exception_exit) + +/* + * Entry point for a Prefetch Abort exception. + * + * The hardware switches to the abort mode stack; we switch to svc32 before + * calling the handler, then return directly to the original mode/stack + * on exit (without transitioning back through the abort mode stack). */ ASENTRY_NP(prefetch_abort_entry) #ifdef __XSCALE__ nop /* Make absolutely sure any pending */ nop /* imprecise aborts have occurred. */ #endif - sub lr, lr, #0x00000004 /* Adjust the lr */ - - PUSHFRAMEINSVC - ldr r1, Lprefetch_abort_handler_address - adr lr, exception_exit - mov r0, sp /* pass the stack pointer as r0 */ - ldr pc, [r1] - -Lprefetch_abort_handler_address: - .word _C_LABEL(prefetch_abort_handler_address) - - .data - .global _C_LABEL(prefetch_abort_handler_address) - -_C_LABEL(prefetch_abort_handler_address): - .word abortprefetch - - .text -abortprefetch: - adr r0, abortprefetchmsg - b _C_LABEL(panic) - -abortprefetchmsg: - .asciz "abortprefetch" - .align 0 + sub lr, lr, #4 /* Adjust the lr. Transition to scv32 */ + PUSHFRAMEINSVC /* mode stack, build trapframe there. */ + adr lr, exception_exit /* Return from handler via standard */ + mov r0, sp /* exception exit routine. Pass the */ + b prefetch_abort_handler /* trapframe to the handler. */ END(prefetch_abort_entry) /* - * data_abort_entry: + * Entry point for a Data Abort exception. * - * Handler for the Data Abort exception. + * The hardware switches to the abort mode stack; we switch to svc32 before + * calling the handler, then return directly to the original mode/stack + * on exit (without transitioning back through the abort mode stack). */ ASENTRY_NP(data_abort_entry) #ifdef __XSCALE__ nop /* Make absolutely sure any pending */ nop /* imprecise aborts have occurred. */ #endif - - sub lr, lr, #0x00000008 /* Adjust the lr */ - PUSHFRAMEINSVC /* Push trap frame and switch */ - /* to SVC32 mode */ - ldr r1, Ldata_abort_handler_address - adr lr, exception_exit - mov r0, sp /* pass the stack pointer as r0 */ - ldr pc, [r1] -Ldata_abort_handler_address: - .word _C_LABEL(data_abort_handler_address) - - .data - .global _C_LABEL(data_abort_handler_address) -_C_LABEL(data_abort_handler_address): - .word abortdata - - .text -abortdata: - adr r0, abortdatamsg - b _C_LABEL(panic) - -abortdatamsg: - .asciz "abortdata" - .align 0 + sub lr, lr, #8 /* Adjust the lr. Transition to scv32 */ + PUSHFRAMEINSVC /* mode stack, build trapframe there. */ + adr lr, exception_exit /* Return from handler via standard */ + mov r0, sp /* exception exit routine. Pass the */ + b data_abort_handler /* trapframe to the handler. */ END(data_abort_entry) /* - * address_exception_entry: + * Entry point for an Undefined Instruction exception. * - * Handler for the Address Exception exception. + * The hardware switches to the undefined mode stack; we switch to svc32 before + * calling the handler, then return directly to the original mode/stack + * on exit (without transitioning back through the undefined mode stack). + */ +ASENTRY_NP(undefined_entry) + sub lr, lr, #4 /* Adjust the lr. Transition to scv32 */ + PUSHFRAMEINSVC /* mode stack, build trapframe there. */ + adr lr, exception_exit /* Return from handler via standard */ + mov r0, sp /* exception exit routine. Pass the */ + b undefinedinstruction /* trapframe to the handler. */ +END(undefined_entry) + +/* + * Entry point for a normal IRQ. * - * NOTE: This exception isn't really used on arm32. We - * print a warning message to the console and then treat - * it like a Data Abort. + * The hardware switches to the IRQ mode stack; we switch to svc32 before + * calling the handler, then return directly to the original mode/stack + * on exit (without transitioning back through the IRQ mode stack). */ -ASENTRY_NP(address_exception_entry) - mrs r1, cpsr - mrs r2, spsr +ASENTRY_NP(irq_entry) + sub lr, lr, #4 /* Adjust the lr. Transition to scv32 */ + PUSHFRAMEINSVC /* mode stack, build trapframe there. */ + adr lr, exception_exit /* Return from handler via standard */ + mov r0, sp /* exception exit routine. Pass the */ + b _C_LABEL(arm_irq_handler)/* trapframe to the handler. */ +END(irq_entry) + +/* + * Entry point for an FIQ interrupt. + * + * We don't currently support FIQ handlers very much. Something can + * install itself in the FIQ vector using code (that may or may not work + * these days) in fiq.c. If nobody does that and an FIQ happens, this + * default handler just disables FIQs and otherwise ignores it. + */ +ASENTRY_NP(fiq_entry) + mrs r8, cpsr /* FIQ handling isn't supported, */ + bic r8, #(F32_bit) /* just disable FIQ and return. */ + msr cpsr_c, r8 /* The r8 we trash here is the */ + subs pc, lr, #4 /* banked FIQ-mode r8. */ +END(fiq_entry) + +/* + * Entry point for an Address Exception exception. + * This is an arm26 exception that should never happen. + */ +ASENTRY_NP(addr_exception_entry) mov r3, lr - adr r0, Laddress_exception_msg - bl _C_LABEL(printf) /* XXX CLOBBERS LR!! */ - b data_abort_entry -Laddress_exception_msg: + mrs r2, spsr + mrs r1, cpsr + adr r0, Laddr_exception_msg + b _C_LABEL(panic) +Laddr_exception_msg: .asciz "Address Exception CPSR=0x%08x SPSR=0x%08x LR=0x%08x\n" .balign 4 -END(address_exception_entry) +END(addr_exception_entry) /* - * General exception exit handler - * (Placed here to be within range of all the references to it) - * - * It exits straight away if not returning to USR mode. - * This loops around delivering any pending ASTs. - * Interrupts are disabled at suitable points to avoid ASTs - * being posted between testing and exit to user mode. - * - * This function uses PULLFRAMEFROMSVCANDEXIT and DO_AST and can - * only be called if the exception handler used PUSHFRAMEINSVC. - * - * For EABI, don't try to unwind any further than this. This is a - * stopgap measure to avoid getting stuck in a loop in the unwinder, - * which happens because we don't yet provide the proper unwind info - * here that describes which registers are being restored. + * Entry point for the system Reset vector. + * This should never happen, so panic. */ - -ASENTRY_NP(exception_exit) - UNWINDSVCFRAME - DO_AST - PULLFRAMEFROMSVCANDEXIT -END(exception_exit) +ASENTRY_NP(reset_entry) + mov r1, lr + adr r0, Lreset_panicmsg + b _C_LABEL(panic) + /* NOTREACHED */ +Lreset_panicmsg: + .asciz "Reset vector called, LR = 0x%08x" + .balign 4 +END(reset_entry) /* - * undefined_entry: - * - * Handler for the Undefined Instruction exception. - * - * We indirect the undefined vector via the handler address - * in the data area. Entry to the undefined handler must - * look like direct entry from the vector. + * page0 and page0_data -- An image of the ARM vectors which is copied to + * the ARM vectors page (high or low) as part of CPU initialization. The + * code that does the copy assumes that page0_data holds one 32-bit word + * of data for each of the predefined ARM vectors. It also assumes that + * page0_data follows the vectors in page0, but other stuff can appear + * between the two. We currently leave room between the two for some fiq + * handler code to be copied in. */ -ASENTRY_NP(undefined_entry) + .global _C_LABEL(page0), _C_LABEL(page0_data) - sub lr, lr, #0x00000004 /* Adjust the lr */ - PUSHFRAMEINSVC /* Push trap frame and switch */ - /* to SVC32 mode */ - ldr r1, Lundefined_handler_address - adr lr, exception_exit - mov r0, sp /* pass the stack pointer as r0 */ - ldr pc, [r1] -END(undefined_entry) +_C_LABEL(page0): + ldr pc, .Lreset_entry + ldr pc, .Lundefined_entry + ldr pc, .Lswi_entry + ldr pc, .Lprefetch_abort_entry + ldr pc, .Ldata_abort_entry + ldr pc, .Laddr_exception_entry + ldr pc, .Lirq_entry +.fiqv: ldr pc, .Lfiq_entry + .space 256 /* room for some fiq handler code */ + +_C_LABEL(page0_data): +.Lreset_entry: .word reset_entry +.Lundefined_entry: .word undefined_entry +.Lswi_entry: .word swi_entry +.Lprefetch_abort_entry: .word prefetch_abort_entry +.Ldata_abort_entry: .word data_abort_entry +.Laddr_exception_entry: .word addr_exception_entry +.Lirq_entry: .word irq_entry +.Lfiq_entry: .word fiq_entry -ASENTRY_NP(undefinedinstruction_bounce) - b undefinedinstruction -END(undefinedinstruction_bounce) +/* + * These items are used by the code in fiq.c to install what it calls the + * "null" handler. It's actually our default vector entry that just jumps + * to the default handler which just disables FIQs and returns. + */ + .global _C_LABEL(fiq_nullhandler_code), _C_LABEL(fiq_nullhandler_size) -Lundefined_handler_address: - .word _C_LABEL(undefined_handler_address) +_C_LABEL(fiq_nullhandler_code): + .word .fiqv +_C_LABEL(fiq_nullhandler_size): + .word 4 - .data - .global _C_LABEL(undefined_handler_address) -_C_LABEL(undefined_handler_address): - .word undefinedinstruction_bounce diff --git a/sys/arm/arm/fiq.c b/sys/arm/arm/fiq.c index f990812..d9dbb5e 100644 --- a/sys/arm/arm/fiq.c +++ b/sys/arm/arm/fiq.c @@ -51,8 +51,8 @@ __FBSDID("$FreeBSD$"); TAILQ_HEAD(, fiqhandler) fiqhandler_stack = TAILQ_HEAD_INITIALIZER(fiqhandler_stack); -extern char fiqvector[]; -extern char fiq_nullhandler[], fiq_nullhandler_end[]; +extern char *fiq_nullhandler_code; +extern uint32_t fiq_nullhandler_size; #define IRQ_BIT I32_bit #define FIQ_BIT F32_bit @@ -61,6 +61,9 @@ extern char fiq_nullhandler[], fiq_nullhandler_end[]; * fiq_installhandler: * * Actually install the FIQ handler down at the FIQ vector. + * + * The FIQ vector is fixed by the hardware definition as the + * seventh 32-bit word in the vector page. * * Note: If the FIQ is invoked via an extra layer of * indirection, the actual FIQ code store lives in the @@ -70,11 +73,13 @@ extern char fiq_nullhandler[], fiq_nullhandler_end[]; static void fiq_installhandler(void *func, size_t size) { + const uint32_t fiqvector = 7 * sizeof(uint32_t); + #if !defined(__ARM_FIQ_INDIRECT) vector_page_setprot(VM_PROT_READ|VM_PROT_WRITE); #endif - memcpy(vector_page + fiqvector, func, size); + memcpy((void *)(vector_page + fiqvector), func, size); #if !defined(__ARM_FIQ_INDIRECT) vector_page_setprot(VM_PROT_READ); @@ -159,8 +164,7 @@ fiq_release(struct fiqhandler *fh) if (TAILQ_FIRST(&fiqhandler_stack) == NULL) { /* Copy the NULL handler back down into the vector. */ - fiq_installhandler(fiq_nullhandler, - (size_t)(fiq_nullhandler_end - fiq_nullhandler)); + fiq_installhandler(fiq_nullhandler_code, fiq_nullhandler_size); /* Make sure FIQs are disabled when we return. */ oldirqstate |= FIQ_BIT; diff --git a/sys/arm/arm/fiq_subr.S b/sys/arm/arm/fiq_subr.S index a9df9bf..acb3768 100644 --- a/sys/arm/arm/fiq_subr.S +++ b/sys/arm/arm/fiq_subr.S @@ -91,13 +91,3 @@ ENTRY(fiq_setregs) RET END(fiq_setregs) -/* - * fiq_nullhandler: - * - * Null handler copied down to the FIQ vector when the last - * FIQ handler is removed. - */ - .global _C_LABEL(fiq_nullhandler), _C_LABEL(fiq_nullhandler_end) -_C_LABEL(fiq_nullhandler): - subs pc, lr, #4 -_C_LABEL(fiq_nullhandler_end): diff --git a/sys/arm/arm/fusu.S b/sys/arm/arm/fusu.S index 60b3727..316962d 100644 --- a/sys/arm/arm/fusu.S +++ b/sys/arm/arm/fusu.S @@ -34,7 +34,6 @@ */ #include <machine/asm.h> -#include <machine/asmacros.h> #include <machine/armreg.h> #include "assym.s" __FBSDID("$FreeBSD$"); diff --git a/sys/arm/arm/identcpu.c b/sys/arm/arm/identcpu.c index f7ecff9..9a0c46f 100644 --- a/sys/arm/arm/identcpu.c +++ b/sys/arm/arm/identcpu.c @@ -69,36 +69,6 @@ static const char * const generic_steppings[16] = { "rev 12", "rev 13", "rev 14", "rev 15", }; -static const char * const sa110_steppings[16] = { - "rev 0", "step J", "step K", "step S", - "step T", "rev 5", "rev 6", "rev 7", - "rev 8", "rev 9", "rev 10", "rev 11", - "rev 12", "rev 13", "rev 14", "rev 15", -}; - -static const char * const sa1100_steppings[16] = { - "rev 0", "step B", "step C", "rev 3", - "rev 4", "rev 5", "rev 6", "rev 7", - "step D", "step E", "rev 10" "step G", - "rev 12", "rev 13", "rev 14", "rev 15", -}; - -static const char * const sa1110_steppings[16] = { - "step A-0", "rev 1", "rev 2", "rev 3", - "step B-0", "step B-1", "step B-2", "step B-3", - "step B-4", "step B-5", "rev 10", "rev 11", - "rev 12", "rev 13", "rev 14", "rev 15", -}; - -static const char * const ixp12x0_steppings[16] = { - "(IXP1200 step A)", "(IXP1200 step B)", - "rev 2", "(IXP1200 step C)", - "(IXP1200 step D)", "(IXP1240/1250 step A)", - "(IXP1240 step B)", "(IXP1250 step B)", - "rev 8", "rev 9", "rev 10", "rev 11", - "rev 12", "rev 13", "rev 14", "rev 15", -}; - static const char * const xscale_steppings[16] = { "step A-0", "step A-1", "step B-0", "step C-0", "step D-0", "rev 5", "rev 6", "rev 7", @@ -168,43 +138,6 @@ struct cpuidtab { }; const struct cpuidtab cpuids[] = { - { CPU_ID_ARM2, CPU_CLASS_ARM2, "ARM2", - generic_steppings }, - { CPU_ID_ARM250, CPU_CLASS_ARM2AS, "ARM250", - generic_steppings }, - - { CPU_ID_ARM3, CPU_CLASS_ARM3, "ARM3", - generic_steppings }, - - { CPU_ID_ARM600, CPU_CLASS_ARM6, "ARM600", - generic_steppings }, - { CPU_ID_ARM610, CPU_CLASS_ARM6, "ARM610", - generic_steppings }, - { CPU_ID_ARM620, CPU_CLASS_ARM6, "ARM620", - generic_steppings }, - - { CPU_ID_ARM700, CPU_CLASS_ARM7, "ARM700", - generic_steppings }, - { CPU_ID_ARM710, CPU_CLASS_ARM7, "ARM710", - generic_steppings }, - { CPU_ID_ARM7500, CPU_CLASS_ARM7, "ARM7500", - generic_steppings }, - { CPU_ID_ARM710A, CPU_CLASS_ARM7, "ARM710a", - generic_steppings }, - { CPU_ID_ARM7500FE, CPU_CLASS_ARM7, "ARM7500FE", - generic_steppings }, - { CPU_ID_ARM710T, CPU_CLASS_ARM7TDMI, "ARM710T", - generic_steppings }, - { CPU_ID_ARM720T, CPU_CLASS_ARM7TDMI, "ARM720T", - generic_steppings }, - { CPU_ID_ARM740T8K, CPU_CLASS_ARM7TDMI, "ARM740T (8 KB cache)", - generic_steppings }, - { CPU_ID_ARM740T4K, CPU_CLASS_ARM7TDMI, "ARM740T (4 KB cache)", - generic_steppings }, - - { CPU_ID_ARM810, CPU_CLASS_ARM8, "ARM810", - generic_steppings }, - { CPU_ID_ARM920T, CPU_CLASS_ARM9TDMI, "ARM920T", generic_steppings }, { CPU_ID_ARM920T_ALT, CPU_CLASS_ARM9TDMI, "ARM920T", @@ -255,16 +188,6 @@ const struct cpuidtab cpuids[] = { { CPU_ID_KRAIT, CPU_CLASS_KRAIT, "Krait", generic_steppings }, - { CPU_ID_SA110, CPU_CLASS_SA1, "SA-110", - sa110_steppings }, - { CPU_ID_SA1100, CPU_CLASS_SA1, "SA-1100", - sa1100_steppings }, - { CPU_ID_SA1110, CPU_CLASS_SA1, "SA-1110", - sa1110_steppings }, - - { CPU_ID_IXP1200, CPU_CLASS_SA1, "IXP1200", - ixp12x0_steppings }, - { CPU_ID_80200, CPU_CLASS_XSCALE, "i80200", xscale_steppings }, @@ -340,13 +263,6 @@ struct cpu_classtab { const struct cpu_classtab cpu_classes[] = { { "unknown", NULL }, /* CPU_CLASS_NONE */ - { "ARM2", "CPU_ARM2" }, /* CPU_CLASS_ARM2 */ - { "ARM2as", "CPU_ARM250" }, /* CPU_CLASS_ARM2AS */ - { "ARM3", "CPU_ARM3" }, /* CPU_CLASS_ARM3 */ - { "ARM6", "CPU_ARM6" }, /* CPU_CLASS_ARM6 */ - { "ARM7", "CPU_ARM7" }, /* CPU_CLASS_ARM7 */ - { "ARM7TDMI", "CPU_ARM7TDMI" }, /* CPU_CLASS_ARM7TDMI */ - { "ARM8", "CPU_ARM8" }, /* CPU_CLASS_ARM8 */ { "ARM9TDMI", "CPU_ARM9TDMI" }, /* CPU_CLASS_ARM9TDMI */ { "ARM9E-S", "CPU_ARM9E" }, /* CPU_CLASS_ARM9ES */ { "ARM9EJ-S", "CPU_ARM9E" }, /* CPU_CLASS_ARM9EJS */ @@ -354,7 +270,6 @@ const struct cpu_classtab cpu_classes[] = { { "ARM10EJ", "CPU_ARM10" }, /* CPU_CLASS_ARM10EJ */ { "Cortex-A", "CPU_CORTEXA" }, /* CPU_CLASS_CORTEXA */ { "Krait", "CPU_KRAIT" }, /* CPU_CLASS_KRAIT */ - { "SA-1", "CPU_SA110" }, /* CPU_CLASS_SA1 */ { "XScale", "CPU_XSCALE_..." }, /* CPU_CLASS_XSCALE */ { "ARM11J", "CPU_ARM11" }, /* CPU_CLASS_ARM11J */ { "Marvell", "CPU_MARVELL" }, /* CPU_CLASS_MARVELL */ @@ -493,18 +408,11 @@ identify_arm_cpu(void) printf(" Little-endian"); switch (cpu_class) { - case CPU_CLASS_ARM6: - case CPU_CLASS_ARM7: - case CPU_CLASS_ARM7TDMI: - case CPU_CLASS_ARM8: - print_enadis(ctrl & CPU_CONTROL_IDC_ENABLE, "IDC"); - break; case CPU_CLASS_ARM9TDMI: case CPU_CLASS_ARM9ES: case CPU_CLASS_ARM9EJS: case CPU_CLASS_ARM10E: case CPU_CLASS_ARM10EJ: - case CPU_CLASS_SA1: case CPU_CLASS_XSCALE: case CPU_CLASS_ARM11J: case CPU_CLASS_MARVELL: diff --git a/sys/arm/arm/intr.c b/sys/arm/arm/intr.c index 9c3365d..ac93cbd 100644 --- a/sys/arm/arm/intr.c +++ b/sys/arm/arm/intr.c @@ -56,12 +56,18 @@ typedef void (*mask_fn)(void *); static struct intr_event *intr_events[NIRQ]; -void arm_handler_execute(struct trapframe *, int); +void arm_irq_handler(struct trapframe *); void (*arm_post_filter)(void *) = NULL; int (*arm_config_irq)(int irq, enum intr_trigger trig, enum intr_polarity pol) = NULL; +/* Data for statistics reporting. */ +u_long intrcnt[NIRQ]; +char intrnames[NIRQ * INTRNAME_LEN]; +size_t sintrcnt = sizeof(intrcnt); +size_t sintrnames = sizeof(intrnames); + /* * Pre-format intrnames into an array of fixed-size strings containing spaces. * This allows us to avoid the need for an intermediate table of indices into @@ -127,7 +133,7 @@ dosoftints(void) } void -arm_handler_execute(struct trapframe *frame, int irqnb) +arm_irq_handler(struct trapframe *frame) { struct intr_event *event; int i; diff --git a/sys/arm/arm/irq_dispatch.S b/sys/arm/arm/irq_dispatch.S deleted file mode 100644 index 258782f..0000000 --- a/sys/arm/arm/irq_dispatch.S +++ /dev/null @@ -1,120 +0,0 @@ -/* $NetBSD: irq_dispatch.S,v 1.5 2003/10/30 08:57:24 scw Exp $ */ - -/*- - * Copyright (c) 2002 Fujitsu Component Limited - * Copyright (c) 2002 Genetec Corporation - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of The Fujitsu Component Limited nor the name of - * Genetec corporation may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC - * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC - * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -/*- - * Copyright (c) 2002, 2003 Wasabi Systems, Inc. - * All rights reserved. - * - * Written by Jason R. Thorpe for Wasabi Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the NetBSD Project by - * Wasabi Systems, Inc. - * 4. The name of Wasabi Systems, Inc. may not be used to endorse - * or promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "assym.s" -#include <machine/asm.h> -#include <machine/asmacros.h> -#include <machine/armreg.h> -__FBSDID("$FreeBSD$"); - -/* - * irq_entry: - * Main entry point for the IRQ vector. This is a generic version - * which can be used by different platforms. - */ - .text - .align 0 - -.Lcurrent_intr_depth: - .word _C_LABEL(current_intr_depth) -AST_LOCALS - -ASENTRY_NP(irq_entry) - sub lr, lr, #0x00000004 /* Adjust the lr */ - PUSHFRAMEINSVC /* Push an interrupt frame */ - UNWINDSVCFRAME - mov r0, sp /* arg for dispatcher */ - - mov r1, #0 - bl _C_LABEL(arm_handler_execute) - - DO_AST - PULLFRAMEFROMSVCANDEXIT - movs pc, lr /* Exit */ -END(irq_entry) - - .data - .align 0 - - .global _C_LABEL(intrnames), _C_LABEL(sintrnames) - .global _C_LABEL(intrcnt), _C_LABEL(sintrcnt) -_C_LABEL(intrnames): - .space NIRQ * (MAXCOMLEN + 1) -_C_LABEL(intrcnt): - .space NIRQ * 4 -_C_LABEL(sintrnames): - .int NIRQ * (MAXCOMLEN + 1) -_C_LABEL(sintrcnt): - .int NIRQ * 4 - - .global _C_LABEL(current_intr_depth) -_C_LABEL(current_intr_depth): - .word 0 - diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index 9fb2ffc..b9e46b8 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -143,10 +143,6 @@ extern vm_offset_t ksym_start, ksym_end; static struct pv_addr kernel_pt_table[KERNEL_PT_MAX]; -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - vm_paddr_t pmap_pa; struct pv_addr systempage; @@ -1279,10 +1275,6 @@ initarm(struct arm_boot_params *abp) */ cpu_idcache_wbinv_all(); - /* Set stack for exception handlers */ - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/arm/pmap.c b/sys/arm/arm/pmap.c index 9bd53fa..d19306d 100644 --- a/sys/arm/arm/pmap.c +++ b/sys/arm/arm/pmap.c @@ -458,7 +458,7 @@ kernel_pt_lookup(vm_paddr_t pa) return (0); } -#if (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 +#if ARM_MMU_GENERIC != 0 void pmap_pte_init_generic(void) { @@ -500,23 +500,6 @@ pmap_pte_init_generic(void) pmap_zero_page_func = pmap_zero_page_generic; } -#if defined(CPU_ARM8) -void -pmap_pte_init_arm8(void) -{ - - /* - * ARM8 is compatible with generic, but we need to use - * the page tables uncached. - */ - pmap_pte_init_generic(); - - pte_l1_s_cache_mode_pt = 0; - pte_l2_l_cache_mode_pt = 0; - pte_l2_s_cache_mode_pt = 0; -} -#endif /* CPU_ARM8 */ - #if defined(CPU_ARM9) && defined(ARM9_CACHE_WRITE_THROUGH) void pmap_pte_init_arm9(void) @@ -537,7 +520,7 @@ pmap_pte_init_arm9(void) pte_l2_s_cache_mode_pt = L2_C; } #endif /* CPU_ARM9 */ -#endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */ +#endif /* ARM_MMU_GENERIC != 0 */ #if defined(CPU_ARM10) void @@ -561,27 +544,6 @@ pmap_pte_init_arm10(void) } #endif /* CPU_ARM10 */ -#if ARM_MMU_SA1 == 1 -void -pmap_pte_init_sa1(void) -{ - - /* - * The StrongARM SA-1 cache does not have a write-through - * mode. So, do the generic initialization, then reset - * the page table cache mode to B=1,C=1, and note that - * the PTEs need to be sync'd. - */ - pmap_pte_init_generic(); - - pte_l1_s_cache_mode_pt = L1_S_B|L1_S_C; - pte_l2_l_cache_mode_pt = L2_B|L2_C; - pte_l2_s_cache_mode_pt = L2_B|L2_C; - - pmap_needs_pte_sync = 1; -} -#endif /* ARM_MMU_SA1 == 1*/ - #if ARM_MMU_XSCALE == 1 #if (ARM_NMMUS > 1) || defined (CPU_XSCALE_CORE3) static u_int xscale_use_minidata; @@ -1972,34 +1934,6 @@ pmap_fault_fixup(pmap_t pm, vm_offset_t va, vm_prot_t ftype, int user) rv = 1; } -#ifdef CPU_SA110 - /* - * There are bugs in the rev K SA110. This is a check for one - * of them. - */ - if (rv == 0 && curcpu()->ci_arm_cputype == CPU_ID_SA110 && - curcpu()->ci_arm_cpurev < 3) { - /* Always current pmap */ - if (l2pte_valid(pte)) { - extern int kernel_debug; - if (kernel_debug & 1) { - struct proc *p = curlwp->l_proc; - printf("prefetch_abort: page is already " - "mapped - pte=%p *pte=%08x\n", ptep, pte); - printf("prefetch_abort: pc=%08lx proc=%p " - "process=%s\n", va, p, p->p_comm); - printf("prefetch_abort: far=%08x fs=%x\n", - cpu_faultaddress(), cpu_faultstatus()); - } -#ifdef DDB - if (kernel_debug & 2) - Debugger(); -#endif - rv = 1; - } - } -#endif /* CPU_SA110 */ - #ifdef DEBUG /* * If 'rv == 0' at this point, it generally indicates that there is a @@ -3981,7 +3915,7 @@ pmap_remove(pmap_t pm, vm_offset_t sva, vm_offset_t eva) * StrongARM accesses to non-cached pages are non-burst making writing * _any_ bulk data very slow. */ -#if (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 || defined(CPU_XSCALE_CORE3) +#if ARM_MMU_GENERIC != 0 || defined(CPU_XSCALE_CORE3) void pmap_zero_page_generic(vm_paddr_t phys, int off, int size) { @@ -4008,7 +3942,7 @@ pmap_zero_page_generic(vm_paddr_t phys, int off, int size) mtx_unlock(&cmtx); } -#endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */ +#endif /* ARM_MMU_GENERIC != 0 */ #if ARM_MMU_XSCALE == 1 void @@ -4224,7 +4158,7 @@ pmap_clean_page(struct pv_entry *pv, boolean_t is_src) * hook points. The same comment regarding cachability as in * pmap_zero_page also applies here. */ -#if (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 || defined (CPU_XSCALE_CORE3) +#if ARM_MMU_GENERIC != 0 || defined (CPU_XSCALE_CORE3) void pmap_copy_page_generic(vm_paddr_t src, vm_paddr_t dst) { @@ -4289,7 +4223,7 @@ pmap_copy_page_offs_generic(vm_paddr_t a_phys, vm_offset_t a_offs, cpu_l2cache_inv_range(csrcp + a_offs, cnt); cpu_l2cache_wbinv_range(cdstp + b_offs, cnt); } -#endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */ +#endif /* ARM_MMU_GENERIC != 0 */ #if ARM_MMU_XSCALE == 1 void diff --git a/sys/arm/arm/support.S b/sys/arm/arm/support.S index b6d2dbb..9019e33 100644 --- a/sys/arm/arm/support.S +++ b/sys/arm/arm/support.S @@ -87,7 +87,6 @@ */ #include <machine/asm.h> -#include <machine/asmacros.h> __FBSDID("$FreeBSD$"); #include "assym.s" diff --git a/sys/arm/arm/swtch.S b/sys/arm/arm/swtch.S index d704823..610d575 100644 --- a/sys/arm/arm/swtch.S +++ b/sys/arm/arm/swtch.S @@ -486,21 +486,12 @@ ENTRY(savectx) END(savectx) ENTRY(fork_trampoline) - STOP_UNWINDING /* Can't unwind beyond the thread enty point */ - mov r1, r5 + STOP_UNWINDING /* EABI: Don't unwind beyond the thread enty point. */ + mov fp, #0 /* OABI: Stack traceback via fp stops here. */ mov r2, sp + mov r1, r5 mov r0, r4 - mov fp, #0 - bl _C_LABEL(fork_exit) - /* Kill irq"s */ - mrs r0, cpsr - orr r0, r0, #(I32_bit|F32_bit) - msr cpsr_c, r0 - DO_AST - PULLFRAME - - movs pc, lr /* Exit */ - -AST_LOCALS + ldr lr, =swi_exit /* Go finish forking, then return */ + b _C_LABEL(fork_exit) /* to userland via swi_exit code. */ END(fork_trampoline) diff --git a/sys/arm/arm/trap.c b/sys/arm/arm/trap.c index 423e3de..eb919eb 100644 --- a/sys/arm/arm/trap.c +++ b/sys/arm/arm/trap.c @@ -126,7 +126,6 @@ __FBSDID("$FreeBSD$"); void swi_handler(struct trapframe *); -void undefinedinstruction(struct trapframe *); #include <machine/disassem.h> #include <machine/machdep.h> @@ -137,11 +136,6 @@ extern char fusubailout[]; int last_fault_code; /* For the benefit of pmap_fault_fixup() */ #endif -#if defined(CPU_ARM7TDMI) -/* These CPUs may need data/prefetch abort fixups */ -#define CPU_ABORT_FIXUP_REQUIRED -#endif - struct ksig { int signb; u_long code; @@ -201,37 +195,6 @@ call_trapsignal(struct thread *td, int sig, u_long code) trapsignal(td, &ksi); } -static __inline int -data_abort_fixup(struct trapframe *tf, u_int fsr, u_int far, struct thread *td, - struct ksig *ksig) -{ -#ifdef CPU_ABORT_FIXUP_REQUIRED - int error; - - /* Call the cpu specific data abort fixup routine */ - error = cpu_dataabt_fixup(tf); - if (__predict_true(error != ABORT_FIXUP_FAILED)) - return (error); - - /* - * Oops, couldn't fix up the instruction - */ - printf("data_abort_fixup: fixup for %s mode data abort failed.\n", - TRAP_USERMODE(tf) ? "user" : "kernel"); - printf("pc = 0x%08x, opcode 0x%08x, insn = ", tf->tf_pc, - *((u_int *)tf->tf_pc)); - disassemble(tf->tf_pc); - - /* Die now if this happened in kernel mode */ - if (!TRAP_USERMODE(tf)) - dab_fatal(tf, fsr, far, td, NULL, ksig); - - return (error); -#else - return (ABORT_FIXUP_OK); -#endif /* CPU_ABORT_FIXUP_REQUIRED */ -} - void data_abort_handler(struct trapframe *tf) { @@ -341,19 +304,6 @@ data_abort_handler(struct trapframe *tf) dab_fatal(tf, fsr, far, td, &ksig); } - /* See if the cpu state needs to be fixed up */ - switch (data_abort_fixup(tf, fsr, far, td, &ksig)) { - case ABORT_FIXUP_RETURN: - return; - case ABORT_FIXUP_FAILED: - /* Deliver a SIGILL to the process */ - ksig.signb = SIGILL; - ksig.code = 0; - goto do_trapsignal; - default: - break; - } - va = trunc_page((vm_offset_t)far); /* @@ -562,9 +512,6 @@ dab_align(struct trapframe *tf, u_int fsr, u_int far, struct thread *td, /* pcb_onfault *must* be NULL at this point */ - /* See if the cpu state needs to be fixed up */ - (void) data_abort_fixup(tf, fsr, far, td, ksig); - /* Deliver a bus error signal to the process */ ksig->code = 0; ksig->signb = SIGBUS; @@ -653,9 +600,6 @@ dab_buserr(struct trapframe *tf, u_int fsr, u_int far, struct thread *td, return (0); } - /* See if the cpu state needs to be fixed up */ - (void) data_abort_fixup(tf, fsr, far, td, ksig); - /* * At this point, if the fault happened in kernel mode, we're toast */ @@ -670,37 +614,6 @@ dab_buserr(struct trapframe *tf, u_int fsr, u_int far, struct thread *td, return (1); } -static __inline int -prefetch_abort_fixup(struct trapframe *tf, struct ksig *ksig) -{ -#ifdef CPU_ABORT_FIXUP_REQUIRED - int error; - - /* Call the cpu specific prefetch abort fixup routine */ - error = cpu_prefetchabt_fixup(tf); - if (__predict_true(error != ABORT_FIXUP_FAILED)) - return (error); - - /* - * Oops, couldn't fix up the instruction - */ - printf( - "prefetch_abort_fixup: fixup for %s mode prefetch abort failed.\n", - TRAP_USERMODE(tf) ? "user" : "kernel"); - printf("pc = 0x%08x, opcode 0x%08x, insn = ", tf->tf_pc, - *((u_int *)tf->tf_pc)); - disassemble(tf->tf_pc); - - /* Die now if this happened in kernel mode */ - if (!TRAP_USERMODE(tf)) - dab_fatal(tf, 0, tf->tf_pc, NULL, ksig); - - return (error); -#else - return (ABORT_FIXUP_OK); -#endif /* CPU_ABORT_FIXUP_REQUIRED */ -} - /* * void prefetch_abort_handler(struct trapframe *tf) * @@ -749,20 +662,6 @@ prefetch_abort_handler(struct trapframe *tf) enable_interrupts(F32_bit); } - /* See if the cpu state needs to be fixed up */ - switch (prefetch_abort_fixup(tf, &ksig)) { - case ABORT_FIXUP_RETURN: - return; - case ABORT_FIXUP_FAILED: - /* Deliver a SIGILL to the process */ - ksig.signb = SIGILL; - ksig.code = 0; - td->td_frame = tf; - goto do_trapsignal; - default: - break; - } - /* Prefetch aborts cannot happen in kernel mode */ if (__predict_false(!TRAP_USERMODE(tf))) dab_fatal(tf, 0, tf->tf_pc, NULL, &ksig); diff --git a/sys/arm/arm/vectors.S b/sys/arm/arm/vectors.S deleted file mode 100644 index 95ee5d1..0000000 --- a/sys/arm/arm/vectors.S +++ /dev/null @@ -1,104 +0,0 @@ -/* $NetBSD: vectors.S,v 1.4 2002/08/17 16:36:32 thorpej Exp $ */ - -/*- - * Copyright (C) 1994-1997 Mark Brinicombe - * Copyright (C) 1994 Brini - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Brini. - * 4. The name of Brini may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL BRINI BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -/* - * These are the exception vectors copied down to page 0. - * - * Note that FIQs are special; rather than using a level of - * indirection, we actually copy the FIQ code down into the - * vector page. - */ - - .text - .align 0 - .global _C_LABEL(page0), _C_LABEL(page0_data), _C_LABEL(page0_end) - .global _C_LABEL(fiqvector) - -_C_LABEL(page0): - ldr pc, .Lreset_target - ldr pc, .Lundefined_target - ldr pc, .Lswi_target - ldr pc, .Lprefetch_abort_target - ldr pc, .Ldata_abort_target - ldr pc, .Laddress_exception_target - ldr pc, .Lirq_target -#ifdef __ARM_FIQ_INDIRECT - ldr pc, .Lfiq_target -#else -.Lfiqvector: - .set _C_LABEL(fiqvector), . - _C_LABEL(page0) - subs pc, lr, #4 - .org .Lfiqvector + 0x100 -#endif - -_C_LABEL(page0_data): -.Lreset_target: - .word reset_entry - -.Lundefined_target: - .word undefined_entry - -.Lswi_target: - .word swi_entry - -.Lprefetch_abort_target: - .word prefetch_abort_entry - -.Ldata_abort_target: - .word data_abort_entry - -.Laddress_exception_target: - .word address_exception_entry - -.Lirq_target: - .word irq_entry - -#ifdef __ARM_FIQ_INDIRECT -.Lfiq_target: - .word _C_LABEL(fiqvector) -#else - .word 0 /* pad it out */ -#endif -_C_LABEL(page0_end): - -#ifdef __ARM_FIQ_INDIRECT - .data - .align 0 -_C_LABEL(fiqvector): - subs pc, lr, #4 - .org _C_LABEL(fiqvector) + 0x100 -#endif diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c index f9a85e2..1f4bf22 100644 --- a/sys/arm/at91/at91_machdep.c +++ b/sys/arm/at91/at91_machdep.c @@ -111,10 +111,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Static device mappings. */ @@ -621,11 +617,6 @@ initarm(struct arm_boot_params *abp) */ cpu_idcache_wbinv_all(); - /* Set stack for exception handlers */ - - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/at91/files.at91 b/sys/arm/at91/files.at91 index 8c366ca..f8af397 100644 --- a/sys/arm/at91/files.at91 +++ b/sys/arm/at91/files.at91 @@ -1,6 +1,5 @@ # $FreeBSD$ arm/arm/cpufunc_asm_arm9.S standard -arm/arm/irq_dispatch.S standard arm/at91/at91_machdep.c standard arm/at91/at91_aic.c standard arm/at91/at91.c standard diff --git a/sys/arm/broadcom/bcm2835/files.bcm2835 b/sys/arm/broadcom/bcm2835/files.bcm2835 index 4563b35..1bb1cf6 100644 --- a/sys/arm/broadcom/bcm2835/files.bcm2835 +++ b/sys/arm/broadcom/bcm2835/files.bcm2835 @@ -22,7 +22,6 @@ arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_arm11x6.S standard arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_armv6.S standard -arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard diff --git a/sys/arm/conf/NOTES b/sys/arm/conf/NOTES index 50ea59e..ad608d4 100644 --- a/sys/arm/conf/NOTES +++ b/sys/arm/conf/NOTES @@ -5,8 +5,6 @@ machine arm cpu CPU_ARM9 cpu CPU_ARM9E cpu CPU_FA526 -cpu CPU_SA1100 -cpu CPU_SA1110 cpu CPU_XSCALE_80219 cpu CPU_XSCALE_80321 cpu CPU_XSCALE_81342 @@ -22,7 +20,6 @@ files "../mv/kirkwood/files.kirkwood" files "../mv/orion/files.db88f5xxx" files "../mv/orion/files.ts7800" files "../s3c2xx0/files.s3c2xx0" -files "../sa11x0/files.sa11x0" files "../xscale/i80321/files.ep80219" files "../xscale/i80321/files.i80219" files "../xscale/i80321/files.i80321" diff --git a/sys/arm/conf/SIMICS b/sys/arm/conf/SIMICS deleted file mode 100644 index 6ea8e50..0000000 --- a/sys/arm/conf/SIMICS +++ /dev/null @@ -1,73 +0,0 @@ -# SIMICS -- Custom kernel configuration file for FreeBSD/arm on Simics SA1110 -# -# For more information on this file, please read the handbook section on -# Kernel Configuration Files: -# -# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html -# -# The handbook is also available locally in /usr/share/doc/handbook -# if you've installed the doc distribution, otherwise always see the -# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the -# latest information. -# -# An exhaustive list of options and more detailed explanations of the -# device lines is also present in the ../../conf/NOTES and NOTES files. -# If you are in doubt as to the purpose or necessity of a line, check first -# in NOTES. -# -# $FreeBSD$ - -ident SIMICS - -options KERNPHYSADDR=0xc0000000 -options KERNVIRTADDR=0xc0000000 -options PHYSADDR=0xc0000000 -include "../sa11x0/std.sa11x0" -makeoptions MODULES_OVERRIDE="" - -makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols -makeoptions CONF_CFLAGS=-mcpu=strongarm -options DDB -options KDB - -options SCHED_4BSD #4BSD scheduler -options INET #InterNETworking -options INET6 #IPv6 communications protocols -options FFS #Berkeley Fast Filesystem -options SOFTUPDATES #Enable FFS soft updates support -options UFS_ACL #Support for access control lists -options UFS_DIRHASH #Improve performance on big directories -options MD_ROOT #MD is a potential root device -options ROOTDEVNAME=\"ufs:md0\" -options NFSCL #New Network Filesystem Client -options NFSD #New Network Filesystem Server -options NFSLOCKD #Network Lock Manager -options NFS_ROOT #NFS usable as /, requires NFSCL -options GEOM_PART_BSD #BSD partition scheme -options GEOM_PART_MBR #MBR partition scheme -options TMPFS #Efficient memory filesystem -#options MSDOSFS #MSDOS Filesystem -options CD9660 #ISO 9660 Filesystem -#options PROCFS #Process filesystem (requires PSEUDOFS) -options PSEUDOFS #Pseudo-filesystem framework -#options KTRACE #ktrace(1) support -options SYSVSHM #SYSV-style shared memory -options SYSVMSG #SYSV-style message queues -options SYSVSEM #SYSV-style semaphores -options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions -device loop -device ether -device saip -device assabet -#device saarm -device rl -device uart - -# Debugging for use in -current -#options DEADLKRES #Enable the deadlock resolver -#options INVARIANTS #Enable calls of extra sanity checking -#options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS -#options WITNESS #Enable checks to detect deadlocks and cycles -#options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed - -device md diff --git a/sys/arm/econa/econa_machdep.c b/sys/arm/econa/econa_machdep.c index 656e262..708109b 100644 --- a/sys/arm/econa/econa_machdep.c +++ b/sys/arm/econa/econa_machdep.c @@ -91,10 +91,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -309,10 +305,6 @@ initarm(struct arm_boot_params *abp) cpu_idcache_wbinv_all(); cpu_setup(""); - /* Set stack for exception handlers */ - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/econa/files.econa b/sys/arm/econa/files.econa index 1adb9c1..8222d68 100644 --- a/sys/arm/econa/files.econa +++ b/sys/arm/econa/files.econa @@ -6,7 +6,6 @@ arm/econa/timer.c standard arm/econa/uart_bus_ec.c optional uart arm/econa/uart_cpu_ec.c optional uart dev/uart/uart_dev_ns8250.c optional uart -arm/arm/irq_dispatch.S standard arm/arm/bus_space_generic.c standard arm/econa/ehci_ebus.c standard ehci arm/econa/ohci_ec.c standard ohci diff --git a/sys/arm/freescale/imx/files.imx51 b/sys/arm/freescale/imx/files.imx51 index 4978148..2e7128c 100644 --- a/sys/arm/freescale/imx/files.imx51 +++ b/sys/arm/freescale/imx/files.imx51 @@ -4,7 +4,6 @@ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # Init diff --git a/sys/arm/freescale/imx/files.imx53 b/sys/arm/freescale/imx/files.imx53 index 3477416..1968247 100644 --- a/sys/arm/freescale/imx/files.imx53 +++ b/sys/arm/freescale/imx/files.imx53 @@ -4,7 +4,6 @@ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # Init diff --git a/sys/arm/freescale/imx/files.imx6 b/sys/arm/freescale/imx/files.imx6 index 8b718d6..cab333f 100644 --- a/sys/arm/freescale/imx/files.imx6 +++ b/sys/arm/freescale/imx/files.imx6 @@ -8,7 +8,6 @@ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # diff --git a/sys/arm/freescale/vybrid/files.vybrid b/sys/arm/freescale/vybrid/files.vybrid index 9bcd8bc..81928c3 100644 --- a/sys/arm/freescale/vybrid/files.vybrid +++ b/sys/arm/freescale/vybrid/files.vybrid @@ -8,7 +8,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/arm/bus_space-v6.c standard arm/arm/gic.c standard diff --git a/sys/arm/include/armreg.h b/sys/arm/include/armreg.h index 7b52be1..8e02621 100644 --- a/sys/arm/include/armreg.h +++ b/sys/arm/include/armreg.h @@ -73,17 +73,7 @@ #define CPU_ID_IS7(x) (((x) & 0x0000f000) == 0x00007000) #define CPU_ID_ISNEW(x) (!CPU_ID_ISOLD(x) && !CPU_ID_IS7(x)) -/* On ARM3 and ARM6, this byte holds the foundry ID. */ -#define CPU_ID_FOUNDRY_MASK 0x00ff0000 -#define CPU_ID_FOUNDRY_VLSI 0x00560000 - -/* On ARM7 it holds the architecture and variant (sub-model) */ -#define CPU_ID_7ARCH_MASK 0x00800000 -#define CPU_ID_7ARCH_V3 0x00000000 -#define CPU_ID_7ARCH_V4T 0x00800000 -#define CPU_ID_7VARIANT_MASK 0x007f0000 - -/* On more recent ARMs, it does the same, but in a different format */ +/* On recent ARMs this byte holds the architecture and variant (sub-model) */ #define CPU_ID_ARCH_MASK 0x000f0000 #define CPU_ID_ARCH_V3 0x00000000 #define CPU_ID_ARCH_V4 0x00010000 @@ -110,29 +100,7 @@ /* Individual CPUs are probably best IDed by everything but the revision. */ #define CPU_ID_CPU_MASK 0xfffffff0 -/* Fake CPU IDs for ARMs without CP15 */ -#define CPU_ID_ARM2 0x41560200 -#define CPU_ID_ARM250 0x41560250 - -/* Pre-ARM7 CPUs -- [15:12] == 0 */ -#define CPU_ID_ARM3 0x41560300 -#define CPU_ID_ARM600 0x41560600 -#define CPU_ID_ARM610 0x41560610 -#define CPU_ID_ARM620 0x41560620 - -/* ARM7 CPUs -- [15:12] == 7 */ -#define CPU_ID_ARM700 0x41007000 /* XXX This is a guess. */ -#define CPU_ID_ARM710 0x41007100 -#define CPU_ID_ARM7500 0x41027100 -#define CPU_ID_ARM710A 0x41047100 /* inc ARM7100 */ -#define CPU_ID_ARM7500FE 0x41077100 -#define CPU_ID_ARM710T 0x41807100 -#define CPU_ID_ARM720T 0x41807200 -#define CPU_ID_ARM740T8K 0x41807400 /* XXX no MMU, 8KB cache */ -#define CPU_ID_ARM740T4K 0x41817400 /* XXX no MMU, 4KB cache */ - -/* Post-ARM7 CPUs */ -#define CPU_ID_ARM810 0x41018100 +/* ARM9 and later CPUs */ #define CPU_ID_ARM920T 0x41129200 #define CPU_ID_ARM920T_ALT 0x41009200 #define CPU_ID_ARM922T 0x41029220 @@ -155,8 +123,6 @@ #define CPU_ID_CORTEXA9R2 0x412fc090 #define CPU_ID_CORTEXA9R3 0x413fc090 #define CPU_ID_CORTEXA15 0x410fc0f0 -#define CPU_ID_SA110 0x4401a100 -#define CPU_ID_SA1100 0x4401a110 #define CPU_ID_KRAIT 0x510f06f0 /* Snapdragon S4 Pro/APQ8064 */ #define CPU_ID_TI925T 0x54029250 #define CPU_ID_MV88FR131 0x56251310 /* Marvell Feroceon 88FR131 Core */ @@ -180,8 +146,6 @@ #define CPU_ID_FA526 0x66015260 #define CPU_ID_FA626TE 0x66056260 -#define CPU_ID_SA1110 0x6901b110 -#define CPU_ID_IXP1200 0x6901c120 #define CPU_ID_80200 0x69052000 #define CPU_ID_PXA250 0x69052100 /* sans core revision */ #define CPU_ID_PXA210 0x69052120 @@ -206,18 +170,6 @@ #define CPU_ID_IXP435 0x69054040 #define CPU_ID_IXP465 0x69054200 -/* ARM3-specific coprocessor 15 registers */ -#define ARM3_CP15_FLUSH 1 -#define ARM3_CP15_CONTROL 2 -#define ARM3_CP15_CACHEABLE 3 -#define ARM3_CP15_UPDATEABLE 4 -#define ARM3_CP15_DISRUPTIVE 5 - -/* ARM3 Control register bits */ -#define ARM3_CTL_CACHE_ON 0x00000001 -#define ARM3_CTL_SHARED 0x00000002 -#define ARM3_CTL_MONITOR 0x00000004 - /* CPUID registers */ #define ARM_PFR0_ARM_ISA_MASK 0x0000000f diff --git a/sys/arm/include/asmacros.h b/sys/arm/include/asmacros.h index 8796ae8..f785135 100644 --- a/sys/arm/include/asmacros.h +++ b/sys/arm/include/asmacros.h @@ -1,12 +1,7 @@ -/* $NetBSD: frame.h,v 1.6 2003/10/05 19:44:58 matt Exp $ */ - /*- - * Copyright (c) 1994-1997 Mark Brinicombe. - * Copyright (c) 1994 Brini. + * Copyright (c) 2012 Olivier Houchard <cognet@FreeBSD.org> * All rights reserved. * - * This code is derived from software written for Brini by Mark Brinicombe - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -15,20 +10,14 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Brini. - * 4. The name of the company nor the name of the author may be used to - * endorse or promote products derived from this software without specific - * prior written permission. * - * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF @@ -47,233 +36,15 @@ #ifdef LOCORE #include "opt_global.h" -/* - * ASM macros for pushing and pulling trapframes from the stack - * - * These macros are used to handle the irqframe and trapframe structures - * defined above. - */ - -/* - * PUSHFRAME - macro to push a trap frame on the stack in the current mode - * Since the current mode is used, the SVC lr field is not defined. - * - * NOTE: r13 and r14 are stored separately as a work around for the - * SA110 rev 2 STM^ bug - */ -#ifdef ARM_TP_ADDRESS -#define PUSHFRAME \ - sub sp, sp, #4; /* Align the stack */ \ - str lr, [sp, #-4]!; /* Push the return address */ \ - sub sp, sp, #(4*17); /* Adjust the stack pointer */ \ - stmia sp, {r0-r12}; /* Push the user mode registers */ \ - add r0, sp, #(4*13); /* Adjust the stack pointer */ \ - stmia r0, {r13-r14}^; /* Push the user mode registers */ \ - mov r0, r0; /* NOP for previous instruction */ \ - mrs r0, spsr; /* Put the SPSR on the stack */ \ - str r0, [sp, #-4]!; \ - ldr r0, =ARM_RAS_START; \ - mov r1, #0; \ - str r1, [r0]; \ - mov r1, #0xffffffff; \ - str r1, [r0, #4]; -#else -#define PUSHFRAME \ - sub sp, sp, #4; /* Align the stack */ \ - str lr, [sp, #-4]!; /* Push the return address */ \ - sub sp, sp, #(4*17); /* Adjust the stack pointer */ \ - stmia sp, {r0-r12}; /* Push the user mode registers */ \ - add r0, sp, #(4*13); /* Adjust the stack pointer */ \ - stmia r0, {r13-r14}^; /* Push the user mode registers */ \ - mov r0, r0; /* NOP for previous instruction */ \ - mrs r0, spsr; /* Put the SPSR on the stack */ \ - str r0, [sp, #-4]!; -#endif - -/* - * PULLFRAME - macro to pull a trap frame from the stack in the current mode - * 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_fsxc, r0; \ - 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 */ \ - add sp, sp, #4 /* Align the stack */ -#else -#define PULLFRAME \ - ldr r0, [sp], #0x0004; /* Get the SPSR from stack */ \ - msr spsr_fsxc, 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 */ \ - add sp, sp, #4 /* Align the stack */ -#endif - -/* - * PUSHFRAMEINSVC - macro to push a trap frame on the stack in SVC32 mode - * This should only be used if the processor is not currently in SVC32 - * mode. The processor mode is switched to SVC mode and the trap frame is - * stored. The SVC lr field is used to store the previous value of - * lr in SVC mode. - * - * NOTE: r13 and r14 are stored separately as a work around for the - * SA110 rev 2 STM^ bug - */ -#ifdef ARM_TP_ADDRESS -#define PUSHFRAMEINSVC \ - stmdb sp, {r0-r3}; /* Save 4 registers */ \ - mov r0, lr; /* Save xxx32 r14 */ \ - mov r1, sp; /* Save xxx32 sp */ \ - mrs r3, spsr; /* Save xxx32 spsr */ \ - mrs r2, cpsr; /* Get the CPSR */ \ - bic r2, r2, #(PSR_MODE); /* Fix for SVC mode */ \ - orr r2, r2, #(PSR_SVC32_MODE); \ - msr cpsr_c, r2; /* Punch into SVC mode */ \ - mov r2, sp; /* Save SVC sp */ \ - bic sp, sp, #7; /* Align sp to an 8-byte addrress */ \ - sub sp, sp, #4; /* Pad trapframe to keep alignment */ \ - str r0, [sp, #-4]!; /* Push return address */ \ - str lr, [sp, #-4]!; /* Push SVC lr */ \ - str r2, [sp, #-4]!; /* Push SVC sp */ \ - msr spsr_fsxc, r3; /* Restore correct spsr */ \ - ldmdb r1, {r0-r3}; /* Restore 4 regs from xxx mode */ \ - sub sp, sp, #(4*15); /* Adjust the stack pointer */ \ - stmia sp, {r0-r12}; /* Push the user mode registers */ \ - add r0, sp, #(4*13); /* Adjust the stack pointer */ \ - stmia r0, {r13-r14}^; /* Push the user mode registers */ \ - mov r0, r0; /* NOP for previous instruction */ \ - ldr r5, =ARM_RAS_START; /* Check if there's any RAS */ \ - ldr r4, [r5, #4]; /* reset it to point at the */ \ - cmp r4, #0xffffffff; /* end of memory if necessary; */ \ - movne r1, #0xffffffff; /* leave value in r4 for later */ \ - strne r1, [r5, #4]; /* comparision against PC. */ \ - ldr r3, [r5]; /* Retrieve global RAS_START */ \ - cmp r3, #0; /* and reset it if non-zero. */ \ - movne r1, #0; /* If non-zero RAS_START and */ \ - strne r1, [r5]; /* PC was lower than RAS_END, */ \ - ldrne r1, [r0, #16]; /* adjust the saved PC so that */ \ - cmpne r4, r1; /* execution later resumes at */ \ - strhi r3, [r0, #16]; /* the RAS_START location. */ \ - mrs r0, spsr; \ - str r0, [sp, #-4]! -#else -#define PUSHFRAMEINSVC \ - stmdb sp, {r0-r3}; /* Save 4 registers */ \ - mov r0, lr; /* Save xxx32 r14 */ \ - mov r1, sp; /* Save xxx32 sp */ \ - mrs r3, spsr; /* Save xxx32 spsr */ \ - mrs r2, cpsr; /* Get the CPSR */ \ - bic r2, r2, #(PSR_MODE); /* Fix for SVC mode */ \ - orr r2, r2, #(PSR_SVC32_MODE); \ - msr cpsr_c, r2; /* Punch into SVC mode */ \ - mov r2, sp; /* Save SVC sp */ \ - bic sp, sp, #7; /* Align sp to an 8-byte addrress */ \ - sub sp, sp, #4; /* Pad trapframe to keep alignment */ \ - str r0, [sp, #-4]!; /* Push return address */ \ - str lr, [sp, #-4]!; /* Push SVC lr */ \ - str r2, [sp, #-4]!; /* Push SVC sp */ \ - msr spsr_fsxc, r3; /* Restore correct spsr */ \ - ldmdb r1, {r0-r3}; /* Restore 4 regs from xxx mode */ \ - sub sp, sp, #(4*15); /* Adjust the stack pointer */ \ - stmia sp, {r0-r12}; /* Push the user mode registers */ \ - add r0, sp, #(4*13); /* Adjust the stack pointer */ \ - stmia r0, {r13-r14}^; /* Push the user mode registers */ \ - mov r0, r0; /* NOP for previous instruction */ \ - mrs r0, spsr; /* Put the SPSR on the stack */ \ - str r0, [sp, #-4]! -#endif - -/* - * PULLFRAMEFROMSVCANDEXIT - macro to pull a trap frame from the stack - * in SVC32 mode and restore the saved processor mode and PC. - * This should be used when the SVC lr register needs to be restored on - * exit. - */ - -#ifdef ARM_TP_ADDRESS -#define PULLFRAMEFROMSVCANDEXIT \ - ldr r0, [sp], #0x0004; /* Get the SPSR from stack */ \ - msr spsr_fsxc, 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_fsxc, 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 -#if defined(__ARM_EABI__) -/* - * Unwind hints so we can unwind past functions that use - * PULLFRAMEFROMSVCANDEXIT. They are run in reverse order. - * As the last thing we do is restore the stack pointer - * we can ignore the padding at the end of struct trapframe. - */ -#define UNWINDSVCFRAME \ - .save {r13-r15}; /* Restore sp, lr, pc */ \ - .pad #(2*4); /* Skip user sp and lr */ \ - .save {r0-r12}; /* Restore r0-r12 */ \ - .pad #(4) /* Skip spsr */ -#else -#define UNWINDSVCFRAME -#endif - -#define DATA(name) \ - .data ; \ - _ALIGN_DATA ; \ - .globl name ; \ - .type name, %object ; \ -name: - #ifdef _ARM_ARCH_6 -#define AST_LOCALS #define GET_CURTHREAD_PTR(tmp) \ mrc p15, 0, tmp, c13, c0, 4 #else -#define AST_LOCALS ;\ -.Lcurthread: ;\ - .word _C_LABEL(__pcpu) + PC_CURTHREAD - -#define GET_CURTHREAD_PTR(tmp) \ - ldr tmp, .Lcurthread; \ - ldr tmp, [tmp] +#define GET_CURTHREAD_PTR(tmp) \ + ldr tmp, =_C_LABEL(__pcpu);\ + ldr tmp, [tmp, #PC_CURTHREAD] #endif -#define DO_AST \ - ldr r0, [sp] /* Get the SPSR from stack */ ;\ - mrs r4, cpsr /* save CPSR */ ;\ - orr r1, r4, #(I32_bit|F32_bit) ;\ - msr cpsr_c, r1 /* Disable interrupts */ ;\ - and r0, r0, #(PSR_MODE) /* Returning to USR mode? */ ;\ - teq r0, #(PSR_USR32_MODE) ;\ - bne 2f /* Nope, get out now */ ;\ - bic r4, r4, #(I32_bit|F32_bit) ;\ -1: GET_CURTHREAD_PTR(r5) ;\ - ldr r1, [r5, #(TD_FLAGS)] ;\ - and r1, r1, #(TDF_ASTPENDING|TDF_NEEDRESCHED) ;\ - teq r1, #0x00000000 ;\ - beq 2f /* Nope. Just bail */ ;\ - msr cpsr_c, r4 /* Restore interrupts */ ;\ - mov r0, sp ;\ - bl _C_LABEL(ast) /* ast(frame) */ ;\ - orr r0, r4, #(I32_bit|F32_bit) ;\ - msr cpsr_c, r0 ;\ - b 1b ;\ -2: - #endif /* LOCORE */ #endif /* _KERNEL */ diff --git a/sys/arm/include/cpuconf.h b/sys/arm/include/cpuconf.h index 0c2faa3..b7cad0d 100644 --- a/sys/arm/include/cpuconf.h +++ b/sys/arm/include/cpuconf.h @@ -50,15 +50,11 @@ /* * Step 1: Count the number of CPU types configured into the kernel. */ -#define CPU_NTYPES (defined(CPU_ARM7TDMI) + \ - defined(CPU_ARM8) + defined(CPU_ARM9) + \ +#define CPU_NTYPES (defined(CPU_ARM9) + \ defined(CPU_ARM9E) + \ defined(CPU_ARM10) + \ defined(CPU_ARM1136) + \ defined(CPU_ARM1176) + \ - defined(CPU_SA110) + defined(CPU_SA1100) + \ - defined(CPU_SA1110) + \ - defined(CPU_IXP12X0) + \ defined(CPU_XSCALE_80200) + \ defined(CPU_XSCALE_80321) + \ defined(CPU_XSCALE_PXA2X0) + \ @@ -72,9 +68,7 @@ /* * Step 2: Determine which ARM architecture versions are configured. */ -#if (defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined(CPU_ARM9) || \ - defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \ - defined(CPU_IXP12X0) || defined(CPU_FA526)) +#if defined(CPU_ARM9) || defined(CPU_FA526) #define ARM_ARCH_4 1 #else #define ARM_ARCH_4 0 @@ -123,27 +117,17 @@ * ARM_MMU_MEMC Prehistoric, external memory controller * and MMU for ARMv2 CPUs. * - * ARM_MMU_GENERIC Generic ARM MMU, compatible with ARM6. + * ARM_MMU_GENERIC Generic ARM MMU, compatible with ARMv4 and v5. * * ARM_MMU_V6 ARMv6 MMU. * * ARM_MMU_V7 ARMv7 MMU. * - * ARM_MMU_SA1 StrongARM SA-1 MMU. Compatible with generic - * ARM MMU, but has no write-through cache mode. - * * ARM_MMU_XSCALE XScale MMU. Compatible with generic ARM * MMU, but also has several extensions which * require different PTE layout to use. */ -#if (defined(CPU_ARM2) || defined(CPU_ARM250) || defined(CPU_ARM3)) -#define ARM_MMU_MEMC 1 -#else -#define ARM_MMU_MEMC 0 -#endif - -#if (defined(CPU_ARM6) || defined(CPU_ARM7) || defined(CPU_ARM7TDMI) || \ - defined(CPU_ARM8) || defined(CPU_ARM9) || defined(CPU_ARM9E) || \ +#if (defined(CPU_ARM9) || defined(CPU_ARM9E) || \ defined(CPU_ARM10) || defined(CPU_FA526) || \ defined(CPU_FA626TE)) #define ARM_MMU_GENERIC 1 @@ -163,13 +147,6 @@ #define ARM_MMU_V7 0 #endif -#if (defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) ||\ - defined(CPU_IXP12X0)) -#define ARM_MMU_SA1 1 -#else -#define ARM_MMU_SA1 0 -#endif - #if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ defined(CPU_XSCALE_80219) || defined(CPU_XSCALE_81342)) @@ -178,8 +155,8 @@ #define ARM_MMU_XSCALE 0 #endif -#define ARM_NMMUS (ARM_MMU_MEMC + ARM_MMU_GENERIC + ARM_MMU_V6 + \ - ARM_MMU_V7 + ARM_MMU_SA1 + ARM_MMU_XSCALE) +#define ARM_NMMUS (ARM_MMU_GENERIC + ARM_MMU_V6 + \ + ARM_MMU_V7 + ARM_MMU_XSCALE) #if ARM_NMMUS == 0 && !defined(KLD_MODULE) && defined(_KERNEL) #error ARM_NMMUS is 0 #endif diff --git a/sys/arm/include/cpufunc.h b/sys/arm/include/cpufunc.h index 68b15f5..49c08a3 100644 --- a/sys/arm/include/cpufunc.h +++ b/sys/arm/include/cpufunc.h @@ -284,63 +284,6 @@ u_int cpufunc_faultstatus (void); u_int cpufunc_faultaddress (void); u_int cpu_pfr (int); -#ifdef CPU_ARM3 -u_int arm3_control (u_int clear, u_int bic); -void arm3_cache_flush (void); -#endif /* CPU_ARM3 */ - -#if defined(CPU_ARM6) || defined(CPU_ARM7) -void arm67_setttb (u_int ttb); -void arm67_tlb_flush (void); -void arm67_tlb_purge (u_int va); -void arm67_cache_flush (void); -void arm67_context_switch (void); -#endif /* CPU_ARM6 || CPU_ARM7 */ - -#ifdef CPU_ARM6 -void arm6_setup (char *string); -#endif /* CPU_ARM6 */ - -#ifdef CPU_ARM7 -void arm7_setup (char *string); -#endif /* CPU_ARM7 */ - -#ifdef CPU_ARM7TDMI -int arm7_dataabt_fixup (void *arg); -void arm7tdmi_setup (char *string); -void arm7tdmi_setttb (u_int ttb); -void arm7tdmi_tlb_flushID (void); -void arm7tdmi_tlb_flushID_SE (u_int va); -void arm7tdmi_cache_flushID (void); -void arm7tdmi_context_switch (void); -#endif /* CPU_ARM7TDMI */ - -#ifdef CPU_ARM8 -void arm8_setttb (u_int ttb); -void arm8_tlb_flushID (void); -void arm8_tlb_flushID_SE (u_int va); -void arm8_cache_flushID (void); -void arm8_cache_flushID_E (u_int entry); -void arm8_cache_cleanID (void); -void arm8_cache_cleanID_E (u_int entry); -void arm8_cache_purgeID (void); -void arm8_cache_purgeID_E (u_int entry); - -void arm8_cache_syncI (void); -void arm8_cache_cleanID_rng (vm_offset_t start, vm_size_t end); -void arm8_cache_cleanD_rng (vm_offset_t start, vm_size_t end); -void arm8_cache_purgeID_rng (vm_offset_t start, vm_size_t end); -void arm8_cache_purgeD_rng (vm_offset_t start, vm_size_t end); -void arm8_cache_syncI_rng (vm_offset_t start, vm_size_t end); - -void arm8_context_switch (void); - -void arm8_setup (char *string); - -u_int arm8_clock_config (u_int, u_int); -#endif - - #if defined(CPU_FA526) || defined(CPU_FA626TE) void fa526_setup (char *arg); void fa526_setttb (u_int ttb); @@ -362,48 +305,6 @@ void fa526_idcache_wbinv_range(vm_offset_t start, vm_size_t end); #endif -#ifdef CPU_SA110 -void sa110_setup (char *string); -void sa110_context_switch (void); -#endif /* CPU_SA110 */ - -#if defined(CPU_SA1100) || defined(CPU_SA1110) -void sa11x0_drain_readbuf (void); - -void sa11x0_context_switch (void); -void sa11x0_cpu_sleep (int mode); - -void sa11x0_setup (char *string); -#endif - -#if defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) -void sa1_setttb (u_int ttb); - -void sa1_tlb_flushID_SE (u_int va); - -void sa1_cache_flushID (void); -void sa1_cache_flushI (void); -void sa1_cache_flushD (void); -void sa1_cache_flushD_SE (u_int entry); - -void sa1_cache_cleanID (void); -void sa1_cache_cleanD (void); -void sa1_cache_cleanD_E (u_int entry); - -void sa1_cache_purgeID (void); -void sa1_cache_purgeID_E (u_int entry); -void sa1_cache_purgeD (void); -void sa1_cache_purgeD_E (u_int entry); - -void sa1_cache_syncI (void); -void sa1_cache_cleanID_rng (vm_offset_t start, vm_size_t end); -void sa1_cache_cleanD_rng (vm_offset_t start, vm_size_t end); -void sa1_cache_purgeID_rng (vm_offset_t start, vm_size_t end); -void sa1_cache_purgeD_rng (vm_offset_t start, vm_size_t end); -void sa1_cache_syncI_rng (vm_offset_t start, vm_size_t end); - -#endif - #ifdef CPU_ARM9 void arm9_setttb (u_int); @@ -586,7 +487,6 @@ extern unsigned armv5_dcache_index_inc; #endif #if defined(CPU_ARM9) || defined(CPU_ARM9E) || defined(CPU_ARM10) || \ - defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \ defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_FA526) || defined(CPU_FA626TE) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ @@ -601,12 +501,6 @@ void armv4_drain_writebuf (void); void armv4_idcache_inv_all (void); #endif -#if defined(CPU_IXP12X0) -void ixp12x0_drain_readbuf (void); -void ixp12x0_context_switch (void); -void ixp12x0_setup (char *string); -#endif - #if defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \ defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) || \ defined(CPU_XSCALE_80219) || defined(CPU_XSCALE_81342) diff --git a/sys/arm/include/md_var.h b/sys/arm/include/md_var.h index ef202f5..7337b33 100644 --- a/sys/arm/include/md_var.h +++ b/sys/arm/include/md_var.h @@ -50,13 +50,6 @@ extern int _min_bzero_size; enum cpu_class { CPU_CLASS_NONE, - CPU_CLASS_ARM2, - CPU_CLASS_ARM2AS, - CPU_CLASS_ARM3, - CPU_CLASS_ARM6, - CPU_CLASS_ARM7, - CPU_CLASS_ARM7TDMI, - CPU_CLASS_ARM8, CPU_CLASS_ARM9TDMI, CPU_CLASS_ARM9ES, CPU_CLASS_ARM9EJS, @@ -64,7 +57,6 @@ enum cpu_class { CPU_CLASS_ARM10EJ, CPU_CLASS_CORTEXA, CPU_CLASS_KRAIT, - CPU_CLASS_SA1, CPU_CLASS_XSCALE, CPU_CLASS_ARM11J, CPU_CLASS_MARVELL diff --git a/sys/arm/include/param.h b/sys/arm/include/param.h index 5cd0b7b..ab5b406 100644 --- a/sys/arm/include/param.h +++ b/sys/arm/include/param.h @@ -70,7 +70,6 @@ #endif #endif #endif -#define MID_MACHINE MID_ARM6 #if defined(SMP) || defined(KLD_MODULE) #ifndef MAXCPU diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h index 74282cc..00080b9 100644 --- a/sys/arm/include/pmap.h +++ b/sys/arm/include/pmap.h @@ -355,7 +355,7 @@ extern int pmap_needs_pte_sync; #define L1_C_PROTO pte_l1_c_proto #define L2_S_PROTO pte_l2_s_proto -#elif (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 +#elif ARM_MMU_GENERIC != 0 #define L2_S_PROT_U L2_S_PROT_U_generic #define L2_S_PROT_W L2_S_PROT_W_generic #define L2_S_PROT_MASK L2_S_PROT_MASK_generic @@ -488,13 +488,10 @@ extern int pmap_needs_pte_sync; #endif /* SMP */ #endif /* ARM_NMMUS > 1 */ -#if (ARM_MMU_SA1 == 1) && (ARM_NMMUS == 1) -#define PMAP_NEEDS_PTE_SYNC 1 -#define PMAP_INCLUDE_PTE_SYNC -#elif defined(CPU_XSCALE_81342) || ARM_ARCH_6 || ARM_ARCH_7A +#if defined(CPU_XSCALE_81342) || ARM_ARCH_6 || ARM_ARCH_7A #define PMAP_NEEDS_PTE_SYNC 1 #define PMAP_INCLUDE_PTE_SYNC -#elif (ARM_MMU_SA1 == 0) +#else #define PMAP_NEEDS_PTE_SYNC 0 #endif @@ -616,14 +613,11 @@ extern void (*pmap_copy_page_offs_func)(vm_paddr_t a_phys, vm_offset_t a_offs, vm_paddr_t b_phys, vm_offset_t b_offs, int cnt); extern void (*pmap_zero_page_func)(vm_paddr_t, int, int); -#if (ARM_MMU_GENERIC + ARM_MMU_V6 + ARM_MMU_V7 + ARM_MMU_SA1) != 0 || defined(CPU_XSCALE_81342) +#if (ARM_MMU_GENERIC + ARM_MMU_V6 + ARM_MMU_V7) != 0 || defined(CPU_XSCALE_81342) void pmap_copy_page_generic(vm_paddr_t, vm_paddr_t); void pmap_zero_page_generic(vm_paddr_t, int, int); void pmap_pte_init_generic(void); -#if defined(CPU_ARM8) -void pmap_pte_init_arm8(void); -#endif #if defined(CPU_ARM9) void pmap_pte_init_arm9(void); #endif /* CPU_ARM9 */ @@ -633,11 +627,7 @@ void pmap_pte_init_arm10(void); #if (ARM_MMU_V6 + ARM_MMU_V7) != 0 void pmap_pte_init_mmu_v6(void); #endif /* (ARM_MMU_V6 + ARM_MMU_V7) != 0 */ -#endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */ - -#if /* ARM_MMU_SA1 == */1 -void pmap_pte_init_sa1(void); -#endif /* ARM_MMU_SA1 == 1 */ +#endif /* (ARM_MMU_GENERIC + ARM_MMU_V6 + ARM_MMU_V7) != 0 */ #if ARM_MMU_XSCALE == 1 void pmap_copy_page_xscale(vm_paddr_t, vm_paddr_t); diff --git a/sys/arm/include/sysarch.h b/sys/arm/include/sysarch.h index 95d0211..71023e8 100644 --- a/sys/arm/include/sysarch.h +++ b/sys/arm/include/sysarch.h @@ -45,7 +45,7 @@ * The cpu_switch() code assumes ARM_RAS_START is ARM_TP_ADDRESS + 4, and * ARM_RAS_END is ARM_TP_ADDRESS + 8, so if that ever changes, be sure to * update the cpu_switch() (and cpu_throw()) code as well. - * In addition, code in arm/include/atomic.h and arm/include/asmacros.h + * In addition, code in arm/include/atomic.h and arm/arm/exception.S * assumes that ARM_RAS_END is at ARM_RAS_START+4, so be sure to update those * if ARM_RAS_END moves in relation to ARM_RAS_START (look for occurrences * of ldr/str rm,[rn, #4]). diff --git a/sys/arm/lpc/files.lpc b/sys/arm/lpc/files.lpc index 9569702..8b24d3b 100644 --- a/sys/arm/lpc/files.lpc +++ b/sys/arm/lpc/files.lpc @@ -1,6 +1,5 @@ # $FreeBSD$ arm/arm/bus_space_generic.c standard -arm/arm/irq_dispatch.S standard arm/arm/cpufunc_asm_arm9.S standard arm/arm/cpufunc_asm_armv5.S standard arm/lpc/lpc_machdep.c standard diff --git a/sys/arm/mv/files.mv b/sys/arm/mv/files.mv index 4fbdc6d..0d14e4d 100644 --- a/sys/arm/mv/files.mv +++ b/sys/arm/mv/files.mv @@ -20,7 +20,6 @@ arm/arm/cpufunc_asm_armv5_ec.S standard arm/arm/cpufunc_asm_armv7.S standard arm/arm/cpufunc_asm_sheeva.S standard arm/arm/cpufunc_asm_pj4b.S standard -arm/arm/irq_dispatch.S standard arm/mv/bus_space.c standard arm/mv/gpio.c standard diff --git a/sys/arm/rockchip/files.rk30xx b/sys/arm/rockchip/files.rk30xx index 7fcd411..60d8eb9 100644 --- a/sys/arm/rockchip/files.rk30xx +++ b/sys/arm/rockchip/files.rk30xx @@ -7,7 +7,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/arm/gic.c standard arm/arm/mpcore_timer.c standard diff --git a/sys/arm/s3c2xx0/files.s3c2xx0 b/sys/arm/s3c2xx0/files.s3c2xx0 index 0e82b39..5ad2890 100644 --- a/sys/arm/s3c2xx0/files.s3c2xx0 +++ b/sys/arm/s3c2xx0/files.s3c2xx0 @@ -2,7 +2,6 @@ arm/arm/bus_space_asm_generic.S standard arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_arm9.S standard -arm/arm/irq_dispatch.S standard arm/s3c2xx0/board_ln2410sbc.c optional board_ln2410sbc arm/s3c2xx0/s3c24x0_rtc.c standard arm/s3c2xx0/s3c24x0_machdep.c standard diff --git a/sys/arm/s3c2xx0/s3c24x0_machdep.c b/sys/arm/s3c2xx0/s3c24x0_machdep.c index 2f684ab..c4fa77f 100644 --- a/sys/arm/s3c2xx0/s3c24x0_machdep.c +++ b/sys/arm/s3c2xx0/s3c24x0_machdep.c @@ -106,10 +106,6 @@ __FBSDID("$FreeBSD$"); extern int s3c2410_pclk; -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -372,10 +368,6 @@ initarm(struct arm_boot_params *abp) } cninit(); - /* Set stack for exception handlers */ - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/sa11x0/assabet_machdep.c b/sys/arm/sa11x0/assabet_machdep.c deleted file mode 100644 index 77855e9..0000000 --- a/sys/arm/sa11x0/assabet_machdep.c +++ /dev/null @@ -1,400 +0,0 @@ -/* $NetBSD: hpc_machdep.c,v 1.70 2003/09/16 08:18:22 agc Exp $ */ - -/*- - * Copyright (c) 1994-1998 Mark Brinicombe. - * Copyright (c) 1994 Brini. - * All rights reserved. - * - * This code is derived from software written for Brini by Mark Brinicombe - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Brini. - * 4. The name of the company nor the name of the author may be used to - * endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * RiscBSD kernel project - * - * machdep.c - * - * Machine dependant functions for kernel setup - * - * This file needs a lot of work. - * - * Created : 17/09/94 - */ - - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include "opt_md.h" - -#define _ARM32_BUS_DMA_PRIVATE -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/sysproto.h> -#include <sys/signalvar.h> -#include <sys/imgact.h> -#include <sys/kernel.h> -#include <sys/ktr.h> -#include <sys/linker.h> -#include <sys/lock.h> -#include <sys/malloc.h> -#include <sys/mutex.h> -#include <sys/pcpu.h> -#include <sys/proc.h> -#include <sys/ptrace.h> -#include <sys/cons.h> -#include <sys/bio.h> -#include <sys/bus.h> -#include <sys/buf.h> -#include <sys/exec.h> -#include <sys/kdb.h> -#include <machine/reg.h> -#include <machine/cpu.h> - -#include <vm/vm.h> -#include <vm/pmap.h> -#include <vm/vm_object.h> -#include <vm/vm_page.h> -#include <vm/vm_map.h> -#include <machine/devmap.h> -#include <machine/vmparam.h> -#include <machine/pcb.h> -#include <machine/undefined.h> -#include <machine/machdep.h> -#include <machine/metadata.h> -#include <machine/armreg.h> -#include <machine/physmem.h> - -#include <machine/bus.h> -#include <sys/reboot.h> - -#include <arm/sa11x0/sa11x0_reg.h> - -#define MDROOT_ADDR 0xd0400000 - -#define KERNEL_PT_VMEM 0 /* Page table for mapping video memory */ -#define KERNEL_PT_SYS 0 /* Page table for mapping proc0 zero page */ -#define KERNEL_PT_IO 3 /* Page table for mapping IO */ -#define KERNEL_PT_IRQ 2 /* Page table for mapping irq handler */ -#define KERNEL_PT_KERNEL 1 /* Page table for mapping kernel */ -#define KERNEL_PT_L1 4 /* Page table for mapping l1pt */ -#define KERNEL_PT_VMDATA 5 /* Page tables for mapping kernel VM */ -#define KERNEL_PT_VMDATA_NUM 7 /* start with 16MB of KVM */ -#define NUM_KERNEL_PTS (KERNEL_PT_VMDATA + KERNEL_PT_VMDATA_NUM) - -#define KERNEL_VM_BASE (KERNBASE + 0x00100000) -#define KERNEL_VM_SIZE 0x05000000 - -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - -struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; - -extern vm_offset_t sa1110_uart_vaddr; - -extern vm_offset_t sa1_cache_clean_addr; - -#ifndef MD_ROOT_SIZE -#define MD_ROOT_SIZE 65535 -#endif -/* Physical and virtual addresses for some global pages */ - -vm_paddr_t physical_start; -vm_paddr_t physical_end; -vm_paddr_t physical_freestart; - -struct pv_addr systempage; -struct pv_addr irqstack; -struct pv_addr undstack; -struct pv_addr abtstack; -struct pv_addr kernelstack; - -/* Static device mappings. */ -static const struct arm_devmap_entry assabet_devmap[] = { - /* - * Map the on-board devices VA == PA so that we can access them - * with the MMU on or off. - */ - { - SACOM1_VBASE, - SACOM1_BASE, - SACOM1_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { - SAIPIC_BASE, - SAIPIC_BASE, - SAIPIC_SIZE, - VM_PROT_READ|VM_PROT_WRITE, - PTE_NOCACHE, - }, - { - 0, - 0, - 0, - 0, - 0, - } -}; - -struct arm32_dma_range * -bus_dma_get_range(void) -{ - - return (NULL); -} - -int -bus_dma_get_range_nb(void) -{ - return (0); -} - -void -cpu_reset() -{ - cpu_halt(); - while (1); -} - -#define CPU_SA110_CACHE_CLEAN_SIZE (0x4000 * 2) - -void * -initarm(struct arm_boot_params *abp) -{ - struct pv_addr kernel_l1pt; - struct pv_addr md_addr; - struct pv_addr md_bla; - struct pv_addr dpcpu; - int loop; - u_int l1pagetable; - vm_offset_t freemempos; - vm_offset_t lastalloced; - vm_offset_t lastaddr; - uint32_t memsize = 32 * 1024 * 1024; - sa1110_uart_vaddr = SACOM1_VBASE; - - boothowto = RB_VERBOSE | RB_SINGLE; /* Default value */ - lastaddr = parse_boot_param(abp); - arm_physmem_kernaddr = abp->abp_physaddr; - cninit(); - set_cpufuncs(); - pcpu0_init(); - - /* Do basic tuning, hz etc */ - init_param1(); - - physical_start = (vm_offset_t) KERNBASE; - physical_end = lastaddr; - physical_freestart = (((vm_offset_t)physical_end) + PAGE_MASK) & ~PAGE_MASK; - md_addr.pv_va = md_addr.pv_pa = MDROOT_ADDR; - freemempos = (vm_offset_t)round_page(physical_freestart); - memset((void *)freemempos, 0, 256*1024); - /* Define a macro to simplify memory allocation */ -#define valloc_pages(var, np) \ - alloc_pages((var).pv_pa, (np)); \ - (var).pv_va = (var).pv_pa; - -#define alloc_pages(var, np) \ - (var) = freemempos; \ - freemempos += ((np) * PAGE_SIZE);\ - memset((char *)(var), 0, ((np) * PAGE_SIZE)); - - while ((freemempos & (L1_TABLE_SIZE - 1)) != 0) - freemempos += PAGE_SIZE; - valloc_pages(kernel_l1pt, L1_TABLE_SIZE / PAGE_SIZE); - valloc_pages(md_bla, L2_TABLE_SIZE / PAGE_SIZE); - alloc_pages(sa1_cache_clean_addr, CPU_SA110_CACHE_CLEAN_SIZE / PAGE_SIZE); - - for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) { - if (!(loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL))) { - valloc_pages(kernel_pt_table[loop], - L2_TABLE_SIZE / PAGE_SIZE); - } else { - kernel_pt_table[loop].pv_pa = freemempos + - (loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL)) * - L2_TABLE_SIZE_REAL; - kernel_pt_table[loop].pv_va = - kernel_pt_table[loop].pv_pa; - } - } - - /* - * Allocate a page for the system page mapped to V0x00000000 - * This page will just contain the system vectors and can be - * shared by all processes. - */ - valloc_pages(systempage, 1); - - /* Allocate dynamic per-cpu area. */ - valloc_pages(dpcpu, DPCPU_SIZE / PAGE_SIZE); - dpcpu_init((void *)dpcpu.pv_va, 0); - - /* Allocate stacks for all modes */ - valloc_pages(irqstack, IRQ_STACK_SIZE); - valloc_pages(abtstack, ABT_STACK_SIZE); - valloc_pages(undstack, UND_STACK_SIZE); - valloc_pages(kernelstack, KSTACK_PAGES); - lastalloced = kernelstack.pv_va; - - /* - * Allocate memory for the l1 and l2 page tables. The scheme to avoid - * wasting memory by allocating the l1pt on the first 16k memory was - * taken from NetBSD rpc_machdep.c. NKPT should be greater than 12 for - * this to work (which is supposed to be the case). - */ - - /* - * Now we start construction of the L1 page table - * We start by mapping the L2 page tables into the L1. - * This means that we can replace L1 mappings later on if necessary - */ - l1pagetable = kernel_l1pt.pv_pa; - - - /* Map the L2 pages tables in the L1 page table */ - pmap_link_l2pt(l1pagetable, 0x00000000, - &kernel_pt_table[KERNEL_PT_SYS]); - pmap_link_l2pt(l1pagetable, KERNBASE, - &kernel_pt_table[KERNEL_PT_KERNEL]); - pmap_link_l2pt(l1pagetable, 0xd0000000, - &kernel_pt_table[KERNEL_PT_IO]); - pmap_link_l2pt(l1pagetable, lastalloced & ~((L1_S_SIZE * 4) - 1), - &kernel_pt_table[KERNEL_PT_L1]); - pmap_link_l2pt(l1pagetable, 0x90000000, &kernel_pt_table[KERNEL_PT_IRQ]); - pmap_link_l2pt(l1pagetable, MDROOT_ADDR, - &md_bla); - for (loop = 0; loop < KERNEL_PT_VMDATA_NUM; ++loop) - pmap_link_l2pt(l1pagetable, KERNEL_VM_BASE + loop * 0x00100000, - &kernel_pt_table[KERNEL_PT_VMDATA + loop]); - pmap_map_chunk(l1pagetable, KERNBASE, KERNBASE, - ((uint32_t)lastaddr - KERNBASE), VM_PROT_READ|VM_PROT_WRITE, - PTE_CACHE); - /* Map the DPCPU pages */ - pmap_map_chunk(l1pagetable, dpcpu.pv_va, dpcpu.pv_pa, DPCPU_SIZE, - VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - /* Map the stack pages */ - pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa, - IRQ_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - pmap_map_chunk(l1pagetable, md_addr.pv_va, md_addr.pv_pa, - MD_ROOT_SIZE * 1024, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - pmap_map_chunk(l1pagetable, abtstack.pv_va, abtstack.pv_pa, - ABT_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - pmap_map_chunk(l1pagetable, undstack.pv_va, undstack.pv_pa, - UND_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - pmap_map_chunk(l1pagetable, kernelstack.pv_va, kernelstack.pv_pa, - KSTACK_PAGES * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - - pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa, - L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); - - for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) { - pmap_map_chunk(l1pagetable, kernel_pt_table[loop].pv_va, - kernel_pt_table[loop].pv_pa, L2_TABLE_SIZE, - VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); - } - pmap_map_chunk(l1pagetable, md_bla.pv_va, md_bla.pv_pa, L2_TABLE_SIZE, - VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE); - /* Map the vector page. */ - pmap_map_entry(l1pagetable, vector_page, systempage.pv_pa, - VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - /* Map the statically mapped devices. */ - arm_devmap_bootstrap(l1pagetable, assabet_devmap); - pmap_map_chunk(l1pagetable, sa1_cache_clean_addr, 0xf0000000, - CPU_SA110_CACHE_CLEAN_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE); - - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; - undefined_init(); - cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT); - setttb(kernel_l1pt.pv_pa); - cpu_tlb_flushID(); - cpu_domains(DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)); - - /* - * Pages were allocated during the secondary bootstrap for the - * stacks for different CPU modes. - * We must now set the r13 registers in the different CPU modes to - * point to these stacks. - * Since the ARM stacks use STMFD etc. we must set r13 to the top end - * of the stack memory. - */ - set_stackptrs(0); - - /* - * We must now clean the cache again.... - * Cleaning may be done by reading new data to displace any - * dirty data in the cache. This will have happened in setttb() - * but since we are boot strapping the addresses used for the read - * may have just been remapped and thus the cache could be out - * of sync. A re-clean after the switch will cure this. - * After booting there are no gross relocations of the kernel thus - * this problem will not occur after initarm(). - */ - cpu_idcache_wbinv_all(); - - bootverbose = 1; - - /* Set stack for exception handlers */ - - init_proc0(kernelstack.pv_va); - - - /* Enable MMU, I-cache, D-cache, write buffer. */ - - cpufunc_control(0x337f, 0x107d); - arm_vector_init(ARM_VECTORS_LOW, ARM_VEC_ALL); - cpu_setup(""); - - pmap_curmaxkvaddr = freemempos + KERNEL_PT_VMDATA_NUM * 0x400000; - mutex_init(); - vm_max_kernel_address = 0xd0000000; - pmap_bootstrap(freemempos, &kernel_l1pt); - - /* - * Add the physical ram we have available. - * - * Exclude the kernel (and all the things we allocated which immediately - * follow the kernel) from the VM allocation pool but not from crash - * dumps. virtual_avail is a global variable which tracks the kva we've - * "allocated" while setting up pmaps. - * - * Prepare the list of physical memory available to the vm subsystem. - */ - arm_physmem_hardware_region(physical_start, memsize); - arm_physmem_exclude_region(abp->abp_physaddr, - virtual_avail - KERNVIRTADDR, EXFLAG_NOALLOC); - arm_physmem_init_kernel_globals(); - - init_param2(physmem); - kdb_init(); - return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP - - sizeof(struct pcb))); -} diff --git a/sys/arm/sa11x0/files.sa11x0 b/sys/arm/sa11x0/files.sa11x0 deleted file mode 100644 index 0706c27..0000000 --- a/sys/arm/sa11x0/files.sa11x0 +++ /dev/null @@ -1,14 +0,0 @@ -# $FreeBSD$ -arm/arm/bus_space_generic.c standard -arm/arm/cpufunc_asm_sa1.S standard -arm/arm/cpufunc_asm_sa11x0.S standard -arm/sa11x0/assabet_machdep.c optional assabet -arm/sa11x0/sa11x0.c optional saip -arm/sa11x0/sa11x0_ost.c optional saip -arm/sa11x0/sa11x0_io.c optional saip -arm/sa11x0/sa11x0_io_asm.S optional saip -arm/sa11x0/sa11x0_irq.S optional saip -arm/sa11x0/sa11x0_irqhandler.c optional saip -arm/sa11x0/uart_cpu_sa1110.c optional uart saip -arm/sa11x0/uart_dev_sa1110.c optional uart saip -arm/sa11x0/uart_bus_sa1110.c optional uart saip diff --git a/sys/arm/sa11x0/sa11x0.c b/sys/arm/sa11x0/sa11x0.c deleted file mode 100644 index 975c08d..0000000 --- a/sys/arm/sa11x0/sa11x0.c +++ /dev/null @@ -1,253 +0,0 @@ -/* $NetBSD: sa11x0.c,v 1.14 2003/07/15 00:24:50 lukem Exp $ */ - -/*- - * Copyright (c) 2001, The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by IWAMOTO Toshihiro and Ichiro FUKUHARA. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - */ -/*- - * Copyright (c) 1999 - * Shin Takemura and PocketBSD Project. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the PocketBSD project - * and its contributors. - * 4. Neither the name of the project nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/bus.h> -#include <sys/kernel.h> -#include <sys/reboot.h> -#include <sys/malloc.h> -#include <sys/interrupt.h> -#include <sys/module.h> -#include <sys/rman.h> - -#include <vm/vm.h> -#include <vm/vm_extern.h> - -#include <machine/cpu.h> -#include <machine/bus.h> -#include <machine/intr.h> -#include <arm/sa11x0/sa11x0_reg.h> -#include <arm/sa11x0/sa11x0_var.h> -#include <arm/sa11x0/sa11x0_dmacreg.h> -#include <arm/sa11x0/sa11x0_ppcreg.h> -#include <arm/sa11x0/sa11x0_gpioreg.h> - -extern void sa11x0_activateirqs(void); - -static struct resource *sa1110_alloc_resource(device_t, device_t, int, int *, - u_long, u_long, u_long, u_int); - -static int sa1110_activate_resource(device_t, device_t, int, int, - struct resource *); -static int sa1110_setup_intr(device_t, device_t, struct resource *, int, - driver_filter_t *, driver_intr_t *, void *, void **); - -struct sa11x0_softc *sa11x0_softc; /* There can be only one. */ - -static int -sa1110_setup_intr(device_t dev, device_t child, - struct resource *ires, int flags, driver_filter_t *filt, - driver_intr_t *intr, void *arg, void **cookiep) -{ - int saved_cpsr; - - if (flags & INTR_TYPE_TTY) - rman_set_start(ires, 15); - else if (flags & INTR_TYPE_CLK) { - if (rman_get_start(ires) == 0) - rman_set_start(ires, 26); - else - rman_set_start(ires, 27); - } - saved_cpsr = SetCPSR(I32_bit, I32_bit); - - SetCPSR(I32_bit, saved_cpsr & I32_bit); - BUS_SETUP_INTR(device_get_parent(dev), child, ires, flags, filt, - intr, arg, cookiep); - return (0); -} - -static struct resource * -sa1110_alloc_resource(device_t bus, device_t child, int type, int *rid, - u_long start, u_long end, u_long count, u_int flags) -{ - struct resource *res; - - res = rman_reserve_resource(&sa11x0_softc->sa11x0_rman, *rid, *rid, - count, flags, child); - if (res != NULL) - rman_set_rid(res, *rid); - - return (res); -} -static int -sa1110_activate_resource(device_t bus, device_t child, int type, int rid, - struct resource *r) -{ - return (0); -} -/* prototypes */ -static int sa11x0_probe(device_t); -static int sa11x0_attach(device_t); -static void sa11x0_identify(driver_t *, device_t); - -extern vm_offset_t saipic_base; - - -int -sa11x0_probe(device_t dev) -{ - return (BUS_PROBE_NOWILDCARD); -} - -void -sa11x0_identify(driver_t *driver, device_t parent) -{ - - BUS_ADD_CHILD(parent, 0, "saip", 0); -} - -int -sa11x0_attach(device_t dev) -{ - struct sa11x0_softc *sc = device_get_softc(dev); - int unit = device_get_unit(dev); - sc->sc_iot = &sa11x0_bs_tag; - - sa11x0_softc = sc; - - /* Map the SAIP */ - - if (bus_space_map(sc->sc_iot, SAIPIC_BASE, SAIPIC_NPORTS, - 0, &sc->sc_ioh)) - panic("saip%d: Cannot map registers", unit); - saipic_base = sc->sc_ioh; - - /* Map the GPIO registers */ - if (bus_space_map(sc->sc_iot, SAGPIO_BASE, SAGPIO_NPORTS, - 0, &sc->sc_gpioh)) - panic("saip%d: unable to map GPIO registers", unit); - bus_space_write_4(sc->sc_iot, sc->sc_gpioh, SAGPIO_EDR, 0xffffffff); - - /* Map the PPC registers */ - if (bus_space_map(sc->sc_iot, SAPPC_BASE, SAPPC_NPORTS, - 0, &sc->sc_ppch)) - panic("saip%d: unable to map PPC registers", unit); - -#if 0 - /* Map the DMA controller registers */ - if (bus_space_map(sc->sc_iot, SADMAC_BASE, SADMAC_NPORTS, - 0, &sc->sc_dmach)) - panic("saip%d: unable to map DMAC registers", unit); -#endif - /* Map the reset controller registers */ - if (bus_space_map(sc->sc_iot, SARCR_BASE, PAGE_SIZE, - 0, &sc->sc_reseth)) - panic("saip%d: unable to map reset registers", unit); - printf("\n"); - - - /* - * Mask all interrupts. - * They are later unmasked at each device's attach routine. - */ - bus_space_write_4(sc->sc_iot, sc->sc_ioh, SAIPIC_MR, 0); - - /* Route all bits to IRQ */ - bus_space_write_4(sc->sc_iot, sc->sc_ioh, SAIPIC_LR, 0); - - /* Exit idle mode only when unmasked intr is received */ - bus_space_write_4(sc->sc_iot, sc->sc_ioh, SAIPIC_CR, 1); -#if 0 - /* disable all DMAC channels */ - bus_space_write_4(sc->sc_iot, sc->sc_dmach, SADMAC_DCR0_CLR, 1); - bus_space_write_4(sc->sc_iot, sc->sc_dmach, SADMAC_DCR1_CLR, 1); - bus_space_write_4(sc->sc_iot, sc->sc_dmach, SADMAC_DCR2_CLR, 1); - bus_space_write_4(sc->sc_iot, sc->sc_dmach, SADMAC_DCR3_CLR, 1); - bus_space_write_4(sc->sc_iot, sc->sc_dmach, SADMAC_DCR4_CLR, 1); - bus_space_write_4(sc->sc_iot, sc->sc_dmach, SADMAC_DCR5_CLR, 1); -#endif - /* - * XXX this is probably a bad place, but intr bit shouldn't be - * XXX enabled before intr mask is set. - * XXX Having sane imask[] suffice?? - */ -#if 0 - SetCPSR(I32_bit, 0); -#endif - /* - * Attach each devices - */ - sc->sa11x0_rman.rm_type = RMAN_ARRAY; - sc->sa11x0_rman.rm_descr = "SA11x0 IRQs"; - if (rman_init(&sc->sa11x0_rman) != 0 || - rman_manage_region(&sc->sa11x0_rman, 0, 32) != 0) - panic("sa11x0_attach: failed to set up rman"); - device_add_child(dev, "uart", 0); - device_add_child(dev, "saost", 0); - bus_generic_probe(dev); - bus_generic_attach(dev); - sa11x0_activateirqs(); - return (0); -} - -static device_method_t saip_methods[] = { - DEVMETHOD(device_probe, sa11x0_probe), - DEVMETHOD(device_attach, sa11x0_attach), - DEVMETHOD(device_identify, sa11x0_identify), - DEVMETHOD(bus_alloc_resource, sa1110_alloc_resource), - DEVMETHOD(bus_activate_resource, sa1110_activate_resource), - DEVMETHOD(bus_setup_intr, sa1110_setup_intr), - {0, 0}, -}; - -static driver_t saip_driver = { - "saip", - saip_methods, - sizeof(struct sa11x0_softc), -}; -static devclass_t saip_devclass; - -DRIVER_MODULE(saip, nexus, saip_driver, saip_devclass, 0, 0); diff --git a/sys/arm/sa11x0/sa11x0_dmacreg.h b/sys/arm/sa11x0/sa11x0_dmacreg.h deleted file mode 100644 index a4b5fb7..0000000 --- a/sys/arm/sa11x0/sa11x0_dmacreg.h +++ /dev/null @@ -1,90 +0,0 @@ -/* $NetBSD: sa11x0_dmacreg.h,v 1.1 2001/07/08 23:37:53 rjs Exp $ */ - -/*- - * Copyright (c) 2001, The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by IWAMOTO Toshihiro. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -/* SA11[01]0 integrated DMA controller */ - -#define SADMAC_NPORTS 40 - -#define SADMAC_DAR0 0x00 /* DMA device address register */ -#define SADMAC_DCR0_SET 0x04 /* DMA control/status (set) */ -#define SADMAC_DCR0_CLR 0x08 /* DMA control/status (clear) */ -#define SADMAC_DCR0 0x0C /* DMA control/status (read only) */ -#define SADMAC_DBSA0 0x10 /* DMA Buffer A start address */ -#define SADMAC_DBTA0 0x14 /* DMA Buffer A transfer count */ -#define SADMAC_DBSB0 0x18 /* DMA Buffer B start address */ -#define SADMAC_DBTB0 0x1C /* DMA Buffer B transfer count */ - -#define SADMAC_DAR1 0x20 -#define SADMAC_DCR1_SET 0x24 -#define SADMAC_DCR1_CLR 0x28 -#define SADMAC_DCR1 0x2C -#define SADMAC_DBSA1 0x30 -#define SADMAC_DBTA1 0x34 -#define SADMAC_DBSB1 0x38 -#define SADMAC_DBTB1 0x3C - -#define SADMAC_DAR2 0x40 -#define SADMAC_DCR2_SET 0x44 -#define SADMAC_DCR2_CLR 0x48 -#define SADMAC_DCR2 0x4C -#define SADMAC_DBSA2 0x50 -#define SADMAC_DBTA2 0x54 -#define SADMAC_DBSB2 0x58 -#define SADMAC_DBTB2 0x5C - -#define SADMAC_DAR3 0x60 -#define SADMAC_DCR3_SET 0x64 -#define SADMAC_DCR3_CLR 0x68 -#define SADMAC_DCR3 0x6C -#define SADMAC_DBSA3 0x70 -#define SADMAC_DBTA3 0x74 -#define SADMAC_DBSB3 0x78 -#define SADMAC_DBTB3 0x7C - -#define SADMAC_DAR4 0x80 -#define SADMAC_DCR4_SET 0x84 -#define SADMAC_DCR4_CLR 0x88 -#define SADMAC_DCR4 0x8C -#define SADMAC_DBSA4 0x90 -#define SADMAC_DBTA4 0x94 -#define SADMAC_DBSB4 0x98 -#define SADMAC_DBTB4 0x9C - -#define SADMAC_DAR5 0xA0 -#define SADMAC_DCR5_SET 0xA4 -#define SADMAC_DCR5_CLR 0xA8 -#define SADMAC_DCR5 0xAC -#define SADMAC_DBSA5 0xB0 -#define SADMAC_DBTA5 0xB4 -#define SADMAC_DBSB5 0xB8 -#define SADMAC_DBTB5 0xBC diff --git a/sys/arm/sa11x0/sa11x0_gpioreg.h b/sys/arm/sa11x0/sa11x0_gpioreg.h deleted file mode 100644 index 92c5bfe..0000000 --- a/sys/arm/sa11x0/sa11x0_gpioreg.h +++ /dev/null @@ -1,93 +0,0 @@ -/* $NetBSD: sa11x0_gpioreg.h,v 1.2 2001/07/30 15:58:56 rjs Exp $ */ - -/*- - * Copyright (c) 2001 The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Ichiro FUKUHARA (ichiro@ichiro.org). - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -/* - * SA-11x0 GPIO Register - */ - -#define SAGPIO_NPORTS 8 - -/* GPIO pin-level register */ -#define SAGPIO_PLR 0x00 - -/* GPIO pin direction register */ -#define SAGPIO_PDR 0x04 - -/* GPIO pin output set register */ -#define SAGPIO_PSR 0x08 - -/* GPIO pin output clear register */ -#define SAGPIO_PCR 0x0C - -/* GPIO rising-edge detect register */ -#define SAGPIO_RER 0x10 - -/* GPIO falling-edge detect register */ -#define SAGPIO_FER 0x14 - -/* GPIO edge-detect status register */ -#define SAGPIO_EDR 0x18 - -/* GPIO alternate function register */ -#define SAGPIO_AFR 0x1C - -/* XXX */ -#define GPIO(x) (0x00000001 << (x)) - -/* - * SA-11x0 GPIOs parameter - */ -/* -port name desc -0 Reserved -1 Reserved -2...9 LDD{8..15} LCD DATA(8-15) -10 SSP_TXD SSP transmit -11 SSP_RXD SSP receive -12 SSP_SCLK SSP serial clock -13 SSP_SFRM SSP frameclock -14 UART_TXD UART transmit -15 UART_RXD UART receive -16 GPCLK_OUT General-purpose clock out -17 Reserved -18 UART_SCLK Sample clock input -19 SSP_CLK Sample clock input -20 UART_SCLK3 Sample clock input -21 MCP_CLK MCP dock in -22 TREQA Either TIC request A -23 TREQB Either TIC request B -24 Reserved -25 RTC Real Time Clock -26 RCLK_OUT internal clock /2 -27 32KHZ_OUT Raw 32.768kHz osc output - */ diff --git a/sys/arm/sa11x0/sa11x0_io.c b/sys/arm/sa11x0/sa11x0_io.c deleted file mode 100644 index 5731599..0000000 --- a/sys/arm/sa11x0/sa11x0_io.c +++ /dev/null @@ -1,135 +0,0 @@ -/* $NetBSD: sa11x0_io.c,v 1.12 2003/07/15 00:24:51 lukem Exp $ */ - -/*- - * Copyright (c) 1997 Mark Brinicombe. - * Copyright (c) 1997 Causality Limited. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Ichiro FUKUHARA. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Mark Brinicombe. - * 4. The name of the company nor the name of the author may be used to - * endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * bus_space I/O functions for sa11x0 - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/queue.h> -#include <sys/lock.h> -#include <sys/mutex.h> - -#include <vm/vm.h> -#include <vm/pmap.h> -#include <vm/vm_extern.h> -#include <vm/vm_kern.h> - -#include <machine/bus.h> - -/* Proto types for all the bus_space structure functions */ - -bs_protos(generic); -bs_protos(sa11x0); - -/* Declare the sa11x0 bus space tag */ - -struct bus_space sa11x0_bs_tag = { - /* cookie */ - NULL, - - /* mapping/unmapping */ - generic_bs_map, - generic_bs_unmap, - generic_bs_subregion, - - /* allocation/deallocation */ - generic_bs_alloc, - generic_bs_free, - - /* barrier */ - generic_bs_barrier, - - /* read (single) */ - sa11x0_bs_r_1, - sa11x0_bs_r_2, - sa11x0_bs_r_4, - NULL, - - /* read multiple */ - sa11x0_bs_rm_1, - sa11x0_bs_rm_2, - sa11x0_bs_rm_4, - NULL, - - /* read region */ - NULL, - sa11x0_bs_rr_2, - NULL, - NULL, - /* write (single) */ - sa11x0_bs_w_1, - sa11x0_bs_w_2, - sa11x0_bs_w_4, - NULL, - - /* write multiple */ - sa11x0_bs_wm_1, - sa11x0_bs_wm_2, - sa11x0_bs_wm_4, - NULL, - - /* write region */ - NULL, - sa11x0_bs_wr_2, - NULL, - NULL, - - /* set multiple */ - NULL, - NULL, - NULL, - NULL, - - /* set region */ - NULL, - sa11x0_bs_sr_2, - NULL, - NULL, - - /* copy */ - NULL, - sa11x0_bs_c_2, - NULL, - NULL, -}; - -/* End of sa11x0_io.c */ diff --git a/sys/arm/sa11x0/sa11x0_io_asm.S b/sys/arm/sa11x0/sa11x0_io_asm.S deleted file mode 100644 index 00b59bf..0000000 --- a/sys/arm/sa11x0/sa11x0_io_asm.S +++ /dev/null @@ -1,290 +0,0 @@ -/* $NetBSD: sa11x0_io_asm.S,v 1.1 2001/07/08 23:37:53 rjs Exp $ */ - -/*- - * Copyright (c) 1997 Mark Brinicombe. - * Copyright (c) 1997 Causality Limited. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Mark Brinicombe. - * 4. The name of the company nor the name of the author may be used to - * endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include <machine/asm.h> -__FBSDID("$FreeBSD$"); - -/* - * bus_space I/O functions for sa11x0 - */ - -/* - * read single - */ - -ENTRY(sa11x0_bs_r_1) - ldrb r0, [r1, r2] - mov pc, lr - -ENTRY(sa11x0_bs_r_2) - ldrh r0, [r1, r2] - mov pc, lr - -ENTRY(sa11x0_bs_r_4) - ldr r0, [r1, r2] - mov pc, lr - -/* - * write single - */ - -ENTRY(sa11x0_bs_w_1) - strb r3, [r1, r2] - mov pc, lr - -ENTRY(sa11x0_bs_w_2) - strh r3, [r1, r2] - mov pc, lr - -ENTRY(sa11x0_bs_w_4) - str r3, [r1, r2] - mov pc, lr - - -/* - * read multiple - */ - -ENTRY(sa11x0_bs_rm_1) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_rm_1_loop: - ldrb r1, [r0] - subs r2, r2, #0x00000001 - strb r1, [r3], #0x0001 - bgt sa11x0_bs_rm_1_loop - - mov pc, lr - -ENTRY(sa11x0_bs_rm_2) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - - tst r2, #0x00000007 - tsteq r3, #0x00000003 - beq sa11x0_bs_rm_2_fast - -sa11x0_bs_rm_2_loop: - ldrh r1, [r0] - subs r2, r2, #0x00000001 - strh r1, [r3], #0x0002 - bgt sa11x0_bs_rm_2_loop - - mov pc, lr - -sa11x0_bs_rm_2_fast: - stmfd sp!, {r4, r5, lr} - -sa11x0_bs_rm_2_fastloop: - ldrh r1, [r0] - ldrh lr, [r0] - orr r1, r1, lr, lsl #16 - - ldrh r4, [r0] - ldrh lr, [r0] - orr r4, r4, lr, lsl #16 - - ldrh r5, [r0] - ldrh lr, [r0] - orr r5, r5, lr, lsl #16 - - ldrh ip, [r0] - ldrh lr, [r0] - orr ip, ip, lr, lsl #16 - - stmia r3!, {r1, r4, r5, ip} - subs r2, r2, #8 - bgt sa11x0_bs_rm_2_fastloop - - ldmfd sp!, {r4, r5, pc} - - -ENTRY(sa11x0_bs_rm_4) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_rm_4_loop: - ldr r1, [r0] - subs r2, r2, #0x00000001 - str r1, [r3], #0x0004 - bgt sa11x0_bs_rm_4_loop - - mov pc, lr - -/* - * write multiple - */ - -ENTRY(sa11x0_bs_wm_1) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_wm_1_loop: - ldrb r1, [r3], #0x0001 - subs r2, r2, #0x00000001 - strb r1, [r0] - bgt sa11x0_wm_1_loop - - mov pc, lr - -ENTRY(sa11x0_bs_wm_2) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_wm_2_loop: - ldrh r1, [r3], #0x0002 - subs r2, r2, #0x00000001 - strh r1, [r0] - bgt sa11x0_bs_wm_2_loop - - mov pc, lr - -ENTRY(sa11x0_bs_wm_4) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_wm_4_loop: - ldr r1, [r3], #0x0004 - subs r2, r2, #0x00000001 - str r1, [r0] - bgt sa11x0_bs_wm_4_loop - - mov pc, lr - -/* - * read region - */ - -ENTRY(sa11x0_bs_rr_2) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_rr_2_loop: - ldrh r1, [r0], #0x0002 - strh r1, [r3], #0x0002 - subs r2, r2, #0x00000001 - bgt sa11x0_bs_rr_2_loop - - mov pc, lr - -/* - * write region - */ - -ENTRY(sa11x0_bs_wr_2) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_wr_2_loop: - ldrh r1, [r3], #0x0002 - strh r1, [r0], #0x0002 - subs r2, r2, #0x00000001 - bgt sa11x0_bs_wr_2_loop - - mov pc, lr - -/* - * set regiuon - */ - -ENTRY(sa11x0_bs_sr_2) - add r0, r1, r2 - ldr r2, [sp, #0] - cmp r2, #0x00000000 - movle pc, lr - -sa11x0_bs_sr_2_loop: - strh r3, [r0], #0x0002 - subs r2, r2, #0x00000001 - bgt sa11x0_bs_sr_2_loop - - mov pc, lr - -/* - * copy region - */ - -ENTRY(sa11x0_bs_c_2) - add r0, r1, r2 - ldr r2, [sp, #0] - add r1, r2, r3 - ldr r2, [sp, #4] - cmp r2, #0x00000000 - movle pc, lr - - cmp r0, r1 - blt sa11x0_bs_c_2_backwards - -sa11x0_bs_cf_2_loop: - ldrh r3, [r0], #0x0002 - strh r3, [r1], #0x0002 - subs r2, r2, #0x00000001 - bgt sa11x0_bs_cf_2_loop - - mov pc, lr - -sa11x0_bs_c_2_backwards: - add r0, r0, r2, lsl #1 - add r1, r1, r2, lsl #1 - sub r0, r0, #2 - sub r1, r1, #2 - -sa11x0_bs_cb_2_loop: - ldrh r3, [r0], #-2 - strh r3, [r1], #-2 - subs r2, r2, #1 - bne sa11x0_bs_cb_2_loop - - mov pc, lr - -/* end of sa11x0_io_asm.S */ diff --git a/sys/arm/sa11x0/sa11x0_irq.S b/sys/arm/sa11x0/sa11x0_irq.S deleted file mode 100644 index 4494f6a..0000000 --- a/sys/arm/sa11x0/sa11x0_irq.S +++ /dev/null @@ -1,133 +0,0 @@ -/* $NetBSD: sa11x0_irq.S,v 1.5 2003/03/31 19:52:35 chris Exp $ */ - -/*- - * Copyright (c) 1998 Mark Brinicombe. - * Copyright (c) 1998 Causality Limited - * All rights reserved. - * - * This code is derived from software contributed to the NetBSD Foundation - * by IWAMOTO Toshihiro. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "assym.s" -#include <machine/asm.h> -#include <machine/armreg.h> -#include <machine/asmacros.h> -#include <arm/sa11x0/sa11x0_reg.h> -__FBSDID("$FreeBSD$"); -Lcurrent_intr_depth: - .word _C_LABEL(current_intr_depth) - - .globl _C_LABEL(saipic_base) -_C_LABEL(saipic_base): - .word 0x00000000 - -#ifdef INTR_DEBUG -Ldbg_str: - .asciz "irq_entry %x %x\n" -#endif - -AST_LOCALS -/* - * Regsister usage - * - * r6 - Address of current handler - * r7 - Pointer to handler pointer list - * r8 - Current IRQ requests. - * r9 - Used to count through possible IRQ bits. - * r10 - Base address of SAIP - */ - -ASENTRY_NP(irq_entry) - sub lr, lr, #0x00000004 /* Adjust the lr */ - - PUSHFRAMEINSVC /* Push an interrupt frame */ - - /* Load r8 with the SAIPIC interrupt requests */ - - ldr r10, _C_LABEL(saipic_base) - ldr r8, [r10, #(SAIPIC_IP)] /* Load IRQ pending register */ - -#ifdef INTR_DEBUG - ldr r2, [r10, #(SAIPIC_MR)] - adr r0, Ldbg_str - mov r1, r8 - bl _C_LABEL(printf) -#endif - /* - * Note that we have entered the IRQ handler. - * We are in SVC mode so we cannot use the processor mode - * to determine if we are in an IRQ. Instead we will count the - * each time the interrupt handler is nested. - */ - - ldr r0, Lcurrent_intr_depth - ldr r1, [r0] - add r1, r1, #1 - str r1, [r0] - - mov r0, sp - mov r1, r8 - bl _C_LABEL(arm_handler_execute) - -#ifdef INTR_DEBUG - adr r0, Ldbg_str - mov r1, #3 - ldr r2, [r10, #(SAIPIC_MR)] - bl _C_LABEL(printf) -#endif - - /* Decrement the nest count */ - ldr r0, Lcurrent_intr_depth - ldr r1, [r0] - sub r1, r1, #1 - str r1, [r0] - - DO_AST - PULLFRAMEFROMSVCANDEXIT - - /* NOT REACHED */ - b . - 8 -Lcnt: - .word _C_LABEL(cnt) - -ENTRY(sa11x0_activateirqs) - ldr r0, _C_LABEL(saipic_base) - mov r1, #0xffffffff - str r1, [r0, #(SAIPIC_MR)] - mov pc, lr - - .global _C_LABEL(intrnames), _C_LABEL(sintrnames) -_C_LABEL(intrnames): -_C_LABEL(sintrnames): - .int 0 - - .globl _C_LABEL(intrcnt), _C_LABEL(sintrcnt) - -_C_LABEL(intrcnt): - .space ICU_LEN*4 /* XXX Should be linked to number of interrupts */ - -_C_LABEL(sintrcnt): - .word ICU_LEN*4 diff --git a/sys/arm/sa11x0/sa11x0_irqhandler.c b/sys/arm/sa11x0/sa11x0_irqhandler.c deleted file mode 100644 index 30446fa..0000000 --- a/sys/arm/sa11x0/sa11x0_irqhandler.c +++ /dev/null @@ -1,143 +0,0 @@ -/* $NetBSD: sa11x0_irqhandler.c,v 1.5 2003/08/07 16:26:54 agc Exp $ */ - -/*- - * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to the NetBSD Foundation - * by IWAMOTO Toshihiro. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace - * Simulation Facility, NASA Ames Research Center. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/*- - * Copyright (c) 1991 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from software contributed to Berkeley by - * William Jolitz. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)isa.c 7.2 (Berkeley) 5/13/91 - */ - - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/kernel.h> -#include <sys/systm.h> -#include <sys/syslog.h> -#include <sys/malloc.h> -#include <sys/bus.h> -#include <sys/interrupt.h> -#include <sys/rman.h> - -#include <vm/vm.h> -#include <vm/vm_extern.h> - -#include <arm/sa11x0/sa11x0_reg.h> -#include <arm/sa11x0/sa11x0_var.h> - -#include <machine/cpu.h> -#include <machine/intr.h> - -#define NIRQS 0x20 -struct intrhand *irqhandlers[NIRQS]; - -int current_intr_depth; -extern struct sa11x0_softc *sa11x0_softc; - - -static uint32_t sa11x0_irq_mask = 0xfffffff; - -extern vm_offset_t saipic_base; - -int -arm_get_next_irq(int last __unused) -{ - int irq; - - if ((irq = (bus_space_read_4(sa11x0_softc->sc_iot, sa11x0_softc->sc_ioh, - SAIPIC_IP) & - sa11x0_irq_mask)) != 0) - return (ffs(irq) - 1); - return (-1); -} - -void -arm_mask_irq(uintptr_t irq) -{ - - sa11x0_irq_mask &= ~(1 << irq); - __asm __volatile("str %0, [%1, #0x04]" /* SAIPIC_MR */ - : : "r" (sa11x0_irq_mask), "r" (saipic_base)); -} - -void -arm_unmask_irq(uintptr_t irq) -{ - - sa11x0_irq_mask |= (1 << irq); - __asm __volatile("str %0, [%1, #0x04]" /* SAIPIC_MR */ - : : "r" (sa11x0_irq_mask), "r" (saipic_base)); -} - -void stray_irqhandler(void *); - - - -void -stray_irqhandler(void *p) -{ - - printf("stray interrupt %p\n", p); -} -/* End of irqhandler.c */ diff --git a/sys/arm/sa11x0/sa11x0_ost.c b/sys/arm/sa11x0/sa11x0_ost.c deleted file mode 100644 index f8b2a6b..0000000 --- a/sys/arm/sa11x0/sa11x0_ost.c +++ /dev/null @@ -1,355 +0,0 @@ -/* $NetBSD: sa11x0_ost.c,v 1.11 2003/07/15 00:24:51 lukem Exp $ */ - -/*- - * Copyright (c) 1997 Mark Brinicombe. - * Copyright (c) 1997 Causality Limited. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by IWAMOTO Toshihiro and Ichiro FUKUHARA. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the NetBSD - * Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/time.h> -#include <sys/bus.h> -#include <sys/module.h> - -#include <machine/bus.h> -#include <sys/rman.h> -#include <machine/resource.h> -#include <machine/intr.h> - -#include <machine/cpu.h> -#include <machine/cpufunc.h> -#include <machine/frame.h> - -#include <arm/sa11x0/sa11x0_reg.h> -#include <arm/sa11x0/sa11x0_var.h> -#include <arm/sa11x0/sa11x0_ostreg.h> - -static int saost_probe(device_t); -static int saost_attach(device_t); - -int gettick(void); -static int clockintr(void *); -#if 0 -static int statintr(void *); -#endif -void rtcinit(void); - -#if 0 -static struct mtx clock_lock; -#endif - -struct saost_softc { - device_t sc_dev; - bus_addr_t sc_baseaddr; - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - - u_int32_t sc_clock_count; - u_int32_t sc_statclock_count; - u_int32_t sc_statclock_step; -}; - -static struct saost_softc *saost_sc = NULL; - -#define TIMER_FREQUENCY 3686400 /* 3.6864MHz */ -#define TICKS_PER_MICROSECOND (TIMER_FREQUENCY/1000000) - -#ifndef STATHZ -#define STATHZ 64 -#endif - -static device_method_t saost_methods[] = { - DEVMETHOD(device_probe, saost_probe), - DEVMETHOD(device_attach, saost_attach), - {0, 0}, -}; - -static driver_t saost_driver = { - "saost", - saost_methods, - sizeof(struct saost_softc), -}; -static devclass_t saost_devclass; - -DRIVER_MODULE(saost, saip, saost_driver, saost_devclass, 0, 0); -static int -saost_probe(device_t dev) -{ - - return (0); -} - -static int -saost_attach(device_t dev) -{ - struct saost_softc *sc = device_get_softc(dev); - struct sa11x0_softc *sa = device_get_softc(device_get_parent(dev)); - - sc->sc_dev = dev; - sc->sc_iot = sa->sc_iot; - sc->sc_baseaddr = 0x90000000; - - saost_sc = sc; - - if(bus_space_map(sa->sc_iot, sc->sc_baseaddr, 8, 0, - &sc->sc_ioh)) - panic("%s: Cannot map registers", device_get_name(dev)); - - /* disable all channel and clear interrupt status */ - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_IR, 0); - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_SR, 0xf); - return (0); - -} - -static int -clockintr(arg) - void *arg; -{ - struct trapframe *frame = arg; - u_int32_t oscr, nextmatch, oldmatch; - int s; - -#if 0 - mtx_lock_spin(&clock_lock); -#endif - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_SR, 1); - - /* schedule next clock intr */ - oldmatch = saost_sc->sc_clock_count; - nextmatch = oldmatch + TIMER_FREQUENCY / hz; - - oscr = bus_space_read_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_CR); - - if ((nextmatch > oldmatch && - (oscr > nextmatch || oscr < oldmatch)) || - (nextmatch < oldmatch && oscr > nextmatch && oscr < oldmatch)) { - /* - * we couldn't set the matching register in time. - * just set it to some value so that next interrupt happens. - * XXX is it possible to compansate lost interrupts? - */ - - s = splhigh(); - oscr = bus_space_read_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_CR); - nextmatch = oscr + 10; - splx(s); - } - saost_sc->sc_clock_count = nextmatch; - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_MR0, - nextmatch); - hardclock(TRAPF_USERMODE(frame), TRAPF_PC(frame)); -#if 0 - mtx_unlock_spin(&clock_lock); -#endif - return (FILTER_HANDLED); -} - -#if 0 -static int -statintr(arg) - void *arg; -{ - struct trapframe *frame = arg; - u_int32_t oscr, nextmatch, oldmatch; - int s; - - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_SR, 2); - - /* schedule next clock intr */ - oldmatch = saost_sc->sc_statclock_count; - nextmatch = oldmatch + saost_sc->sc_statclock_step; - - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_MR1, - nextmatch); - oscr = bus_space_read_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_CR); - - if ((nextmatch > oldmatch && - (oscr > nextmatch || oscr < oldmatch)) || - (nextmatch < oldmatch && oscr > nextmatch && oscr < oldmatch)) { - /* - * we couldn't set the matching register in time. - * just set it to some value so that next interrupt happens. - * XXX is it possible to compansate lost interrupts? - */ - - s = splhigh(); - oscr = bus_space_read_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_CR); - nextmatch = oscr + 10; - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_MR1, nextmatch); - splx(s); - } - - saost_sc->sc_statclock_count = nextmatch; - statclock(TRAPF_USERMODE(frame)); - return (FILTER_HANDLED); -} -#endif - -#if 0 -void -setstatclockrate(int hz) -{ - u_int32_t count; - - saost_sc->sc_statclock_step = TIMER_FREQUENCY / hz; - count = bus_space_read_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_CR); - count += saost_sc->sc_statclock_step; - saost_sc->sc_statclock_count = count; - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_MR1, count); -} -#endif -void -cpu_initclocks() -{ - device_t dev = saost_sc->sc_dev; - - stathz = STATHZ; - profhz = stathz; -#if 0 - mtx_init(&clock_lock, "SA1110 Clock locked", NULL, MTX_SPIN); -#endif - saost_sc->sc_statclock_step = TIMER_FREQUENCY / stathz; - struct resource *irq1, *irq2; - int rid = 0; - void *ih1/*, *ih2 */; - - printf("clock: hz=%d stathz = %d\n", hz, stathz); - - /* Use the channels 0 and 1 for hardclock and statclock, respectively */ - saost_sc->sc_clock_count = TIMER_FREQUENCY / hz; - saost_sc->sc_statclock_count = TIMER_FREQUENCY / stathz; - - irq1 = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, - ~0, 1, RF_ACTIVE); - rid = 1; - irq2 = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1, - RF_ACTIVE); - bus_setup_intr(dev, irq1, INTR_TYPE_CLK, clockintr, NULL, NULL, - &ih1); -#if 0 - bus_setup_intr(dev, irq2, INTR_TYPE_CLK, statintr, NULL, NULL, - ,&ih2); -#endif - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_SR, 0xf); - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_IR, 3); - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_MR0, - saost_sc->sc_clock_count); -#if 0 - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_MR1, - 0); -#endif - /* Zero the counter value */ - bus_space_write_4(saost_sc->sc_iot, saost_sc->sc_ioh, SAOST_CR, 0); -} - -int -gettick() -{ - int counter; - u_int savedints; - savedints = disable_interrupts(I32_bit); - - counter = bus_space_read_4(saost_sc->sc_iot, saost_sc->sc_ioh, - SAOST_CR); - - restore_interrupts(savedints); - return counter; -} - -void -DELAY(usecs) - int usecs; -{ - u_int32_t tick, otick, delta; - int j, csec, usec; - - csec = usecs / 10000; - usec = usecs % 10000; - - usecs = (TIMER_FREQUENCY / 100) * csec - + (TIMER_FREQUENCY / 100) * usec / 10000; - - if (! saost_sc) { - /* clock isn't initialized yet */ - for(; usecs > 0; usecs--) - for(j = 100; j > 0; j--) - ; - return; - } - -#if 0 - mtx_lock_spin(&clock_lock); -#endif - otick = gettick(); - - while (1) { - for(j = 100; j > 0; j--) - ; - tick = gettick(); - delta = tick - otick; - if (delta > usecs) { - break; - } - usecs -= delta; - otick = tick; - } -#if 0 - mtx_unlock_spin(&clock_lock); -#endif -} - -void -cpu_startprofclock(void) -{ - printf("STARTPROFCLOCK\n"); -} - -void -cpu_stopprofclock(void) -{ -} diff --git a/sys/arm/sa11x0/sa11x0_ostreg.h b/sys/arm/sa11x0/sa11x0_ostreg.h deleted file mode 100644 index 26be03a..0000000 --- a/sys/arm/sa11x0/sa11x0_ostreg.h +++ /dev/null @@ -1,76 +0,0 @@ -/* $NetBSD: sa11x0_ostreg.h,v 1.1 2001/07/08 23:37:53 rjs Exp $ */ - -/*- - * Copyright (c) 2001 The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Ichiro FUKUHARA. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -/* - * SA-11x0 OS Timer Register - */ - -/* OS Timer Match Register */ -#define SAOST_MR0 0x00 -#define SAOST_MR1 0x04 -#define SAOST_MR2 0x08 -#define SAOST_MR3 0x0C - -/* OS Timer Count Register */ -#define SAOST_CR 0x10 - -/* OS Timer Status Register */ -#define SAOST_SR 0x14 -#define SR_CH0 (1<<0) -#define SR_CH1 (1<<1) -#define SR_CH2 (1<<2) -#define SR_CH3 (1<<3) - -/* OS Timer Watchdog Match Enable Register */ -#define SAOST_WR 0x18 - -/* OS Timer Interrupt Enable Register */ -#define SAOST_IR 0x1C - -/* - * SA-1110 Real Time Clock - */ - -/* RTC Alarm Register */ -#define SARTC_AR 0x00 - -/* RTC Counter Register */ -#define SARTC_CR 0x04 - -/* RTC Trim Register */ -#define SARTC_TR 0x08 - -/* RTC Status Register */ -#define SARTC_SR 0x0C - -/* end of sa11x0_ostreg.h */ diff --git a/sys/arm/sa11x0/sa11x0_ppcreg.h b/sys/arm/sa11x0/sa11x0_ppcreg.h deleted file mode 100644 index 2c17150..0000000 --- a/sys/arm/sa11x0/sa11x0_ppcreg.h +++ /dev/null @@ -1,60 +0,0 @@ -/* $NetBSD: sa11x0_ppcreg.h,v 1.2 2001/07/30 12:19:04 rjs Exp $ */ - -/*- - * Copyright (c) 2001, The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by IWAMOTO Toshihiro. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -/* SA11[01]0 PPC (peripheral pin controller) */ - -/* size of I/O space */ -#define SAPPC_NPORTS 13 - -#define SAPPC_PDR 0x00 /* pin direction register */ - -#define SAPPC_PSR 0x04 /* pin state register */ - -#define SAPPC_PAR 0x08 /* pin assignment register */ -#define PAR_UPR 0x01000 /* UART pin assignment */ -#define PAR_SPR 0x40000 /* SSP pin assignment */ - -#define SAPPC_SDR 0x0C /* sleep mode direction register */ - -#define SAPPC_PFR 0x10 /* pin flag register */ -#define PFR_LCD 0x00001 /* LCD controller flag */ -#define PFR_SP1TX 0x01000 /* serial port 1 Tx flag */ -#define PFR_SP1RX 0x02000 /* serial port 1 Rx flag */ -#define PFR_SP2TX 0x04000 /* serial port 2 Tx flag */ -#define PFR_SP2RX 0x08000 /* serial port 2 Rx flag */ -#define PFR_SP3TX 0x10000 /* serial port 3 Tx flag */ -#define PFR_SP3RX 0x20000 /* serial port 3 Rx flag */ -#define PFR_SP4 0x40000 /* serial port 4 flag */ - -/* MCP control register 1 */ -#define SAMCP_CR1 0x30 /* MCP control register 1 */ diff --git a/sys/arm/sa11x0/sa11x0_reg.h b/sys/arm/sa11x0/sa11x0_reg.h deleted file mode 100644 index 8f74723..0000000 --- a/sys/arm/sa11x0/sa11x0_reg.h +++ /dev/null @@ -1,76 +0,0 @@ -/* $NetBSD: sa11x0_reg.h,v 1.4 2002/07/19 18:26:56 ichiro Exp $ */ - -/*- - * Copyright (c) 2001 The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by IWAMOTO Toshihiro. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -#ifndef _ARM_SA11X0_REG_H_ -#define _ARM_SA11X0_REG_H_ - -/* Physical register base addresses */ -#define SAOST_BASE 0x90000000 /* OS Timer */ -#define SARTC_BASE 0x90010000 /* Real-Time Clock */ -#define SAPMR_BASE 0x90020000 /* Power Manager */ -#define SARCR_BASE 0x90030000 /* Reset Controller */ -#define SAGPIO_BASE 0x90040000 /* GPIO */ -#define SAIPIC_BASE 0x90050000 /* Interrupt Controller */ -#define SAIPIC_SIZE 0x24 -#define SAPPC_BASE 0x90060000 /* Peripheral Pin Controller */ -#define SAUDC_BASE 0x80000000 /* USB Device Controller*/ -#define SACOM1_BASE 0x80010000 /* GPCLK/UART 1 */ -#define SACOM1_SIZE 0x24 -#define SACOM3_HW_BASE 0x80050000 /* UART 3 */ -#define SAMCP_BASE 0x80060000 /* MCP Controller */ -#define SASSP_BASE 0x80070000 /* Synchronous serial port */ - -#define SADMAC_BASE 0xB0000000 /* DMA Controller */ -#define SALCD_BASE 0xB0100000 /* LCD */ - -/* Register base virtual addresses mapped by initarm() */ -#define SACOM1_VBASE 0xd000d000 - -/* Interrupt controller registers */ -#define SAIPIC_NPORTS 9 -#define SAIPIC_IP 0x00 /* IRQ pending register */ -#define SAIPIC_MR 0x04 /* Mask register */ -#define SAIPIC_LR 0x08 /* Level register */ -#define SAIPIC_FP 0x10 /* FIQ pending register */ -#define SAIPIC_PR 0x20 /* Pending register */ -#define SAIPIC_CR 0x0C /* Control register */ - -/* width of interrupt controller */ -#define ICU_LEN 32 - -/* Reset controller registers */ -#define SARCR_RSRR 0x0 /* Software reset register */ -#define SARCR_RCSR 0x4 /* Reset status register */ -#define SARCR_TUCR 0x8 /* Test Unit control reg */ - -#endif /* _ARM_SA11X0_REG_H_ */ diff --git a/sys/arm/sa11x0/sa11x0_var.h b/sys/arm/sa11x0/sa11x0_var.h deleted file mode 100644 index b1ca7f9..0000000 --- a/sys/arm/sa11x0/sa11x0_var.h +++ /dev/null @@ -1,65 +0,0 @@ -/* $NetBSD: sa11x0_var.h,v 1.4 2003/04/14 14:18:41 rjs Exp $ */ - -/*- - * Copyright (c) 2001, The NetBSD Foundation, Inc. All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by IWAMOTO Toshihiro and Ichiro FUKUHARA. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - * - */ - -#ifndef _SA11X0_VAR_H -#define _SA11X0_VAR_H - -#include <sys/conf.h> - -#include <sys/bus.h> -#include <machine/bus.h> -#include <sys/rman.h> - -struct sa11x0_softc { - device_t sc_dev; - bus_space_tag_t sc_iot; - bus_space_handle_t sc_ioh; - bus_space_handle_t sc_gpioh; - bus_space_handle_t sc_ppch; - bus_space_handle_t sc_dmach; - bus_space_handle_t sc_reseth; - u_int32_t sc_intrmask; - struct rman sa11x0_rman; -}; - -/* Attach args all devices */ - -typedef void *sa11x0_chipset_tag_t; - -extern struct bus_space sa11x0_bs_tag; - -void *sa11x0_intr_establish(sa11x0_chipset_tag_t, int, int, int, - int (*)(void *), void *); -void sa11x0_intr_disestablish(sa11x0_chipset_tag_t, void *); - -#endif /* _SA11X0_VAR_H */ diff --git a/sys/arm/sa11x0/std.sa11x0 b/sys/arm/sa11x0/std.sa11x0 deleted file mode 100644 index ed438c5..0000000 --- a/sys/arm/sa11x0/std.sa11x0 +++ /dev/null @@ -1,9 +0,0 @@ -#StrongARM SA11x0 common options -#$FreeBSD$ -files "../sa11x0/files.sa11x0" -cpu CPU_SA1100 -cpu CPU_SA1110 -machine arm -makeoptions KERNPHYSADDR=0xc0000000 -makeoptions KERNVIRTADDR=0xc0000000 -options NO_EVENTTIMERS diff --git a/sys/arm/sa11x0/uart_bus_sa1110.c b/sys/arm/sa11x0/uart_bus_sa1110.c deleted file mode 100644 index fb8b0d6..0000000 --- a/sys/arm/sa11x0/uart_bus_sa1110.c +++ /dev/null @@ -1,80 +0,0 @@ -/*- - * Copyright (c) 2004 Olivier Houchard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/bus.h> -#include <sys/conf.h> -#include <sys/kernel.h> -#include <sys/module.h> -#include <machine/bus.h> -#include <sys/rman.h> -#include <machine/resource.h> - -#include <dev/pci/pcivar.h> - -#include <dev/uart/uart.h> -#include <dev/uart/uart_bus.h> -#include <dev/uart/uart_cpu.h> -#include <arm/sa11x0/uart_dev_sa1110.h> - -#include "uart_if.h" - -static int uart_sa1110_probe(device_t dev); - -extern struct uart_class uart_sa1110_class; - -static device_method_t uart_sa1110_methods[] = { - /* Device interface */ - DEVMETHOD(device_probe, uart_sa1110_probe), - DEVMETHOD(device_attach, uart_bus_attach), - DEVMETHOD(device_detach, uart_bus_detach), - { 0, 0 } -}; - -static driver_t uart_sa1110_driver = { - uart_driver_name, - uart_sa1110_methods, - sizeof(struct uart_softc), -}; - -extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs; -static int -uart_sa1110_probe(device_t dev) -{ - struct uart_softc *sc; - - sc = device_get_softc(dev); - sc->sc_sysdev = SLIST_FIRST(&uart_sysdevs); - sc->sc_class = &uart_sa1110_class; - bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); - return(uart_bus_probe(dev, 0, 0, 0, 0)); - return (0); -} - - -DRIVER_MODULE(uart, saip, uart_sa1110_driver, uart_devclass, 0, 0); diff --git a/sys/arm/sa11x0/uart_cpu_sa1110.c b/sys/arm/sa11x0/uart_cpu_sa1110.c deleted file mode 100644 index 5d6a3c3..0000000 --- a/sys/arm/sa11x0/uart_cpu_sa1110.c +++ /dev/null @@ -1,73 +0,0 @@ -/*- - * Copyright (c) 2003 Marcel Moolenaar - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/bus.h> -#include <sys/cons.h> -#include <machine/bus.h> - -#include <dev/uart/uart.h> -#include <dev/uart/uart_cpu.h> - -#include <arm/sa11x0/sa11x0_reg.h> -#include <arm/sa11x0/sa11x0_var.h> - -bus_space_tag_t uart_bus_space_io; -bus_space_tag_t uart_bus_space_mem; - -extern struct uart_class uart_sa1110_class; - -vm_offset_t sa1110_uart_vaddr; - -int -uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) -{ - return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); -} - -int -uart_cpu_getdev(int devtype, struct uart_devinfo *di) -{ - - di->ops = uart_getops(&uart_sa1110_class); - di->bas.chan = 0; - di->bas.bst = &sa11x0_bs_tag; - di->bas.bsh = sa1110_uart_vaddr; - di->bas.regshft = 0; - di->bas.rclk = 0; - di->baudrate = 9600; - di->databits = 8; - di->stopbits = 1; - di->parity = UART_PARITY_NONE; - uart_bus_space_io = &sa11x0_bs_tag; - uart_bus_space_mem = NULL; - - return (0); -} diff --git a/sys/arm/sa11x0/uart_dev_sa1110.c b/sys/arm/sa11x0/uart_dev_sa1110.c deleted file mode 100644 index 1df1009..0000000 --- a/sys/arm/sa11x0/uart_dev_sa1110.c +++ /dev/null @@ -1,307 +0,0 @@ -/*- - * Copyright (c) 2003 Marcel Moolenaar - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/bus.h> -#include <sys/conf.h> -#include <sys/cons.h> -#include <sys/tty.h> -#include <machine/bus.h> - -#include <dev/uart/uart.h> -#include <dev/uart/uart_cpu.h> -#include <dev/uart/uart_bus.h> -#include <arm/sa11x0/sa11x0_reg.h> -#include <arm/sa11x0/uart_dev_sa1110.h> - -#include "uart_if.h" - -#define DEFAULT_RCLK 3686400 - -/* - * Low-level UART interface. - */ -static int sa1110_probe(struct uart_bas *bas); -static void sa1110_init(struct uart_bas *bas, int, int, int, int); -static void sa1110_term(struct uart_bas *bas); -static void sa1110_putc(struct uart_bas *bas, int); -static int sa1110_rxready(struct uart_bas *bas); -static int sa1110_getc(struct uart_bas *bas, struct mtx *mtx); - -extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs; - -static struct uart_ops uart_sa1110_ops = { - .probe = sa1110_probe, - .init = sa1110_init, - .term = sa1110_term, - .putc = sa1110_putc, - .rxready = sa1110_rxready, - .getc = sa1110_getc, -}; - -static int -sa1110_probe(struct uart_bas *bas) -{ - return (0); -} - -static void -sa1110_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, - int parity) -{ - int brd; - - if (bas->rclk == 0) - bas->rclk = DEFAULT_RCLK; - while (uart_getreg(bas, SACOM_SR1) & SR1_TBY); - uart_setreg(bas, SACOM_CR3, 0); - brd = SACOMSPEED(baudrate); - uart_setreg(bas, SACOM_CR1, brd >> 8); - uart_setreg(bas, SACOM_CR2, brd & 0xff); - uart_setreg(bas, SACOM_CR3, CR3_RXE | CR3_TXE); -} - -static void -sa1110_term(struct uart_bas *bas) -{ - /* XXX */ -} - -static void -sa1110_putc(struct uart_bas *bas, int c) -{ - while (!(uart_getreg(bas, SACOM_SR1) & SR1_TNF)); - uart_setreg(bas, SACOM_DR, c); -} - -static int -sa1110_rxready(struct uart_bas *bas) -{ - - return ((uart_getreg(bas, SACOM_SR1) & SR1_RNE) != 0 ? 1 : 0); -} - -static int -sa1110_getc(struct uart_bas *bas, struct mtx *mtx) -{ - int c; - - while (!(uart_getreg(bas, SACOM_SR1) & SR1_RNE)) { - u_int32_t sr0; - - sr0 = uart_getreg(bas, SACOM_SR0); - if (ISSET(sr0, SR0_RBB)) - uart_setreg(bas, SACOM_SR0, SR0_RBB); - if (ISSET(sr0, SR0_REB)) - uart_setreg(bas, SACOM_SR0, SR0_REB); - } - c = uart_getreg(bas, SACOM_DR); - c &= 0xff; - return (c); -} - -static int sa1110_bus_probe(struct uart_softc *sc); -static int sa1110_bus_attach(struct uart_softc *sc); -static int sa1110_bus_flush(struct uart_softc *, int); -static int sa1110_bus_getsig(struct uart_softc *); -static int sa1110_bus_ioctl(struct uart_softc *, int, intptr_t); -static int sa1110_bus_ipend(struct uart_softc *); -static int sa1110_bus_param(struct uart_softc *, int, int, int, int); -static int sa1110_bus_receive(struct uart_softc *); -static int sa1110_bus_setsig(struct uart_softc *, int); -static int sa1110_bus_transmit(struct uart_softc *); -static void sa1110_bus_grab(struct uart_softc *); -static void sa1110_bus_ungrab(struct uart_softc *); - -static kobj_method_t sa1110_methods[] = { - KOBJMETHOD(uart_probe, sa1110_bus_probe), - KOBJMETHOD(uart_attach, sa1110_bus_attach), - KOBJMETHOD(uart_flush, sa1110_bus_flush), - KOBJMETHOD(uart_getsig, sa1110_bus_getsig), - KOBJMETHOD(uart_ioctl, sa1110_bus_ioctl), - KOBJMETHOD(uart_ipend, sa1110_bus_ipend), - KOBJMETHOD(uart_param, sa1110_bus_param), - KOBJMETHOD(uart_receive, sa1110_bus_receive), - KOBJMETHOD(uart_setsig, sa1110_bus_setsig), - KOBJMETHOD(uart_transmit, sa1110_bus_transmit), - KOBJMETHOD(uart_grab, sa1110_bus_grab), - KOBJMETHOD(uart_ungrab, sa1110_bus_ungrab), - - {0, 0 } -}; - -int -sa1110_bus_probe(struct uart_softc *sc) -{ - sc->sc_txfifosz = 3; - sc->sc_rxfifosz = 1; - return (0); -} - -static int -sa1110_bus_attach(struct uart_softc *sc) -{ - bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); - - sc->sc_hwiflow = 0; - uart_setreg(&sc->sc_bas, SACOM_CR3, CR3_RXE | CR3_TXE | CR3_RIE | CR3_TIE); - return (0); -} -static int -sa1110_bus_transmit(struct uart_softc *sc) -{ - int i; -#if 0 - int sr = uart_getreg(&sc->sc_bas, SACOM_SR0); - - while (!(uart_getreg(&sc->sc_bas, SACOM_CR3) & CR3_TIE)) - uart_setreg(&sc->sc_bas, SACOM_CR3, - uart_getreg(&sc->sc_bas, SACOM_CR3) | CR3_TIE); -#endif - - sc->sc_txbusy = 1; - uart_setreg(&sc->sc_bas, SACOM_CR3, uart_getreg(&sc->sc_bas, SACOM_CR3) - | CR3_TIE); - for (i = 0; i < sc->sc_txdatasz; i++) { - while (!(uart_getreg(&sc->sc_bas, SACOM_SR1) & SR1_TNF)); - - uart_setreg(&sc->sc_bas, SACOM_DR, sc->sc_txbuf[i]); - uart_barrier(&sc->sc_bas); - } -#if 0 - sr = uart_getreg(&sc->sc_bas, SACOM_SR0); -#endif - - return (0); -} -static int -sa1110_bus_setsig(struct uart_softc *sc, int sig) -{ - return (0); -} -static int -sa1110_bus_receive(struct uart_softc *sc) -{ - -#if 0 - while (!(uart_getreg(&sc->sc_bas, SACOM_SR1) & SR1_RNE)) { - u_int32_t sr0; - - sr0 = uart_getreg(&sc->sc_bas, SACOM_SR0); - if (ISSET(sr0, SR0_RBB)) - uart_setreg(&sc->sc_bas, SACOM_SR0, SR0_RBB); - if (ISSET(sr0, SR0_REB)) - uart_setreg(&sc->sc_bas, SACOM_SR0, SR0_REB); - } -#endif - - uart_setreg(&sc->sc_bas, SACOM_CR3, uart_getreg(&sc->sc_bas, SACOM_CR3) - | CR3_RIE); - uart_rx_put(sc, uart_getreg(&sc->sc_bas, SACOM_DR)); - return (0); -} -static int -sa1110_bus_param(struct uart_softc *sc, int baudrate, int databits, - int stopbits, int parity) -{ - int brd; - - if (baudrate > 0) { - brd = SACOMSPEED(baudrate); - uart_setreg(&sc->sc_bas, SACOM_CR1, brd >> 8); - uart_setreg(&sc->sc_bas, SACOM_CR2, brd & 0xff); - } - return (0); -} -static int -sa1110_bus_ipend(struct uart_softc *sc) -{ - int sr = uart_getreg(&sc->sc_bas, SACOM_SR0); - int ipend = 0; - int mask = CR3_RIE | CR3_TIE; - if (sr & 1) { - if (uart_getreg(&sc->sc_bas, SACOM_CR3) & CR3_TIE) - ipend |= SER_INT_TXIDLE; - mask &= ~CR3_TIE; - } - if (sr & 4) { - if (uart_getreg(&sc->sc_bas, SACOM_CR3) & CR3_RIE) - ipend |= SER_INT_RXREADY; - mask &= ~CR3_RIE; - } - uart_setreg(&sc->sc_bas, SACOM_CR3, CR3_RXE | mask); - return (ipend); -} -static int -sa1110_bus_flush(struct uart_softc *sc, int what) -{ - return (0); -} - -static int -sa1110_bus_getsig(struct uart_softc *sc) -{ - return (0); -} - -static int -sa1110_bus_ioctl(struct uart_softc *sc, int request, intptr_t data) -{ - return (EINVAL); -} - -static void -sa1110_bus_grab(struct uart_softc *sc) -{ - - /* Turn off Rx interrupts */ - uart_lock(sc->sc_hwmtx); - uart_setreg(&sc->sc_bas, SACOM_CR3, CR3_TXE | CR3_TIE); - uart_unlock(sc->sc_hwmtx); -} - -static void -sa1110_bus_ungrab(struct uart_softc *sc) -{ - - /* Turn on Rx interrupts */ - uart_lock(sc->sc_hwmtx); - uart_setreg(&sc->sc_bas, SACOM_CR3, CR3_RXE | CR3_TXE | CR3_RIE | CR3_TIE); - uart_unlock(sc->sc_hwmtx); -} - -struct uart_class uart_sa1110_class = { - "sa1110", - sa1110_methods, - 1, - .uc_ops = &uart_sa1110_ops, - .uc_range = 8, - .uc_rclk = 3686400 -}; diff --git a/sys/arm/sa11x0/uart_dev_sa1110.h b/sys/arm/sa11x0/uart_dev_sa1110.h deleted file mode 100644 index 29610b2..0000000 --- a/sys/arm/sa11x0/uart_dev_sa1110.h +++ /dev/null @@ -1,83 +0,0 @@ -/*- - * Copyright (c) 2003 Marcel Moolenaar - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _DEV_UART_DEV_SA1110_H_ -#define _DEV_UART_DEV_SA1110_H_ - -#define SACOM_FREQ (3686400 / 16) -#define SACOMSPEED(b) (SACOM_FREQ / (b) - 1) - -/* UART control register 0 */ -#define SACOM_CR0 0x00 -#define CR0_PE 0x01 /* Parity enable */ -#define CR0_OES 0x02 /* Odd/even parity select */ -#define CR0_SBS 0x04 /* Stop bit select */ -#define CR0_DSS 0x08 /* Data size select */ -#define CR0_SCE 0x10 /* Sample clock enable */ -#define CR0_RCE 0x20 /* Receive clock edge enable */ -#define CR0_TCE 0x40 /* Transmit clock edge enable */ - -/* UART control register 1 and 2 - baud rate divisor */ -#define SACOM_CR1 0x04 -#define SACOM_CR2 0x08 - -/* UART control register 3 */ -#define SACOM_CR3 0x0C -#define CR3_RXE 0x01 /* Receiver enable */ -#define CR3_TXE 0x02 /* Transmitter enable */ -#define CR3_BRK 0x04 /* Break */ -#define CR3_RIE 0x08 /* Receive FIFO interrupt enable */ -#define CR3_TIE 0x10 /* Transmit FIFO interrupt enable */ -#define CR3_LBM 0x20 /* Loopback mode */ - -/* UART data register */ -#define SACOM_DR 0x14 -#define DR_PRE 0x100 /* Parity error */ -#define DR_FRE 0x200 /* Framing error */ -#define DR_ROR 0x400 /* Receiver overrun */ - -/* UART status register 0 */ -#define SACOM_SR0 0x1C -#define SR0_TFS 0x01 /* Transmit FIFO service request */ -#define SR0_RFS 0x02 /* Receive FIFO service request */ -#define SR0_RID 0x04 /* Receiver idle */ -#define SR0_RBB 0x08 /* Receiver begin of break */ -#define SR0_REB 0x10 /* Receiver end of break */ -#define SR0_EIF 0x20 /* Error in FIFO */ - -/* UART status register 1 */ -#define SACOM_SR1 0x20 -#define SR1_TBY 0x01 /* Transmitter busy */ -#define SR1_RNE 0x02 /* Receive FIFO not empty */ -#define SR1_TNF 0x04 /* Transmit FIFO not full */ -#define SR1_PRE 0x08 /* Parity error */ -#define SR1_FRE 0x10 /* Framing error */ -#define SR1_ROR 0x20 /* Receive FIFO overrun */ - -#define ISSET(a, b) ((a) & (b)) -#endif diff --git a/sys/arm/samsung/exynos/files.exynos5 b/sys/arm/samsung/exynos/files.exynos5 index bb8218e..c68b1ff 100644 --- a/sys/arm/samsung/exynos/files.exynos5 +++ b/sys/arm/samsung/exynos/files.exynos5 @@ -8,7 +8,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/arm/bus_space-v6.c standard arm/arm/gic.c standard diff --git a/sys/arm/tegra/files.tegra2 b/sys/arm/tegra/files.tegra2 index de91f32..ce2c5a1 100644 --- a/sys/arm/tegra/files.tegra2 +++ b/sys/arm/tegra/files.tegra2 @@ -6,7 +6,6 @@ arm/arm/bus_space-v6.c standard arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/arm/gic.c standard arm/arm/mpcore_timer.c standard diff --git a/sys/arm/ti/files.ti b/sys/arm/ti/files.ti index 510dbf9..1068a45 100644 --- a/sys/arm/ti/files.ti +++ b/sys/arm/ti/files.ti @@ -9,7 +9,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/ti/ti_common.c standard arm/ti/ti_cpuid.c standard diff --git a/sys/arm/versatile/files.versatile b/sys/arm/versatile/files.versatile index ba892b3..254ebe1 100644 --- a/sys/arm/versatile/files.versatile +++ b/sys/arm/versatile/files.versatile @@ -6,7 +6,6 @@ arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_arm11x6.S standard arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_armv6.S standard -arm/arm/irq_dispatch.S standard arm/versatile/bus_space.c standard arm/versatile/pl050.c optional sc diff --git a/sys/arm/xilinx/files.zynq7 b/sys/arm/xilinx/files.zynq7 index 1be012f..5b25dc4 100644 --- a/sys/arm/xilinx/files.zynq7 +++ b/sys/arm/xilinx/files.zynq7 @@ -11,7 +11,6 @@ arm/arm/cpufunc_asm_armv5.S standard arm/arm/cpufunc_asm_arm10.S standard arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard -arm/arm/irq_dispatch.S standard arm/arm/gic.c standard arm/arm/mpcore_timer.c standard diff --git a/sys/arm/xscale/i80321/ep80219_machdep.c b/sys/arm/xscale/i80321/ep80219_machdep.c index 5797b57..fa61d6f 100644 --- a/sys/arm/xscale/i80321/ep80219_machdep.c +++ b/sys/arm/xscale/i80321/ep80219_machdep.c @@ -103,10 +103,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -321,11 +317,6 @@ initarm(struct arm_boot_params *abp) physmem = memsize / PAGE_SIZE; cninit(); - /* Set stack for exception handlers */ - - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/xscale/i80321/files.i80219 b/sys/arm/xscale/i80321/files.i80219 index 3983899..e9d9eab 100644 --- a/sys/arm/xscale/i80321/files.i80219 +++ b/sys/arm/xscale/i80321/files.i80219 @@ -4,7 +4,6 @@ # arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard -arm/arm/irq_dispatch.S standard arm/xscale/i80321/i80321.c standard arm/xscale/i80321/i80321_dma.c optional dma arm/xscale/i80321/i80321_mcu.c standard diff --git a/sys/arm/xscale/i80321/files.i80321 b/sys/arm/xscale/i80321/files.i80321 index 509bcab..4808224 100644 --- a/sys/arm/xscale/i80321/files.i80321 +++ b/sys/arm/xscale/i80321/files.i80321 @@ -1,7 +1,6 @@ #$FreeBSD$ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard -arm/arm/irq_dispatch.S standard arm/xscale/i80321/i80321.c standard arm/xscale/i80321/i80321_aau.c optional aau arm/xscale/i80321/i80321_dma.c optional dma diff --git a/sys/arm/xscale/i80321/iq31244_machdep.c b/sys/arm/xscale/i80321/iq31244_machdep.c index c52b1ac..0ed83a1 100644 --- a/sys/arm/xscale/i80321/iq31244_machdep.c +++ b/sys/arm/xscale/i80321/iq31244_machdep.c @@ -103,10 +103,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -322,11 +318,6 @@ initarm(struct arm_boot_params *abp) physmem = memsize / PAGE_SIZE; cninit(); - /* Set stack for exception handlers */ - - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/xscale/i8134x/crb_machdep.c b/sys/arm/xscale/i8134x/crb_machdep.c index 6e223b6..38ec7b7 100644 --- a/sys/arm/xscale/i8134x/crb_machdep.c +++ b/sys/arm/xscale/i8134x/crb_machdep.c @@ -106,10 +106,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -302,9 +298,6 @@ initarm(struct arm_boot_params *abp) cninit(); /* Set stack for exception handlers */ - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/xscale/i8134x/files.i81342 b/sys/arm/xscale/i8134x/files.i81342 index 143576c..c9bd619 100644 --- a/sys/arm/xscale/i8134x/files.i81342 +++ b/sys/arm/xscale/i8134x/files.i81342 @@ -2,7 +2,6 @@ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard arm/arm/cpufunc_asm_xscale_c3.S standard -arm/arm/irq_dispatch.S standard arm/xscale/i80321/i80321_timer.c standard arm/xscale/i80321/i80321_wdog.c optional iopwdog arm/xscale/i8134x/i81342.c standard diff --git a/sys/arm/xscale/ixp425/avila_machdep.c b/sys/arm/xscale/ixp425/avila_machdep.c index b4ac7a7..3fdad96 100644 --- a/sys/arm/xscale/ixp425/avila_machdep.c +++ b/sys/arm/xscale/ixp425/avila_machdep.c @@ -102,10 +102,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -393,11 +389,6 @@ initarm(struct arm_boot_params *abp) else memsize = ixp425_sdram_size(); - /* Set stack for exception handlers */ - - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/xscale/ixp425/files.ixp425 b/sys/arm/xscale/ixp425/files.ixp425 index 5b1446c..8d8855b 100644 --- a/sys/arm/xscale/ixp425/files.ixp425 +++ b/sys/arm/xscale/ixp425/files.ixp425 @@ -1,7 +1,6 @@ #$FreeBSD$ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard -arm/arm/irq_dispatch.S standard arm/xscale/ixp425/ixp425.c standard arm/xscale/ixp425/ixp425_mem.c standard arm/xscale/ixp425/ixp425_space.c standard diff --git a/sys/arm/xscale/pxa/files.pxa b/sys/arm/xscale/pxa/files.pxa index ce2472a..d2ea0c4 100644 --- a/sys/arm/xscale/pxa/files.pxa +++ b/sys/arm/xscale/pxa/files.pxa @@ -2,7 +2,6 @@ arm/arm/bus_space_generic.c standard arm/arm/cpufunc_asm_xscale.S standard -arm/arm/irq_dispatch.S standard arm/xscale/pxa/pxa_gpio.c standard arm/xscale/pxa/pxa_icu.c standard diff --git a/sys/arm/xscale/pxa/pxa_machdep.c b/sys/arm/xscale/pxa/pxa_machdep.c index 23bdf0e..2a7c41f 100644 --- a/sys/arm/xscale/pxa/pxa_machdep.c +++ b/sys/arm/xscale/pxa/pxa_machdep.c @@ -103,10 +103,6 @@ __FBSDID("$FreeBSD$"); /* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */ #define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM) -extern u_int data_abort_handler_address; -extern u_int prefetch_abort_handler_address; -extern u_int undefined_handler_address; - struct pv_addr kernel_pt_table[NUM_KERNEL_PTS]; /* Physical and virtual addresses for some global pages */ @@ -311,10 +307,6 @@ initarm(struct arm_boot_params *abp) /* Fire up consoles. */ cninit(); - /* Set stack for exception handlers */ - data_abort_handler_address = (u_int)data_abort_handler; - prefetch_abort_handler_address = (u_int)prefetch_abort_handler; - undefined_handler_address = (u_int)undefinedinstruction_bounce; undefined_init(); init_proc0(kernelstack.pv_va); diff --git a/sys/arm/xscale/pxa/pxareg.h b/sys/arm/xscale/pxa/pxareg.h index 34306cd..03a167f 100644 --- a/sys/arm/xscale/pxa/pxareg.h +++ b/sys/arm/xscale/pxa/pxareg.h @@ -47,9 +47,6 @@ #ifndef _ARM_XSCALE_PXAREG_H_ #define _ARM_XSCALE_PXAREG_H_ -/* Borrow some register definitions from sa11x0 */ -#include <arm/sa11x0/sa11x0_reg.h> - #ifndef _LOCORE #include <sys/types.h> /* for uint32_t */ #endif diff --git a/sys/conf/Makefile.arm b/sys/conf/Makefile.arm index d3332b4..ce397ed 100644 --- a/sys/conf/Makefile.arm +++ b/sys/conf/Makefile.arm @@ -72,9 +72,9 @@ SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M\ SYSTEM_LD_TAIL += ;sh ${S}/tools/embed_mfs.sh ${KERNEL_KO}.bin ${MFS_IMAGE}; .endif -FILES_CPU_FUNC = $S/$M/$M/cpufunc_asm_arm7tdmi.S \ - $S/$M/$M/cpufunc_asm_arm8.S $S/$M/$M/cpufunc_asm_arm9.S \ - $S/$M/$M/cpufunc_asm_sa1.S $S/$M/$M/cpufunc_asm_arm10.S \ +FILES_CPU_FUNC = \ + $S/$M/$M/cpufunc_asm_arm9.S \ + $S/$M/$M/cpufunc_asm_arm10.S \ $S/$M/$M/cpufunc_asm_xscale.S $S/$M/$M/cpufunc_asm.S \ $S/$M/$M/cpufunc_asm_xscale_c3.S $S/$M/$M/cpufunc_asm_armv5_ec.S \ $S/$M/$M/cpufunc_asm_fa526.S $S/$M/$M/cpufunc_asm_sheeva.S \ diff --git a/sys/conf/files.arm b/sys/conf/files.arm index 71478e3..743111d 100644 --- a/sys/conf/files.arm +++ b/sys/conf/files.arm @@ -5,7 +5,7 @@ arm/arm/bcopyinout.S standard arm/arm/blockio.S standard arm/arm/bootconfig.c standard arm/arm/bus_space_asm_generic.S standard -arm/arm/busdma_machdep.c optional cpu_arm9 | cpu_arm9e | cpu_fa526 | cpu_sa1100 | cpu_sa1110 | cpu_xscale_80219 | cpu_xscale_80321 | cpu_xscale_81342 | cpu_xscale_ixp425 | cpu_xscale_ixp435 | cpu_xscale_pxa2x0 +arm/arm/busdma_machdep.c optional cpu_arm9 | cpu_arm9e | cpu_fa526 | cpu_xscale_80219 | cpu_xscale_80321 | cpu_xscale_81342 | cpu_xscale_ixp425 | cpu_xscale_ixp435 | cpu_xscale_pxa2x0 arm/arm/busdma_machdep-v6.c optional cpu_arm1136 | cpu_arm1176 | cpu_cortexa | cpu_mv_pj4b | cpu_krait arm/arm/copystr.S standard arm/arm/cpufunc.c standard @@ -36,7 +36,7 @@ arm/arm/nexus.c standard arm/arm/physmem.c standard arm/arm/pl190.c optional pl190 arm/arm/pl310.c optional pl310 -arm/arm/pmap.c optional cpu_arm9 | cpu_arm9e | cpu_fa526 | cpu_sa1100 | cpu_sa1110 | cpu_xscale_80219 | cpu_xscale_80321 | cpu_xscale_81342 | cpu_xscale_ixp425 | cpu_xscale_ixp435 | cpu_xscale_pxa2x0 +arm/arm/pmap.c optional cpu_arm9 | cpu_arm9e | cpu_fa526 | cpu_xscale_80219 | cpu_xscale_80321 | cpu_xscale_81342 | cpu_xscale_ixp425 | cpu_xscale_ixp435 | cpu_xscale_pxa2x0 arm/arm/pmap-v6.c optional cpu_arm1136 | cpu_arm1176 | cpu_cortexa | cpu_mv_pj4b | cpu_krait arm/arm/sc_machdep.c optional sc arm/arm/setcpsr.S standard @@ -50,7 +50,6 @@ arm/arm/sys_machdep.c standard arm/arm/trap.c standard arm/arm/uio_machdep.c standard arm/arm/undefined.c standard -arm/arm/vectors.S standard arm/arm/vm_machdep.c standard arm/arm/vfp.c standard board_id.h standard \ diff --git a/sys/conf/options.arm b/sys/conf/options.arm index 46805a9..87f17b0 100644 --- a/sys/conf/options.arm +++ b/sys/conf/options.arm @@ -16,8 +16,6 @@ CPU_KRAIT opt_global.h CPU_FA526 opt_global.h CPU_FA626TE opt_global.h CPU_MV_PJ4B opt_global.h -CPU_SA1100 opt_global.h -CPU_SA1110 opt_global.h CPU_XSCALE_80219 opt_global.h CPU_XSCALE_80321 opt_global.h CPU_XSCALE_81342 opt_global.h |