summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/arm/allwinner/a20/files.a201
-rw-r--r--sys/arm/allwinner/files.a101
-rw-r--r--sys/arm/arm/copystr.S1
-rw-r--r--sys/arm/arm/cpufunc.c1086
-rw-r--r--sys/arm/arm/cpufunc_asm_arm7tdmi.S106
-rw-r--r--sys/arm/arm/cpufunc_asm_arm8.S296
-rw-r--r--sys/arm/arm/cpufunc_asm_ixp12x0.S92
-rw-r--r--sys/arm/arm/cpufunc_asm_sa1.S337
-rw-r--r--sys/arm/arm/cpufunc_asm_sa11x0.S128
-rw-r--r--sys/arm/arm/elf_trampoline.c12
-rw-r--r--sys/arm/arm/exception.S487
-rw-r--r--sys/arm/arm/fiq.c14
-rw-r--r--sys/arm/arm/fiq_subr.S10
-rw-r--r--sys/arm/arm/fusu.S1
-rw-r--r--sys/arm/arm/identcpu.c92
-rw-r--r--sys/arm/arm/intr.c10
-rw-r--r--sys/arm/arm/irq_dispatch.S120
-rw-r--r--sys/arm/arm/machdep.c8
-rw-r--r--sys/arm/arm/pmap.c78
-rw-r--r--sys/arm/arm/support.S1
-rw-r--r--sys/arm/arm/swtch.S19
-rw-r--r--sys/arm/arm/trap.c101
-rw-r--r--sys/arm/arm/vectors.S104
-rw-r--r--sys/arm/at91/at91_machdep.c9
-rw-r--r--sys/arm/at91/files.at911
-rw-r--r--sys/arm/broadcom/bcm2835/files.bcm28351
-rw-r--r--sys/arm/conf/NOTES3
-rw-r--r--sys/arm/conf/SIMICS73
-rw-r--r--sys/arm/econa/econa_machdep.c8
-rw-r--r--sys/arm/econa/files.econa1
-rw-r--r--sys/arm/freescale/imx/files.imx511
-rw-r--r--sys/arm/freescale/imx/files.imx531
-rw-r--r--sys/arm/freescale/imx/files.imx61
-rw-r--r--sys/arm/freescale/vybrid/files.vybrid1
-rw-r--r--sys/arm/include/armreg.h52
-rw-r--r--sys/arm/include/asmacros.h251
-rw-r--r--sys/arm/include/cpuconf.h35
-rw-r--r--sys/arm/include/cpufunc.h106
-rw-r--r--sys/arm/include/md_var.h8
-rw-r--r--sys/arm/include/param.h1
-rw-r--r--sys/arm/include/pmap.h20
-rw-r--r--sys/arm/include/sysarch.h2
-rw-r--r--sys/arm/lpc/files.lpc1
-rw-r--r--sys/arm/mv/files.mv1
-rw-r--r--sys/arm/rockchip/files.rk30xx1
-rw-r--r--sys/arm/s3c2xx0/files.s3c2xx01
-rw-r--r--sys/arm/s3c2xx0/s3c24x0_machdep.c8
-rw-r--r--sys/arm/sa11x0/assabet_machdep.c400
-rw-r--r--sys/arm/sa11x0/files.sa11x014
-rw-r--r--sys/arm/sa11x0/sa11x0.c253
-rw-r--r--sys/arm/sa11x0/sa11x0_dmacreg.h90
-rw-r--r--sys/arm/sa11x0/sa11x0_gpioreg.h93
-rw-r--r--sys/arm/sa11x0/sa11x0_io.c135
-rw-r--r--sys/arm/sa11x0/sa11x0_io_asm.S290
-rw-r--r--sys/arm/sa11x0/sa11x0_irq.S133
-rw-r--r--sys/arm/sa11x0/sa11x0_irqhandler.c143
-rw-r--r--sys/arm/sa11x0/sa11x0_ost.c355
-rw-r--r--sys/arm/sa11x0/sa11x0_ostreg.h76
-rw-r--r--sys/arm/sa11x0/sa11x0_ppcreg.h60
-rw-r--r--sys/arm/sa11x0/sa11x0_reg.h76
-rw-r--r--sys/arm/sa11x0/sa11x0_var.h65
-rw-r--r--sys/arm/sa11x0/std.sa11x09
-rw-r--r--sys/arm/sa11x0/uart_bus_sa1110.c80
-rw-r--r--sys/arm/sa11x0/uart_cpu_sa1110.c73
-rw-r--r--sys/arm/sa11x0/uart_dev_sa1110.c307
-rw-r--r--sys/arm/sa11x0/uart_dev_sa1110.h83
-rw-r--r--sys/arm/samsung/exynos/files.exynos51
-rw-r--r--sys/arm/tegra/files.tegra21
-rw-r--r--sys/arm/ti/files.ti1
-rw-r--r--sys/arm/versatile/files.versatile1
-rw-r--r--sys/arm/xilinx/files.zynq71
-rw-r--r--sys/arm/xscale/i80321/ep80219_machdep.c9
-rw-r--r--sys/arm/xscale/i80321/files.i802191
-rw-r--r--sys/arm/xscale/i80321/files.i803211
-rw-r--r--sys/arm/xscale/i80321/iq31244_machdep.c9
-rw-r--r--sys/arm/xscale/i8134x/crb_machdep.c7
-rw-r--r--sys/arm/xscale/i8134x/files.i813421
-rw-r--r--sys/arm/xscale/ixp425/avila_machdep.c9
-rw-r--r--sys/arm/xscale/ixp425/files.ixp4251
-rw-r--r--sys/arm/xscale/pxa/files.pxa1
-rw-r--r--sys/arm/xscale/pxa/pxa_machdep.c8
-rw-r--r--sys/arm/xscale/pxa/pxareg.h3
-rw-r--r--sys/conf/Makefile.arm6
-rw-r--r--sys/conf/files.arm5
-rw-r--r--sys/conf/options.arm2
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
OpenPOWER on IntegriCloud