From b450c2b39217f3367302b1d8b219fa3f9ec4e671 Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 17 May 2014 00:53:12 +0000 Subject: [PATCH] MFC 257774, 256760, 262916, 262905, 262918, 262919, 262920, 262921, 262924, 262925, 262929, 262932, 262935, 262940, 262941, 262942, 262948, 262949, 262950 Strip arm/conf/DEFAULTS down to just items that are mandatory for running the architecture. Move all the files named foo/common.c to foo/foo_common.c Initial cut for DTS on the hl201 board. Add commented out dts for sam9260ek as well as early printf support. Make clock optional on uart nodes, then back it out ("I don't know what I was thinking, but it is lame.") Set the baud rate if it isn't 0 Make at91_soc_id() public. Properly round at91 resource on unmapping. Move AT91 AIC related stuff to own file. Fix another bug in multicast filtering. i.MX uses 6 bits from MSB in LE CRC32 for the hash value, not the lowest 6 bits in BE CRC32. Follow r262916 with one more config file that references a renamed common.c Remove bogus AT91 define that causes compile errors. Most of the defines for SAM9X are going away soonish anyway (once FDT works), but until then... Remove all dregs of a per-thread undefined-exception-mode stack. Rework the VFP code that handles demand-based save and restore of state. Always call vfp_discard() on thread death. When a thread begins life it doesn't own the VFP hardware state on any cpu. Make undefined exception entry MP-safe. git-svn-id: svn://svn.freebsd.org/base/stable/10@266277 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- sys/arm/allwinner/{common.c => a10_common.c} | 0 sys/arm/allwinner/a20/files.a20 | 2 +- sys/arm/allwinner/files.a10 | 12 +- sys/arm/arm/exception.S | 49 ++--- sys/arm/arm/genassym.c | 3 - sys/arm/arm/machdep.c | 3 +- sys/arm/arm/swtch.S | 101 ++-------- sys/arm/arm/undefined.c | 1 - sys/arm/arm/vfp.c | 189 ++++++++---------- sys/arm/arm/vm_machdep.c | 3 +- sys/arm/at91/at91.c | 81 ++------ sys/arm/at91/at91_aic.c | 188 +++++++++++++++++ sys/arm/at91/at91rm9200.c | 1 + sys/arm/at91/at91sam9g20.c | 1 + sys/arm/at91/at91sam9g20reg.h | 1 + sys/arm/at91/at91sam9x5.c | 1 + sys/arm/at91/files.at91 | 1 + .../bcm2835/{common.c => bcm2835_common.c} | 0 sys/arm/broadcom/bcm2835/bus_space.c | 113 ----------- sys/arm/broadcom/bcm2835/files.bcm2835 | 4 +- sys/arm/conf/AC100 | 3 + sys/arm/conf/ARMADAXP | 3 + sys/arm/conf/ARNDALE | 3 + sys/arm/conf/ATMEL | 3 + sys/arm/conf/AVILA | 3 + sys/arm/conf/BEAGLEBONE | 3 + sys/arm/conf/BWCT | 3 + sys/arm/conf/CAMBRIA | 3 + sys/arm/conf/CNS11XXNAS | 3 + sys/arm/conf/CRB | 3 + sys/arm/conf/CUBIEBOARD | 3 + sys/arm/conf/CUBIEBOARD2 | 3 + sys/arm/conf/DB-78XXX | 3 + sys/arm/conf/DB-88F5XXX | 3 + sys/arm/conf/DB-88F6XXX | 3 + sys/arm/conf/DEFAULTS | 5 - sys/arm/conf/DIGI-CCWMX53 | 3 + sys/arm/conf/DOCKSTAR | 3 + sys/arm/conf/DREAMPLUG-1001 | 3 + sys/arm/conf/EA3250 | 3 + sys/arm/conf/EB9200 | 3 + sys/arm/conf/EFIKA_MX | 3 + sys/arm/conf/EP80219 | 3 + sys/arm/conf/ETHERNUT5 | 3 + sys/arm/conf/GUMSTIX | 3 + sys/arm/conf/HL200 | 3 + sys/arm/conf/HL201 | 3 + sys/arm/conf/IMX53-QSB | 3 + sys/arm/conf/IMX6 | 3 + sys/arm/conf/IQ31244 | 3 + sys/arm/conf/KB920X | 3 + sys/arm/conf/LN2410SBC | 3 + sys/arm/conf/NSLU | 3 + sys/arm/conf/PANDABOARD | 3 + sys/arm/conf/QILA9G20 | 3 + sys/arm/conf/RADXA | 3 + sys/arm/conf/RPI-B | 3 + sys/arm/conf/SAM9260EK | 13 ++ sys/arm/conf/SAM9G20EK | 3 + sys/arm/conf/SAM9X25EK | 3 + sys/arm/conf/SHEEVAPLUG | 3 + sys/arm/conf/SIMICS | 3 + sys/arm/conf/SN9G45 | 3 + sys/arm/conf/TS7800 | 4 + sys/arm/conf/VERSATILEPB | 3 + sys/arm/conf/VYBRID.common | 3 + sys/arm/conf/ZEDBOARD | 3 + sys/arm/freescale/imx/files.imx51 | 2 +- sys/arm/freescale/imx/files.imx53 | 2 +- sys/arm/freescale/imx/files.imx6 | 2 +- .../freescale/imx/{common.c => imx_common.c} | 0 sys/arm/include/param.h | 6 +- sys/arm/include/pcb.h | 1 - sys/arm/include/pcpu.h | 3 +- sys/arm/include/vfp.h | 4 + sys/arm/mv/files.mv | 2 +- sys/arm/mv/{common.c => mv_common.c} | 17 +- sys/arm/mv/mvreg.h | 4 + sys/arm/rockchip/files.rk30xx | 2 +- .../rockchip/{common.c => rk30xx_common.c} | 0 .../exynos/{common.c => exynos5_common.c} | 0 sys/arm/samsung/exynos/files.exynos5 | 2 +- sys/arm/tegra/files.tegra2 | 2 +- sys/arm/tegra/{common.c => tegra2_common.c} | 0 sys/arm/ti/files.ti | 2 +- sys/arm/ti/{common.c => ti_common.c} | 0 sys/arm/versatile/files.versatile | 2 +- .../{common.c => versatile_common.c} | 0 sys/boot/fdt/dts/arm/hl201.dts | 44 ++++ sys/dev/ffec/if_ffec.c | 5 +- sys/dev/uart/uart_bus_fdt.c | 5 +- 91 files changed, 567 insertions(+), 448 deletions(-) rename sys/arm/allwinner/{common.c => a10_common.c} (100%) create mode 100644 sys/arm/at91/at91_aic.c rename sys/arm/broadcom/bcm2835/{common.c => bcm2835_common.c} (100%) delete mode 100644 sys/arm/broadcom/bcm2835/bus_space.c rename sys/arm/freescale/imx/{common.c => imx_common.c} (100%) rename sys/arm/mv/{common.c => mv_common.c} (99%) rename sys/arm/rockchip/{common.c => rk30xx_common.c} (100%) rename sys/arm/samsung/exynos/{common.c => exynos5_common.c} (100%) rename sys/arm/tegra/{common.c => tegra2_common.c} (100%) rename sys/arm/ti/{common.c => ti_common.c} (100%) rename sys/arm/versatile/{common.c => versatile_common.c} (100%) create mode 100644 sys/boot/fdt/dts/arm/hl201.dts diff --git a/sys/arm/allwinner/common.c b/sys/arm/allwinner/a10_common.c similarity index 100% rename from sys/arm/allwinner/common.c rename to sys/arm/allwinner/a10_common.c diff --git a/sys/arm/allwinner/a20/files.a20 b/sys/arm/allwinner/a20/files.a20 index 934634745..fc66cee76 100644 --- a/sys/arm/allwinner/a20/files.a20 +++ b/sys/arm/allwinner/a20/files.a20 @@ -19,5 +19,5 @@ arm/allwinner/if_emac.c optional emac arm/allwinner/a10_wdog.c standard arm/allwinner/timer.c standard arm/allwinner/bus_space.c standard -arm/allwinner/common.c standard +arm/allwinner/a10_common.c standard arm/allwinner/a10_machdep.c standard diff --git a/sys/arm/allwinner/files.a10 b/sys/arm/allwinner/files.a10 index eeffd620d..22bc94e84 100644 --- a/sys/arm/allwinner/files.a10 +++ b/sys/arm/allwinner/files.a10 @@ -9,16 +9,16 @@ arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard arm/arm/irq_dispatch.S standard -arm/allwinner/a20/a20_cpu_cfg.c standard arm/allwinner/a10_clk.c standard -arm/allwinner/a10_sramc.c standard +arm/allwinner/a10_common.c standard arm/allwinner/a10_gpio.c optional gpio arm/allwinner/a10_ehci.c optional ehci -arm/allwinner/if_emac.c optional emac +arm/allwinner/a10_machdep.c standard +arm/allwinner/a10_sramc.c standard arm/allwinner/a10_wdog.c standard -arm/allwinner/timer.c standard +arm/allwinner/a20/a20_cpu_cfg.c standard arm/allwinner/aintc.c standard +arm/allwinner/if_emac.c optional emac +arm/allwinner/timer.c standard arm/allwinner/bus_space.c standard -arm/allwinner/common.c standard #arm/allwinner/console.c standard -arm/allwinner/a10_machdep.c standard diff --git a/sys/arm/arm/exception.S b/sys/arm/arm/exception.S index 3d110e325..d7ef5f2b2 100644 --- a/sys/arm/arm/exception.S +++ b/sys/arm/arm/exception.S @@ -218,46 +218,25 @@ END(exception_exit) * look like direct entry from the vector. */ ASENTRY_NP(undefined_entry) - stmfd sp!, {r0, r1} - ldr r0, Lundefined_handler_indirection - ldr r1, [sp], #0x0004 - str r1, [r0, #0x0000] - ldr r1, [sp], #0x0004 - str r1, [r0, #0x0004] - ldmia r0, {r0, r1, pc} - -Lundefined_handler_indirection: - .word Lundefined_handler_indirection_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) -/* - * assembly bounce code for calling the kernel - * undefined instruction handler. This uses - * a standard trap frame and is called in SVC mode. - */ - -ENTRY_NP(undefinedinstruction_bounce) - PUSHFRAMEINSVC +ASENTRY_NP(undefinedinstruction_bounce) + b undefinedinstruction +END(undefinedinstruction_bounce) - mov r0, sp - adr lr, exception_exit - b _C_LABEL(undefinedinstruction) +Lundefined_handler_address: + .word _C_LABEL(undefined_handler_address) .data - .align 0 - -/* - * Indirection data - * 2 words use for preserving r0 and r1 - * 3rd word contains the undefined handler address. - */ - -Lundefined_handler_indirection_data: - .word 0 - .word 0 - .global _C_LABEL(undefined_handler_address) _C_LABEL(undefined_handler_address): - .word _C_LABEL(undefinedinstruction_bounce) -END(undefinedinstruction_bounce) + .word undefinedinstruction_bounce + diff --git a/sys/arm/arm/genassym.c b/sys/arm/arm/genassym.c index e38733ba0..ab0be4ca1 100644 --- a/sys/arm/arm/genassym.c +++ b/sys/arm/arm/genassym.c @@ -60,7 +60,6 @@ ASSYM(PCB_NOALIGNFLT, PCB_NOALIGNFLT); ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault)); ASSYM(PCB_DACR, offsetof(struct pcb, pcb_dacr)); ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags)); -ASSYM(PCB_UND_SP, offsetof(struct pcb, un_32.pcb32_und_sp)); ASSYM(PCB_PAGEDIR, offsetof(struct pcb, pcb_pagedir)); ASSYM(PCB_L1VEC, offsetof(struct pcb, pcb_l1vec)); ASSYM(PCB_PL1VEC, offsetof(struct pcb, pcb_pl1vec)); @@ -119,9 +118,7 @@ ASSYM(ARM_RAS_END, ARM_RAS_END); #ifdef VFP ASSYM(PCB_VFPSTATE, offsetof(struct pcb, pcb_vfpstate)); -ASSYM(PCB_VFPCPU, offsetof(struct pcb, pcb_vfpcpu)); -ASSYM(PC_VFPCTHREAD, offsetof(struct pcpu, pc_vfpcthread)); ASSYM(PC_CPU, offsetof(struct pcpu, pc_cpu)); ASSYM(PC_CURPMAP, offsetof(struct pcpu, pc_curpmap)); diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index 35f14326e..9fb2ffc56 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -379,8 +379,6 @@ cpu_startup(void *dummy) bufinit(); vm_pager_bufferinit(); - pcb->un_32.pcb32_und_sp = (u_int)thread0.td_kstack + - USPACE_UNDEF_STACK_TOP; pcb->un_32.pcb32_sp = (u_int)thread0.td_kstack + USPACE_SVC_STACK_TOP; vector_page_setprot(VM_PROT_READ); @@ -995,6 +993,7 @@ init_proc0(vm_offset_t kstack) thread0.td_pcb = (struct pcb *) (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; thread0.td_pcb->pcb_flags = 0; + thread0.td_pcb->pcb_vfpcpu = -1; thread0.td_frame = &proc0_tf; pcpup->pc_curpcb = thread0.td_pcb; } diff --git a/sys/arm/arm/swtch.S b/sys/arm/arm/swtch.S index 133b0d949..d7048239c 100644 --- a/sys/arm/arm/swtch.S +++ b/sys/arm/arm/swtch.S @@ -84,6 +84,8 @@ #include #include #include +#include + __FBSDID("$FreeBSD$"); #define DOMAIN_CLIENT 0x01 @@ -102,6 +104,10 @@ __FBSDID("$FreeBSD$"); ldr tmp, .Lcurpcpu #endif +#ifdef VFP + .fpu vfp /* allow VFP instructions */ +#endif + .Lcurpcpu: .word _C_LABEL(__pcpu) .word PCPU_SIZE @@ -118,20 +124,11 @@ ENTRY(cpu_throw) * r5 = newtd */ - GET_PCPU(r7, r9) - -#ifdef VFP - /* - * vfp_discard will clear pcpu->pc_vfpcthread, and modify - * and modify the control as needed. - */ - ldr r4, [r7, #(PC_VFPCTHREAD)] /* this thread using vfp? */ - cmp r0, r4 - bne 3f - bl _C_LABEL(vfp_discard) /* yes, shut down vfp */ -3: -#endif /* VFP */ +#ifdef VFP /* This thread is dying, disable */ + bl _C_LABEL(vfp_discard) /* VFP without preserving state. */ +#endif + GET_PCPU(r7, r9) ldr r7, [r5, #(TD_PCB)] /* r7 = new thread's PCB */ /* Switch to lwp0 context */ @@ -303,46 +300,19 @@ ENTRY(cpu_switch) /* Get the user structure for the new process in r9 */ ldr r9, [r1, #(TD_PCB)] - mrs r3, cpsr - /* - * We can do that, since - * PSR_SVC32_MODE|PSR_UND32_MODE == MSR_UND32_MODE - */ - orr r8, r3, #(PSR_UND32_MODE) - msr cpsr_c, r8 - - str sp, [r2, #(PCB_UND_SP)] - - msr cpsr_c, r3 /* Restore the old mode */ /* rem: r2 = old PCB */ /* rem: r9 = new PCB */ /* rem: interrupts are enabled */ #ifdef VFP - /* - * vfp_store will clear pcpu->pc_vfpcthread, save - * registers and state, and modify the control as needed. - * a future exception will bounce the backup settings in the fp unit. - * XXX vfp_store can't change r4 - */ - GET_PCPU(r7, r8) - ldr r8, [r7, #(PC_VFPCTHREAD)] - cmp r4, r8 /* old thread used vfp? */ - bne 1f /* no, don't save */ - cmp r1, r4 /* same thread ? */ - beq 1f /* yes, skip vfp store */ -#ifdef SMP - ldr r8, [r7, #(PC_CPU)] /* last used on this cpu? */ - ldr r3, [r2, #(PCB_VFPCPU)] - cmp r8, r3 /* last cpu to use these registers? */ - bne 1f /* no. these values are stale */ + fmrx r0, fpexc /* If the VFP is enabled */ + tst r0, #(VFPEXC_EN) /* the current thread has */ + movne r1, #1 /* used it, so go save */ + addne r0, r2, #(PCB_VFPSTATE) /* the state into the PCB */ + blne _C_LABEL(vfp_store) /* and disable the VFP. */ #endif - add r0, r2, #(PCB_VFPSTATE) - bl _C_LABEL(vfp_store) -1: -#endif /* VFP */ - /* r1 now free! */ + /* r0-r3 now free! */ /* Third phase : restore saved context */ @@ -438,10 +408,6 @@ ENTRY(cpu_switch) movne r0, #0 /* We *know* vector_page's VA is 0x0 */ movne lr, pc ldrne pc, [r10, #CF_TLB_FLUSHID_SE] - /* - * We can do that, since - * PSR_SVC32_MODE|PSR_UND32_MODE == MSR_UND32_MODE - */ .Lcs_context_switched: @@ -460,17 +426,6 @@ ENTRY(cpu_switch) /* rem: r9 = new PCB */ - mrs r3, cpsr - /* - * We can do that, since - * PSR_SVC32_MODE|PSR_UND32_MODE == MSR_UND32_MODE - */ - orr r2, r3, #(PSR_UND32_MODE) - msr cpsr_c, r2 - - ldr sp, [r9, #(PCB_UND_SP)] - - msr cpsr_c, r3 /* Restore the old mode */ /* Restore all the save registers */ #ifndef _ARM_ARCH_5E add r7, r9, #PCB_R8 @@ -520,26 +475,12 @@ ENTRY(savectx) add r2, r0, #(PCB_R8) stmia r2, {r8-r13} #ifdef VFP - /* - * vfp_store will clear pcpu->pc_vfpcthread, save - * registers and state, and modify the control as needed. - * a future exception will bounce the backup settings in the fp unit. - */ - GET_PCPU(r7, r4) - ldr r4, [r7, #(PC_VFPCTHREAD)] /* vfp thread */ - ldr r2, [r7, #(PC_CURTHREAD)] /* current thread */ - cmp r4, r2 - bne 1f -#ifdef SMP - ldr r2, [r7, #(PC_CPU)] /* last used on this cpu? */ - ldr r3, [r0, #(PCB_VFPCPU)] - cmp r2, r3 - bne 1f /* no. these values are stale */ + fmrx r2, fpexc /* If the VFP is enabled */ + tst r2, #(VFPEXC_EN) /* the current thread has */ + movne r1, #1 /* used it, so go save */ + addne r0, r0, #(PCB_VFPSTATE) /* the state into the PCB */ + blne _C_LABEL(vfp_store) /* and disable the VFP. */ #endif - add r0, r0, #(PCB_VFPSTATE) - bl _C_LABEL(vfp_store) -1: -#endif /* VFP */ add sp, sp, #4; ldmfd sp!, {r4-r7, pc} END(savectx) diff --git a/sys/arm/arm/undefined.c b/sys/arm/arm/undefined.c index 7829ecea5..5b7b91780 100644 --- a/sys/arm/arm/undefined.c +++ b/sys/arm/arm/undefined.c @@ -183,7 +183,6 @@ undefinedinstruction(struct trapframe *frame) if (!(frame->tf_spsr & I32_bit)) enable_interrupts(I32_bit|F32_bit); - frame->tf_pc -= INSN_SIZE; PCPU_INC(cnt.v_trap); fault_pc = frame->tf_pc; diff --git a/sys/arm/arm/vfp.c b/sys/arm/arm/vfp.c index 8ee38bba8..240ede32b 100644 --- a/sys/arm/arm/vfp.c +++ b/sys/arm/arm/vfp.c @@ -1,4 +1,5 @@ -/* +/*- + * Copyright (c) 2014 Ian Lepore * Copyright (c) 2012 Mark Tinguely * * All rights reserved. @@ -34,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -41,12 +43,8 @@ __FBSDID("$FreeBSD$"); #include /* function prototypes */ -unsigned int get_coprocessorACR(void); static int vfp_bounce(u_int, u_int, struct trapframe *, int); static void vfp_restore(struct vfp_state *); -void vfp_discard(void); -void vfp_store(struct vfp_state *); -void set_coprocessorACR(u_int); extern int vfp_exists; static struct undefined_handler vfp10_uh, vfp11_uh; @@ -64,7 +62,20 @@ static int is_d32; val; \ }) -u_int +/* + * Work around an issue with GCC where the asm it generates is not unified + * syntax and fails to assemble because it expects the ldcleq instruction in the + * form ldcl, not in the UAL form ldcl, and similar for stcleq. + */ +#ifdef __clang__ +#define LDCLNE "ldclne " +#define STCLNE "stclne " +#else +#define LDCLNE "ldcnel " +#define STCLNE "stcnel " +#endif + +static u_int get_coprocessorACR(void) { u_int val; @@ -72,7 +83,7 @@ get_coprocessorACR(void) return val; } -void +static void set_coprocessorACR(u_int val) { __asm __volatile("mcr p15, 0, %0, c1, c0, 2\n\t" @@ -136,147 +147,105 @@ SYSINIT(vfp, SI_SUB_CPU, SI_ORDER_ANY, vfp_init, NULL); static int vfp_bounce(u_int addr, u_int insn, struct trapframe *frame, int code) { - u_int fpexc; + u_int cpu, fpexc; struct pcb *curpcb; - struct thread *vfptd; - int i; - if (!vfp_exists) - return 1; /* vfp does not exist */ - i = disable_interrupts(I32_bit|F32_bit); - fpexc = fmrx(VFPEXC); /* read the vfp exception reg */ + if ((code & FAULT_USER) == 0) + panic("undefined floating point instruction in supervisor mode"); + + critical_enter(); + + /* + * If the VFP is already on and we got an undefined instruction, then + * something tried to executate a truly invalid instruction that maps to + * the VFP. + */ + fpexc = fmrx(VFPEXC); if (fpexc & VFPEXC_EN) { - vfptd = PCPU_GET(vfpcthread); - /* did the kernel call the vfp or exception that expect us - * to emulate the command. Newer hardware does not require - * emulation, so we don't emulate yet. - */ -#ifdef SMP - /* don't save if newer registers are on another processor */ - if (vfptd /* && (vfptd == curthread) */ && - (vfptd->td_pcb->pcb_vfpcpu == PCPU_GET(cpu))) -#else - /* someone did not save their registers, */ - if (vfptd /* && (vfptd == curthread) */) -#endif - vfp_store(&vfptd->td_pcb->pcb_vfpstate); - - fpexc &= ~VFPEXC_EN; - fmxr(VFPEXC, fpexc); /* turn vfp hardware off */ - if (vfptd == curthread) { - /* kill the process - we do not handle emulation */ - restore_interrupts(i); - killproc(curthread->td_proc, "vfp emulation"); - return 1; - } - /* should not happen. someone did not save their context */ - printf("vfp_bounce: vfpcthread: %p curthread: %p\n", - vfptd, curthread); + /* kill the process - we do not handle emulation */ + critical_exit(); + killproc(curthread->td_proc, "vfp emulation"); + return 1; } - fpexc |= VFPEXC_EN; - fmxr(VFPEXC, fpexc); /* enable the vfp and repeat command */ - curpcb = curthread->td_pcb; - /* If we were the last process to use the VFP, the process did not - * use a VFP on another processor, then the registers in the VFP - * will still be ours and are current. Eventually, we will make the - * restore smarter. + + /* + * If the last time this thread used the VFP it was on this core, and + * the last thread to use the VFP on this core was this thread, then the + * VFP state is valid, otherwise restore this thread's state to the VFP. */ - vfp_restore(&curpcb->pcb_vfpstate); -#ifdef SMP - curpcb->pcb_vfpcpu = PCPU_GET(cpu); -#endif - PCPU_SET(vfpcthread, curthread); - restore_interrupts(i); - return 0; + fmxr(VFPEXC, fpexc | VFPEXC_EN); + curpcb = curthread->td_pcb; + cpu = PCPU_GET(cpu); + if (curpcb->pcb_vfpcpu != cpu || curthread != PCPU_GET(fpcurthread)) { + vfp_restore(&curpcb->pcb_vfpstate); + curpcb->pcb_vfpcpu = cpu; + PCPU_SET(fpcurthread, curthread); + } + + critical_exit(); + return (0); } -/* vfs_store is called from from a VFP command to restore the registers and - * turn on the VFP hardware. - * Eventually we will use the information that this process was the last - * to use the VFP hardware and bypass the restore, just turn on the hardware. +/* + * Restore the given state to the VFP hardware. */ static void vfp_restore(struct vfp_state *vfpsave) { u_int vfpscr = 0; - /* - * Work around an issue with GCC where the asm it generates is - * not unified syntax and fails to assemble because it expects - * the ldcleq instruction in the form ldcl, not in the UAL - * form ldcl, and similar for stcleq. - */ -#ifdef __clang__ -#define ldclne "ldclne" -#define stclne "stclne" -#else -#define ldclne "ldcnel" -#define stclne "stcnel" -#endif - if (vfpsave) { - __asm __volatile("ldc p10, c0, [%1], #128\n" /* d0-d15 */ + __asm __volatile("ldc p10, c0, [%1], #128\n" /* d0-d15 */ "cmp %2, #0\n" /* -D16 or -D32? */ - ldclne" p11, c0, [%1], #128\n" /* d16-d31 */ + LDCLNE "p11, c0, [%1], #128\n" /* d16-d31 */ "addeq %1, %1, #128\n" /* skip missing regs */ "ldr %0, [%1]\n" /* set old vfpscr */ "mcr p10, 7, %0, cr1, c0, 0\n" : "=&r" (vfpscr) : "r" (vfpsave), "r" (is_d32) : "cc"); - } } -/* vfs_store is called from switch to save the vfp hardware registers - * into the pcb before switching to another process. - * we already know that the new process is different from this old - * process and that this process last used the VFP registers. - * Below we check to see if the VFP has been enabled since the last - * register save. - * This routine will exit with the VFP turned off. The next VFP user - * will trap to restore its registers and turn on the VFP hardware. +/* + * If the VFP is on, save its current state and turn it off if requested to do + * so. If the VFP is not on, does not change the values at *vfpsave. Caller is + * responsible for preventing a context switch while this is running. */ void -vfp_store(struct vfp_state *vfpsave) +vfp_store(struct vfp_state *vfpsave, boolean_t disable_vfp) { - u_int tmp, vfpscr = 0; + u_int tmp, vfpscr; tmp = fmrx(VFPEXC); /* Is the vfp enabled? */ - if (vfpsave && (tmp & VFPEXC_EN)) { - __asm __volatile("stc p11, c0, [%1], #128\n" /* d0-d15 */ + if (tmp & VFPEXC_EN) { + __asm __volatile( + "stc p11, c0, [%1], #128\n" /* d0-d15 */ "cmp %2, #0\n" /* -D16 or -D32? */ - stclne" p11, c0, [%1], #128\n" /* d16-d31 */ + STCLNE "p11, c0, [%1], #128\n" /* d16-d31 */ "addeq %1, %1, #128\n" /* skip missing regs */ "mrc p10, 7, %0, cr1, c0, 0\n" /* fmxr(VFPSCR) */ "str %0, [%1]\n" /* save vfpscr */ : "=&r" (vfpscr) : "r" (vfpsave), "r" (is_d32) : "cc"); + if (disable_vfp) + fmxr(VFPEXC , tmp & ~VFPEXC_EN); } -#undef ldcleq -#undef stcleq - -#ifndef SMP - /* eventually we will use this information for UP also */ - PCPU_SET(vfpcthread, 0); -#endif - tmp &= ~VFPEXC_EN; /* disable the vfp hardware */ - fmxr(VFPEXC , tmp); } -/* discard the registers at cpu_thread_free() when fpcurthread == td. - * Turn off the VFP hardware. +/* + * The current thread is dying. If the state currently in the hardware belongs + * to the current thread, set fpcurthread to NULL to indicate that the VFP + * hardware state does not belong to any thread. If the VFP is on, turn it off. + * Called only from cpu_throw(), so we don't have to worry about a context + * switch here. */ void -vfp_discard() +vfp_discard(struct thread *td) { - u_int tmp = 0; + u_int tmp; + + if (PCPU_GET(fpcurthread) == td) + PCPU_SET(fpcurthread, NULL); - /* - * No need to protect the access to vfpcthread by disabling - * interrupts, since it's called from cpu_throw(), who is called - * with interrupts disabled. - */ - - PCPU_SET(vfpcthread, 0); /* permanent forget about reg */ tmp = fmrx(VFPEXC); - tmp &= ~VFPEXC_EN; /* turn off VFP hardware */ - fmxr(VFPEXC, tmp); + if (tmp & VFPEXC_EN) + fmxr(VFPEXC, tmp & ~VFPEXC_EN); } #endif diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c index c51ae56f5..1e225dba4 100644 --- a/sys/arm/arm/vm_machdep.c +++ b/sys/arm/arm/vm_machdep.c @@ -144,9 +144,9 @@ cpu_fork(register struct thread *td1, register struct proc *p2, bcopy(td1->td_pcb, pcb2, sizeof(*pcb2)); mdp2 = &p2->p_md; bcopy(&td1->td_proc->p_md, mdp2, sizeof(*mdp2)); - pcb2->un_32.pcb32_und_sp = td2->td_kstack + USPACE_UNDEF_STACK_TOP; pcb2->un_32.pcb32_sp = td2->td_kstack + USPACE_SVC_STACK_TOP - sizeof(*pcb2); + pcb2->pcb_vfpcpu = -1; pmap_activate(td2); td2->td_frame = tf = (struct trapframe *)STACKALIGN( pcb2->un_32.pcb32_sp - sizeof(struct trapframe)); @@ -366,7 +366,6 @@ cpu_set_upcall(struct thread *td, struct thread *td0) tf->tf_spsr &= ~PSR_C_bit; tf->tf_r0 = 0; td->td_pcb->un_32.pcb32_sp = (u_int)sf; - td->td_pcb->un_32.pcb32_und_sp = td->td_kstack + USPACE_UNDEF_STACK_TOP; KASSERT((td->td_pcb->un_32.pcb32_sp & 7) == 0, ("cpu_set_upcall: Incorrect stack alignment")); diff --git a/sys/arm/at91/at91.c b/sys/arm/at91/at91.c index dce1f9341..5caa32671 100644 --- a/sys/arm/at91/at91.c +++ b/sys/arm/at91/at91.c @@ -24,6 +24,8 @@ * SUCH DAMAGE. */ +#include "opt_platform.h" + #include __FBSDID("$FreeBSD$"); @@ -49,12 +51,6 @@ __FBSDID("$FreeBSD$"); #include #include -static struct at91_softc *at91_softc; - -static void at91_eoi(void *); - -extern const struct arm_devmap_entry at91_devmap[]; - uint32_t at91_master_clock; static int @@ -84,8 +80,12 @@ at91_bs_unmap(void *t, bus_space_handle_t h, bus_size_t size) { vm_offset_t va, endva; + if (t == 0) + return; va = trunc_page((vm_offset_t)t); - endva = va + round_page(size); + if (va >= AT91_BASE && va <= AT91_BASE + 0xff00000) + return; + endva = round_page((vm_offset_t)t + size); /* Free the kernel virtual mapping. */ kva_free(va, endva - va); @@ -229,6 +229,12 @@ struct bus_space at91_bs_tag = { NULL, }; +#ifndef FDT + +static struct at91_softc *at91_softc; + +static void at91_eoi(void *); + static int at91_probe(device_t dev) { @@ -260,7 +266,6 @@ static int at91_attach(device_t dev) { struct at91_softc *sc = device_get_softc(dev); - int i; arm_post_filter = at91_eoi; @@ -290,29 +295,6 @@ at91_attach(device_t dev) 0xfffffffful) != 0) panic("at91_attach: failed to set up memory rman"); - /* - * Setup the interrupt table. - */ - if (soc_info.soc_data == NULL || soc_info.soc_data->soc_irq_prio == NULL) - panic("Interrupt priority table missing\n"); - for (i = 0; i < 32; i++) { - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR + - i * 4, i); - /* Priority. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4, - soc_info.soc_data->soc_irq_prio[i]); - if (i < 8) - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR, - 1); - } - - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32); - /* No debug. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0); - /* Disable and clear all interrupts. */ - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff); - bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff); - /* * Add this device's children... */ @@ -472,42 +454,6 @@ at91_print_child(device_t dev, device_t child) return (retval); } -void -arm_mask_irq(uintptr_t nb) -{ - - bus_space_write_4(at91_softc->sc_st, - at91_softc->sc_aic_sh, IC_IDCR, 1 << nb); -} - -int -arm_get_next_irq(int last __unused) -{ - int status; - int irq; - - irq = bus_space_read_4(at91_softc->sc_st, - at91_softc->sc_aic_sh, IC_IVR); - status = bus_space_read_4(at91_softc->sc_st, - at91_softc->sc_aic_sh, IC_ISR); - if (status == 0) { - bus_space_write_4(at91_softc->sc_st, - at91_softc->sc_aic_sh, IC_EOICR, 1); - return (-1); - } - return (irq); -} - -void -arm_unmask_irq(uintptr_t nb) -{ - - bus_space_write_4(at91_softc->sc_st, - at91_softc->sc_aic_sh, IC_IECR, 1 << nb); - bus_space_write_4(at91_softc->sc_st, at91_softc->sc_aic_sh, - IC_EOICR, 0); -} - static void at91_eoi(void *unused) { @@ -584,3 +530,4 @@ static driver_t at91_driver = { static devclass_t at91_devclass; DRIVER_MODULE(atmelarm, nexus, at91_driver, at91_devclass, 0, 0); +#endif diff --git a/sys/arm/at91/at91_aic.c b/sys/arm/at91/at91_aic.c new file mode 100644 index 000000000..0f1556c6f --- /dev/null +++ b/sys/arm/at91/at91_aic.c @@ -0,0 +1,188 @@ +/*- + * Copyright (c) 2014 Warner Losh. 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 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 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 "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef FDT +#include +#include +#include +#endif + +static struct aic_softc { + struct resource *mem_res; /* Memory resource */ + void *intrhand; /* Interrupt handle */ + device_t sc_dev; +} *sc; + +static inline uint32_t +RD4(struct aic_softc *sc, bus_size_t off) +{ + + return (bus_read_4(sc->mem_res, off)); +} + +static inline void +WR4(struct aic_softc *sc, bus_size_t off, uint32_t val) +{ + + bus_write_4(sc->mem_res, off, val); +} + +void +arm_mask_irq(uintptr_t nb) +{ + + WR4(sc, IC_IDCR, 1 << nb); +} + +int +arm_get_next_irq(int last __unused) +{ + int status; + int irq; + + irq = RD4(sc, IC_IVR); + status = RD4(sc, IC_ISR); + if (status == 0) { + WR4(sc, IC_EOICR, 1); + return (-1); + } + return (irq); +} + +void +arm_unmask_irq(uintptr_t nb) +{ + + WR4(sc, IC_IECR, 1 << nb); + WR4(sc, IC_EOICR, 0); +} + +static int +at91_aic_probe(device_t dev) +{ +#ifdef FDT + if (!ofw_bus_is_compatible(dev, "atmel,at91rm9200-aic")) + return (ENXIO); +#endif + device_set_desc(dev, "AIC"); + return (0); +} + +static int +at91_aic_attach(device_t dev) +{ + int i, rid, err = 0; + + device_printf(dev, "Attach %d\n", bus_current_pass); + + sc = device_get_softc(dev); + sc->sc_dev = dev; + + rid = 0; + sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, + RF_ACTIVE); + + if (sc->mem_res == NULL) + panic("couldn't allocate register resources"); + + /* + * Setup the interrupt table. + */ + if (soc_info.soc_data == NULL || soc_info.soc_data->soc_irq_prio == NULL) + panic("Interrupt priority table missing\n"); + for (i = 0; i < 32; i++) { + WR4(sc, IC_SVR + i * 4, i); + /* Priority. */ + WR4(sc, IC_SMR + i * 4, soc_info.soc_data->soc_irq_prio[i]); + if (i < 8) + WR4(sc, IC_EOICR, 1); + } + + WR4(sc, IC_SPU, 32); + /* No debug. */ + WR4(sc, IC_DCR, 0); + /* Disable and clear all interrupts. */ + WR4(sc, IC_IDCR, 0xffffffff); + WR4(sc, IC_ICCR, 0xffffffff); + enable_interrupts(I32_bit | F32_bit); + + return (err); +} + +static void +at91_aic_new_pass(device_t dev) +{ + device_printf(dev, "Pass %d\n", bus_current_pass); +} + +static device_method_t at91_aic_methods[] = { + DEVMETHOD(device_probe, at91_aic_probe), + DEVMETHOD(device_attach, at91_aic_attach), + DEVMETHOD(bus_new_pass, at91_aic_new_pass), + DEVMETHOD_END +}; + +static driver_t at91_aic_driver = { + "at91_aic", + at91_aic_methods, + sizeof(struct aic_softc), +}; + +static devclass_t at91_aic_devclass; + +#ifdef FDT +DRIVER_MODULE(at91_aic, simplebus, at91_aic_driver, at91_aic_devclass, NULL, + NULL); +#else +DRIVER_MODULE(at91_aic, atmelarm, at91_aic_driver, at91_aic_devclass, NULL, + NULL); +#endif +/* not yet +EARLY_DRIVER_MODULE(at91_aic, simplebus, at91_aic_driver, at91_aic_devclass, + NULL, NULL, BUS_PASS_INTERRUPT); +*/ diff --git a/sys/arm/at91/at91rm9200.c b/sys/arm/at91/at91rm9200.c index f2ee45060..2cc0c9cfc 100644 --- a/sys/arm/at91/at91rm9200.c +++ b/sys/arm/at91/at91rm9200.c @@ -105,6 +105,7 @@ static const uint32_t at91_pio_base[] = { static const struct cpu_devs at91_devs[] = { + DEVICE("at91_aic", AIC, 0), DEVICE("at91_pmc", PMC, 0), DEVICE("at91_st", ST, 0), DEVICE("at91_pio", PIOA, 0), diff --git a/sys/arm/at91/at91sam9g20.c b/sys/arm/at91/at91sam9g20.c index d4e6347a8..3c17e3aad 100644 --- a/sys/arm/at91/at91sam9g20.c +++ b/sys/arm/at91/at91sam9g20.c @@ -103,6 +103,7 @@ static const uint32_t at91_pio_base[] = { static const struct cpu_devs at91_devs[] = { + DEVICE("at91_aic", AIC, 0), DEVICE("at91_pmc", PMC, 0), DEVICE("at91_wdt", WDT, 0), DEVICE("at91_rst", RSTC, 0), diff --git a/sys/arm/at91/at91sam9g20reg.h b/sys/arm/at91/at91sam9g20reg.h index 539d71864..59f6099b3 100644 --- a/sys/arm/at91/at91sam9g20reg.h +++ b/sys/arm/at91/at91sam9g20reg.h @@ -221,6 +221,7 @@ #define AT91SAM9G20_IRQ_RSTC AT91SAM9G20_IRQ_SYSTEM #define AT91SAM9G20_IRQ_OHCI AT91SAM9G20_IRQ_UHP #define AT91SAM9G20_IRQ_NAND (-1) +#define AT91SAM9G20_IRQ_AIC (-1) #define AT91SAM9G20_AIC_BASE 0xffff000 #define AT91SAM9G20_AIC_SIZE 0x200 diff --git a/sys/arm/at91/at91sam9x5.c b/sys/arm/at91/at91sam9x5.c index 4e8c3f43c..9fe710474 100644 --- a/sys/arm/at91/at91sam9x5.c +++ b/sys/arm/at91/at91sam9x5.c @@ -104,6 +104,7 @@ static const uint32_t at91_pio_base[] = { static const struct cpu_devs at91_devs[] = { + DEVICE("at91_aic", AIC, 0), DEVICE("at91_pmc", PMC, 0), DEVICE("at91_wdt", WDT, 0), DEVICE("at91_rst", RSTC, 0), diff --git a/sys/arm/at91/files.at91 b/sys/arm/at91/files.at91 index 5533594da..8c366ca5e 100644 --- a/sys/arm/at91/files.at91 +++ b/sys/arm/at91/files.at91 @@ -2,6 +2,7 @@ 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 arm/at91/at91_cfata.c optional at91_cfata arm/at91/at91_mci.c optional at91_mci diff --git a/sys/arm/broadcom/bcm2835/common.c b/sys/arm/broadcom/bcm2835/bcm2835_common.c similarity index 100% rename from sys/arm/broadcom/bcm2835/common.c rename to sys/arm/broadcom/bcm2835/bcm2835_common.c diff --git a/sys/arm/broadcom/bcm2835/bus_space.c b/sys/arm/broadcom/bcm2835/bus_space.c deleted file mode 100644 index 4cce8203a..000000000 --- a/sys/arm/broadcom/bcm2835/bus_space.c +++ /dev/null @@ -1,113 +0,0 @@ -/*- - * Copyright (C) 2012 FreeBSD Foundation - * 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 MARVELL nor the names of contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY 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 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 -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include - -#include - -/* Prototypes for all the bus_space structure functions */ -bs_protos(generic); -bs_protos(generic_armv4); - -struct bus_space _base_tag = { - /* cookie */ - .bs_cookie = (void *) 0, - - /* mapping/unmapping */ - .bs_map = generic_bs_map, - .bs_unmap = generic_bs_unmap, - .bs_subregion = generic_bs_subregion, - - /* allocation/deallocation */ - .bs_alloc = generic_bs_alloc, - .bs_free = generic_bs_free, - - /* barrier */ - .bs_barrier = generic_bs_barrier, - - /* read (single) */ - .bs_r_1 = generic_bs_r_1, - .bs_r_2 = generic_armv4_bs_r_2, - .bs_r_4 = generic_bs_r_4, - .bs_r_8 = NULL, - - /* read multiple */ - .bs_rm_1 = generic_bs_rm_1, - .bs_rm_2 = generic_armv4_bs_rm_2, - .bs_rm_4 = generic_bs_rm_4, - .bs_rm_8 = NULL, - - /* read region */ - .bs_rr_1 = generic_bs_rr_1, - .bs_rr_2 = generic_armv4_bs_rr_2, - .bs_rr_4 = generic_bs_rr_4, - .bs_rr_8 = NULL, - - /* write (single) */ - .bs_w_1 = generic_bs_w_1, - .bs_w_2 = generic_armv4_bs_w_2, - .bs_w_4 = generic_bs_w_4, - .bs_w_8 = NULL, - - /* write multiple */ - .bs_wm_1 = generic_bs_wm_1, - .bs_wm_2 = generic_armv4_bs_wm_2, - .bs_wm_4 = generic_bs_wm_4, - .bs_wm_8 = NULL, - - /* write region */ - .bs_wr_1 = generic_bs_wr_1, - .bs_wr_2 = generic_armv4_bs_wr_2, - .bs_wr_4 = generic_bs_wr_4, - .bs_wr_8 = NULL, - - /* set multiple */ - /* XXX not implemented */ - - /* set region */ - .bs_sr_1 = NULL, - .bs_sr_2 = generic_armv4_bs_sr_2, - .bs_sr_4 = generic_bs_sr_4, - .bs_sr_8 = NULL, - - /* copy */ - .bs_c_1 = NULL, - .bs_c_2 = generic_armv4_bs_c_2, - .bs_c_4 = NULL, - .bs_c_8 = NULL, -}; - -bus_space_tag_t fdtbus_bs_tag = &_base_tag; diff --git a/sys/arm/broadcom/bcm2835/files.bcm2835 b/sys/arm/broadcom/bcm2835/files.bcm2835 index e7356ae5a..4563b3590 100644 --- a/sys/arm/broadcom/bcm2835/files.bcm2835 +++ b/sys/arm/broadcom/bcm2835/files.bcm2835 @@ -1,6 +1,7 @@ # $FreeBSD$ arm/broadcom/bcm2835/bcm2835_bsc.c optional bcm2835_bsc +arm/broadcom/bcm2835/bcm2835_common.c optional fdt arm/broadcom/bcm2835/bcm2835_dma.c standard arm/broadcom/bcm2835/bcm2835_fb.c optional sc arm/broadcom/bcm2835/bcm2835_fbd.c optional vt @@ -12,10 +13,9 @@ arm/broadcom/bcm2835/bcm2835_sdhci.c optional sdhci arm/broadcom/bcm2835/bcm2835_spi.c optional bcm2835_spi arm/broadcom/bcm2835/bcm2835_systimer.c standard arm/broadcom/bcm2835/bcm2835_wdog.c standard -arm/broadcom/bcm2835/bus_space.c optional fdt -arm/broadcom/bcm2835/common.c optional fdt dev/usb/controller/dwc_otg_fdt.c optional dwcotg +arm/arm/bus_space-v6.c standard arm/arm/bus_space_generic.c standard arm/arm/bus_space_asm_generic.S standard arm/arm/cpufunc_asm_arm11.S standard diff --git a/sys/arm/conf/AC100 b/sys/arm/conf/AC100 index d368bdf65..b41cc3689 100644 --- a/sys/arm/conf/AC100 +++ b/sys/arm/conf/AC100 @@ -25,6 +25,9 @@ options FFS #Berkeley Fast Filesystem #options BOOTP_NFSV3 #options BOOTP_WIRED_TO=mge0 +options TMPFS #Efficient memory filesystem +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT options ROOTDEVNAME=\"ufs:/dev/da0p1\" diff --git a/sys/arm/conf/ARMADAXP b/sys/arm/conf/ARMADAXP index 2b4945971..085422daa 100644 --- a/sys/arm/conf/ARMADAXP +++ b/sys/arm/conf/ARMADAXP @@ -26,6 +26,9 @@ options BOOTP_NFSROOT options BOOTP_NFSV3 options BOOTP_WIRED_TO=mge0 +options TMPFS #Efficient memory filesystem +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT options ROOTDEVNAME=\"ufs:/dev/da0p1\" diff --git a/sys/arm/conf/ARNDALE b/sys/arm/conf/ARNDALE index ae2e2650b..0ce39391a 100644 --- a/sys/arm/conf/ARNDALE +++ b/sys/arm/conf/ARNDALE @@ -31,6 +31,9 @@ options HZ=100 ## options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options SOFTUPDATES options UFS_ACL #Support for access control lists diff --git a/sys/arm/conf/ATMEL b/sys/arm/conf/ATMEL index 28c4bec44..c330fade6 100644 --- a/sys/arm/conf/ATMEL +++ b/sys/arm/conf/ATMEL @@ -48,10 +48,13 @@ 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 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization options COMPAT_FREEBSD5 # Compatible with FreeBSD5 diff --git a/sys/arm/conf/AVILA b/sys/arm/conf/AVILA index 502fd2540..38d79cdd8 100644 --- a/sys/arm/conf/AVILA +++ b/sys/arm/conf/AVILA @@ -47,6 +47,9 @@ options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required options SCHED_4BSD #4BSD scheduler options INET #InterNETworking +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options SOFTUPDATES #Enable FFS soft updates support options NFSCL #New Network Filesystem Client diff --git a/sys/arm/conf/BEAGLEBONE b/sys/arm/conf/BEAGLEBONE index c0fb9c6e7..895095cca 100644 --- a/sys/arm/conf/BEAGLEBONE +++ b/sys/arm/conf/BEAGLEBONE @@ -34,6 +34,9 @@ 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 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) diff --git a/sys/arm/conf/BWCT b/sys/arm/conf/BWCT index 28c724ff7..82e09ad93 100644 --- a/sys/arm/conf/BWCT +++ b/sys/arm/conf/BWCT @@ -51,6 +51,9 @@ options NFS_ROOT #NFS usable as /, requires NFSCL options BOOTP_NFSROOT options BOOTP +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) diff --git a/sys/arm/conf/CAMBRIA b/sys/arm/conf/CAMBRIA index 57c638708..1969c5198 100644 --- a/sys/arm/conf/CAMBRIA +++ b/sys/arm/conf/CAMBRIA @@ -48,6 +48,9 @@ options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required options SCHED_4BSD #4BSD scheduler #options PREEMPTION options INET #InterNETworking +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options SOFTUPDATES #Enable FFS soft updates support options NFSCL #New Network Filesystem Client diff --git a/sys/arm/conf/CNS11XXNAS b/sys/arm/conf/CNS11XXNAS index c459d0eec..4984794bd 100644 --- a/sys/arm/conf/CNS11XXNAS +++ b/sys/arm/conf/CNS11XXNAS @@ -53,6 +53,8 @@ options DDB #Enable the kernel debugger options SCHED_ULE #ULE scheduler #options SCHED_4BSD #4BSD scheduler +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. #options GEOM_PART_EBR #options GEOM_PART_EBR_COMPAT @@ -69,6 +71,7 @@ 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 TMPFS #Efficient memory filesystem options MSDOSFS #MSDOS Filesystem #options CD9660 #ISO 9660 Filesystem #options PROCFS #Process filesystem (requires PSEUDOFS) diff --git a/sys/arm/conf/CRB b/sys/arm/conf/CRB index 0a19f3bd3..26efd82a5 100644 --- a/sys/arm/conf/CRB +++ b/sys/arm/conf/CRB @@ -45,6 +45,9 @@ options NFSD #New Network Filesystem Server options NFSLOCKD #Network Lock Manager options NFS_ROOT #NFS usable as /, requires NFSCL #options MSDOSFS #MSDOS Filesystem +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options CD9660 #ISO 9660 Filesystem #options PROCFS #Process filesystem (requires PSEUDOFS) options PSEUDOFS #Pseudo-filesystem framework diff --git a/sys/arm/conf/CUBIEBOARD b/sys/arm/conf/CUBIEBOARD index 7dee59b55..07c8c049a 100644 --- a/sys/arm/conf/CUBIEBOARD +++ b/sys/arm/conf/CUBIEBOARD @@ -29,6 +29,9 @@ options HZ=100 options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options SOFTUPDATES #Enable FFS soft updates support options UFS_ACL #Support for access control lists diff --git a/sys/arm/conf/CUBIEBOARD2 b/sys/arm/conf/CUBIEBOARD2 index 50fc2be74..ccd9edbb7 100644 --- a/sys/arm/conf/CUBIEBOARD2 +++ b/sys/arm/conf/CUBIEBOARD2 @@ -29,6 +29,9 @@ options HZ=100 options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options SOFTUPDATES #Enable FFS soft updates support options UFS_ACL #Support for access control lists diff --git a/sys/arm/conf/DB-78XXX b/sys/arm/conf/DB-78XXX index f3e62f5b6..2617e28fe 100644 --- a/sys/arm/conf/DB-78XXX +++ b/sys/arm/conf/DB-78XXX @@ -16,6 +16,9 @@ makeoptions WERROR="-Werror" options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options NANDFS #NAND Filesystem options NFSCL #New Network Filesystem Client diff --git a/sys/arm/conf/DB-88F5XXX b/sys/arm/conf/DB-88F5XXX index 50ca24e57..c2b8c3eef 100644 --- a/sys/arm/conf/DB-88F5XXX +++ b/sys/arm/conf/DB-88F5XXX @@ -16,6 +16,9 @@ makeoptions WERROR="-Werror" options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options NFSCL #New Network Filesystem Client options NFSLOCKD #Network Lock Manager diff --git a/sys/arm/conf/DB-88F6XXX b/sys/arm/conf/DB-88F6XXX index cf508ad77..8f467eefb 100644 --- a/sys/arm/conf/DB-88F6XXX +++ b/sys/arm/conf/DB-88F6XXX @@ -16,6 +16,9 @@ makeoptions WERROR="-Werror" options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options NANDFS #NAND Filesystem options NFSCL #New Network Filesystem Client diff --git a/sys/arm/conf/DEFAULTS b/sys/arm/conf/DEFAULTS index 102f13060..6755185f5 100644 --- a/sys/arm/conf/DEFAULTS +++ b/sys/arm/conf/DEFAULTS @@ -5,8 +5,3 @@ device mem -options GEOM_PART_BSD -options GEOM_PART_MBR - -options TMPFS - diff --git a/sys/arm/conf/DIGI-CCWMX53 b/sys/arm/conf/DIGI-CCWMX53 index 244cff4bc..229e401cd 100644 --- a/sys/arm/conf/DIGI-CCWMX53 +++ b/sys/arm/conf/DIGI-CCWMX53 @@ -41,10 +41,13 @@ 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 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization #options COMPAT_FREEBSD5 # Compatible with FreeBSD5 diff --git a/sys/arm/conf/DOCKSTAR b/sys/arm/conf/DOCKSTAR index f0ddd5fdf..b87ac9e9d 100644 --- a/sys/arm/conf/DOCKSTAR +++ b/sys/arm/conf/DOCKSTAR @@ -34,12 +34,15 @@ options INET6 #IPv6 communications protocols options SOFTUPDATES options CD9660 #ISO 9660 filesystem options FFS #Berkeley Fast Filesystem +options TMPFS #Efficient memory filesystem options MSDOSFS #MS DOS File System (FAT, FAT32) options NULLFS #NULL filesystem 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 +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_ELI # Disk encryption. options GEOM_LABEL # Providers labelization. options GEOM_PART_GPT # GPT partitioning diff --git a/sys/arm/conf/DREAMPLUG-1001 b/sys/arm/conf/DREAMPLUG-1001 index baebc77ec..7598c7410 100644 --- a/sys/arm/conf/DREAMPLUG-1001 +++ b/sys/arm/conf/DREAMPLUG-1001 @@ -35,6 +35,7 @@ options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols options SOFTUPDATES +options TMPFS #Efficient memory filesystem options CD9660 #ISO 9660 filesystem options FFS #Berkeley Fast Filesystem options MSDOSFS #MS DOS File System (FAT, FAT32) @@ -43,6 +44,8 @@ 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 +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_ELI # Disk encryption. options GEOM_LABEL # Providers labelization. options GEOM_PART_GPT # GPT partitioning diff --git a/sys/arm/conf/EA3250 b/sys/arm/conf/EA3250 index 89d9fa418..fb6a3f801 100644 --- a/sys/arm/conf/EA3250 +++ b/sys/arm/conf/EA3250 @@ -20,6 +20,9 @@ options FFS #Berkeley Fast Filesystem options NFSCL #Network Filesystem Client options NFSLOCKD #Network Lock Manager options NFS_ROOT #NFS usable as /, requires NFSCLIENT +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options MSDOSFS options BOOTP options BOOTP_NFSROOT diff --git a/sys/arm/conf/EB9200 b/sys/arm/conf/EB9200 index 0570699ef..8c3838355 100644 --- a/sys/arm/conf/EB9200 +++ b/sys/arm/conf/EB9200 @@ -41,6 +41,9 @@ options NFS_ROOT #NFS usable as /, requires NFSCL options BOOTP_NFSROOT options BOOTP +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) diff --git a/sys/arm/conf/EFIKA_MX b/sys/arm/conf/EFIKA_MX index ca95f0c2c..885f16c38 100644 --- a/sys/arm/conf/EFIKA_MX +++ b/sys/arm/conf/EFIKA_MX @@ -41,10 +41,13 @@ 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 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization #options COMPAT_FREEBSD5 # Compatible with FreeBSD5 diff --git a/sys/arm/conf/EP80219 b/sys/arm/conf/EP80219 index 107ef4b5b..ce0d718e4 100644 --- a/sys/arm/conf/EP80219 +++ b/sys/arm/conf/EP80219 @@ -43,6 +43,7 @@ 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 TMPFS #Efficient memory filesystem #options MSDOSFS #MSDOS Filesystem options CD9660 #ISO 9660 Filesystem #options PROCFS #Process filesystem (requires PSEUDOFS) @@ -54,6 +55,8 @@ options SYSVMSG #SYSV-style message queues options SYSVSEM #SYSV-style semaphores options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions options KBD_INSTALL_CDEV # install a CDEV entry in /dev +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Providers labelization. diff --git a/sys/arm/conf/ETHERNUT5 b/sys/arm/conf/ETHERNUT5 index ef52bc684..13a9845f9 100644 --- a/sys/arm/conf/ETHERNUT5 +++ b/sys/arm/conf/ETHERNUT5 @@ -41,6 +41,9 @@ 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) diff --git a/sys/arm/conf/GUMSTIX b/sys/arm/conf/GUMSTIX index 8b9824c60..413931b84 100644 --- a/sys/arm/conf/GUMSTIX +++ b/sys/arm/conf/GUMSTIX @@ -47,6 +47,9 @@ options UFS_DIRHASH #Improve performance on big directories options NFSCL #New Network Filesystem Client #options NFSD #New Network Filesystem Server 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) diff --git a/sys/arm/conf/HL200 b/sys/arm/conf/HL200 index 8df55cd53..a3b5640a7 100644 --- a/sys/arm/conf/HL200 +++ b/sys/arm/conf/HL200 @@ -49,6 +49,9 @@ options BOOTP_NFSV3 options BOOTP_WIRED_TO=ate0 options BOOTP_COMPAT +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) diff --git a/sys/arm/conf/HL201 b/sys/arm/conf/HL201 index 8178e3bc1..4ee002004 100644 --- a/sys/arm/conf/HL201 +++ b/sys/arm/conf/HL201 @@ -52,6 +52,9 @@ options NFS_ROOT #NFS usable as /, requires NFSCL options ALT_BREAK_TO_DEBUGGER +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) diff --git a/sys/arm/conf/IMX53-QSB b/sys/arm/conf/IMX53-QSB index 1561368d1..016778125 100644 --- a/sys/arm/conf/IMX53-QSB +++ b/sys/arm/conf/IMX53-QSB @@ -40,10 +40,13 @@ 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 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization #options COMPAT_FREEBSD5 # Compatible with FreeBSD5 diff --git a/sys/arm/conf/IMX6 b/sys/arm/conf/IMX6 index 26a135f04..3f8a9e4ff 100644 --- a/sys/arm/conf/IMX6 +++ b/sys/arm/conf/IMX6 @@ -36,10 +36,13 @@ 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 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization options KTRACE # ktrace(1) support diff --git a/sys/arm/conf/IQ31244 b/sys/arm/conf/IQ31244 index ba303c7fe..9868511bf 100644 --- a/sys/arm/conf/IQ31244 +++ b/sys/arm/conf/IQ31244 @@ -44,6 +44,9 @@ 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) diff --git a/sys/arm/conf/KB920X b/sys/arm/conf/KB920X index 7cf56d829..1e1eb5c01 100644 --- a/sys/arm/conf/KB920X +++ b/sys/arm/conf/KB920X @@ -47,6 +47,9 @@ options NFSCL #New Network Filesystem Client #options BOOTP_NFSROOT #options BOOTP +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) diff --git a/sys/arm/conf/LN2410SBC b/sys/arm/conf/LN2410SBC index 8d2a58589..40414f73b 100644 --- a/sys/arm/conf/LN2410SBC +++ b/sys/arm/conf/LN2410SBC @@ -47,6 +47,9 @@ options ROOTDEVNAME=\"ufs:da0s1\" #options NFSCL #New Network Filesystem Client #options NFS_ROOT #NFS usable as root device +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options PSEUDOFS #Pseudo-filesystem framework #options SCSI_DELAY=5000 #Delay (in ms) before probing SCSI options KTRACE #ktrace(1) support diff --git a/sys/arm/conf/NSLU b/sys/arm/conf/NSLU index 3da5adf39..e8094ca22 100644 --- a/sys/arm/conf/NSLU +++ b/sys/arm/conf/NSLU @@ -61,6 +61,9 @@ 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) diff --git a/sys/arm/conf/PANDABOARD b/sys/arm/conf/PANDABOARD index 3c6132920..9e6e5147d 100644 --- a/sys/arm/conf/PANDABOARD +++ b/sys/arm/conf/PANDABOARD @@ -54,6 +54,9 @@ options NFS_ROOT #NFS usable as /, requires NFSCLIENT #options BOOTP #options BOOTP_NFSV3 #options BOOTP_WIRED_TO=ue0 +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) diff --git a/sys/arm/conf/QILA9G20 b/sys/arm/conf/QILA9G20 index e3cc91466..a1960205e 100644 --- a/sys/arm/conf/QILA9G20 +++ b/sys/arm/conf/QILA9G20 @@ -53,6 +53,9 @@ options ROOTDEVNAME=\"ufs:/dev/mmcsd0s1a\" options ALT_BREAK_TO_DEBUGGER +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) diff --git a/sys/arm/conf/RADXA b/sys/arm/conf/RADXA index 0396c2f6d..b6edf43e7 100644 --- a/sys/arm/conf/RADXA +++ b/sys/arm/conf/RADXA @@ -33,6 +33,9 @@ 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 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) diff --git a/sys/arm/conf/RPI-B b/sys/arm/conf/RPI-B index 5fe031b9f..711db77d4 100644 --- a/sys/arm/conf/RPI-B +++ b/sys/arm/conf/RPI-B @@ -32,6 +32,9 @@ 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options MSDOSFS #MSDOS Filesystem device snp diff --git a/sys/arm/conf/SAM9260EK b/sys/arm/conf/SAM9260EK index 8f137e089..5b40706c3 100644 --- a/sys/arm/conf/SAM9260EK +++ b/sys/arm/conf/SAM9260EK @@ -25,6 +25,7 @@ include "../at91/std.sam9260ek" hints "SAM9260EK.hints" #makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols +makeoptions MODULES_OVERRIDE="" options SCHED_4BSD # 4BSD scheduler #options PREEMPTION # Enable kernel thread preemption @@ -42,10 +43,13 @@ 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 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 GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme #options GEOM_PART_GPT # GUID Partition Tables. #options GEOM_LABEL # Provides labelization #options COMPAT_FREEBSD5 # Compatible with FreeBSD5 @@ -168,3 +172,12 @@ device at91_wdt # Atmel AT91 Watchdog Timer # NAND Flash - Reference design has Samsung 256MB but others possible device nand # NAND interface on CS3 + +# Coming soon, but not yet +#options FDT +#options FDT_DTB_STATIC +#makeoptions FDT_DTS_FILE=sam9260ek.dts + +options EARLY_PRINTF +options SOCDEV_PA=0xfc000000 +options SOCDEV_VA=0xdc000000 diff --git a/sys/arm/conf/SAM9G20EK b/sys/arm/conf/SAM9G20EK index faa325ac1..04a84b2ad 100644 --- a/sys/arm/conf/SAM9G20EK +++ b/sys/arm/conf/SAM9G20EK @@ -32,6 +32,9 @@ options KDB options SCHED_4BSD #4BSD scheduler options INET #InterNETworking #options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem #options SOFTUPDATES #Enable FFS soft updates support #options UFS_ACL #Support for access control lists diff --git a/sys/arm/conf/SAM9X25EK b/sys/arm/conf/SAM9X25EK index 9363fb94c..4088e90d5 100644 --- a/sys/arm/conf/SAM9X25EK +++ b/sys/arm/conf/SAM9X25EK @@ -33,6 +33,9 @@ options KDB options SCHED_4BSD #4BSD scheduler options INET #InterNETworking #options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem #options SOFTUPDATES #Enable FFS soft updates support #options UFS_ACL #Support for access control lists diff --git a/sys/arm/conf/SHEEVAPLUG b/sys/arm/conf/SHEEVAPLUG index c6bd901cb..2d0daded1 100644 --- a/sys/arm/conf/SHEEVAPLUG +++ b/sys/arm/conf/SHEEVAPLUG @@ -16,6 +16,9 @@ makeoptions WERROR="-Werror" options SCHED_4BSD #4BSD scheduler options INET #InterNETworking options INET6 #IPv6 communications protocols +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options FFS #Berkeley Fast Filesystem options NANDFS #NAND Filesystem options NFSCL #New Network Filesystem Client diff --git a/sys/arm/conf/SIMICS b/sys/arm/conf/SIMICS index 8988d2728..6ea8e507e 100644 --- a/sys/arm/conf/SIMICS +++ b/sys/arm/conf/SIMICS @@ -43,6 +43,9 @@ 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) diff --git a/sys/arm/conf/SN9G45 b/sys/arm/conf/SN9G45 index 05c906254..1d8a1b4e6 100644 --- a/sys/arm/conf/SN9G45 +++ b/sys/arm/conf/SN9G45 @@ -52,6 +52,9 @@ options ROOTDEVNAME=\"ufs:/dev/da0s1\" options ALT_BREAK_TO_DEBUGGER +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) diff --git a/sys/arm/conf/TS7800 b/sys/arm/conf/TS7800 index 79e9dbae4..c836c1d23 100644 --- a/sys/arm/conf/TS7800 +++ b/sys/arm/conf/TS7800 @@ -26,6 +26,10 @@ options BOOTP_NFSROOT options BOOTP_NFSV3 options BOOTP_WIRED_TO=mge0 +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem + options SYSVSHM #SYSV-style shared memory options SYSVMSG #SYSV-style message queues options SYSVSEM #SYSV-style semaphores diff --git a/sys/arm/conf/VERSATILEPB b/sys/arm/conf/VERSATILEPB index 6f884d151..28b76a589 100644 --- a/sys/arm/conf/VERSATILEPB +++ b/sys/arm/conf/VERSATILEPB @@ -43,6 +43,9 @@ options UFS_ACL #Support for access control lists options UFS_DIRHASH #Improve performance on big directories device snp +options GEOM_PART_BSD #BSD partition scheme +options GEOM_PART_MBR #MBR partition scheme +options TMPFS #Efficient memory filesystem options PSEUDOFS #Pseudo-filesystem framework options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] options SCSI_DELAY=5000 #Delay (in ms) before probing SCSI diff --git a/sys/arm/conf/VYBRID.common b/sys/arm/conf/VYBRID.common index 3c5ca9fd9..70fef0240 100644 --- a/sys/arm/conf/VYBRID.common +++ b/sys/arm/conf/VYBRID.common @@ -33,6 +33,9 @@ options FFS #Berkeley Fast Filesystem options SOFTUPDATES options UFS_ACL #Support for access control lists options UFS_DIRHASH #Improve performance on big directories +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) diff --git a/sys/arm/conf/ZEDBOARD b/sys/arm/conf/ZEDBOARD index 464850aed..9fa2008d2 100644 --- a/sys/arm/conf/ZEDBOARD +++ b/sys/arm/conf/ZEDBOARD @@ -41,6 +41,9 @@ options NFSCL #Network Filesystem Client # options BOOTP_NFSROOT # options BOOTP +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) diff --git a/sys/arm/freescale/imx/files.imx51 b/sys/arm/freescale/imx/files.imx51 index c4ef506e9..49781485f 100644 --- a/sys/arm/freescale/imx/files.imx51 +++ b/sys/arm/freescale/imx/files.imx51 @@ -8,9 +8,9 @@ arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # Init +arm/freescale/imx/imx_common.c standard arm/freescale/imx/imx_machdep.c standard arm/freescale/imx/imx51_machdep.c standard -arm/freescale/imx/common.c standard arm/freescale/imx/bus_space.c standard # Dummy serial console diff --git a/sys/arm/freescale/imx/files.imx53 b/sys/arm/freescale/imx/files.imx53 index c51c86760..34774168b 100644 --- a/sys/arm/freescale/imx/files.imx53 +++ b/sys/arm/freescale/imx/files.imx53 @@ -8,9 +8,9 @@ arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # Init +arm/freescale/imx/imx_common.c standard arm/freescale/imx/imx_machdep.c standard arm/freescale/imx/imx53_machdep.c standard -arm/freescale/imx/common.c standard arm/freescale/imx/bus_space.c standard # Special serial console for debuging early boot code diff --git a/sys/arm/freescale/imx/files.imx6 b/sys/arm/freescale/imx/files.imx6 index 41060dac5..8b718d661 100644 --- a/sys/arm/freescale/imx/files.imx6 +++ b/sys/arm/freescale/imx/files.imx6 @@ -18,8 +18,8 @@ arm/arm/gic.c standard arm/arm/pl310.c standard arm/freescale/imx/bus_space.c standard arm/freescale/fsl_ocotp.c standard -arm/freescale/imx/common.c standard arm/freescale/imx/imx6_anatop.c standard +arm/freescale/imx/imx_common.c standard arm/freescale/imx/imx6_ccm.c standard arm/freescale/imx/imx6_machdep.c standard arm/freescale/imx/imx6_mp.c optional smp diff --git a/sys/arm/freescale/imx/common.c b/sys/arm/freescale/imx/imx_common.c similarity index 100% rename from sys/arm/freescale/imx/common.c rename to sys/arm/freescale/imx/imx_common.c diff --git a/sys/arm/include/param.h b/sys/arm/include/param.h index 15fc27937..5cd0b7bb9 100644 --- a/sys/arm/include/param.h +++ b/sys/arm/include/param.h @@ -125,10 +125,8 @@ #define KSTACK_GUARD_PAGES 1 #endif /* !KSTACK_GUARD_PAGES */ -#define USPACE_SVC_STACK_TOP KSTACK_PAGES * PAGE_SIZE -#define USPACE_SVC_STACK_BOTTOM (USPACE_SVC_STACK_TOP - 0x1000) -#define USPACE_UNDEF_STACK_TOP (USPACE_SVC_STACK_BOTTOM - 0x10) -#define USPACE_UNDEF_STACK_BOTTOM (FPCONTEXTSIZE + 10) +#define USPACE_SVC_STACK_TOP (KSTACK_PAGES * PAGE_SIZE) + /* * Mach derived conversion macros */ diff --git a/sys/arm/include/pcb.h b/sys/arm/include/pcb.h index 8a762aa67..0806cd88a 100644 --- a/sys/arm/include/pcb.h +++ b/sys/arm/include/pcb.h @@ -61,7 +61,6 @@ struct pcb_arm32 { u_int pcb32_sp; /* used */ u_int pcb32_lr; u_int pcb32_pc; - u_int pcb32_und_sp; }; #define pcb_pagedir un_32.pcb32_pagedir #define pcb_pl1vec un_32.pcb32_pl1vec diff --git a/sys/arm/include/pcpu.h b/sys/arm/include/pcpu.h index 1771a8e82..ee79343af 100644 --- a/sys/arm/include/pcpu.h +++ b/sys/arm/include/pcpu.h @@ -46,9 +46,8 @@ struct vmspace; unsigned int pc_vfpsid; \ unsigned int pc_vfpmvfr0; \ unsigned int pc_vfpmvfr1; \ - struct thread *pc_vfpcthread; \ struct pmap *pc_curpmap; \ - char __pad[133] + char __pad[137] #else #define PCPU_MD_FIELDS \ char __pad[157] diff --git a/sys/arm/include/vfp.h b/sys/arm/include/vfp.h index 623f0d011..befba18ec 100644 --- a/sys/arm/include/vfp.h +++ b/sys/arm/include/vfp.h @@ -126,6 +126,10 @@ #define COPROC10 (0x3 << 20) #define COPROC11 (0x3 << 22) +#ifndef LOCORE void vfp_init(void); +void vfp_store(struct vfp_state *, boolean_t); +void vfp_discard(struct thread *); +#endif #endif diff --git a/sys/arm/mv/files.mv b/sys/arm/mv/files.mv index 116356d8a..4fbdc6d17 100644 --- a/sys/arm/mv/files.mv +++ b/sys/arm/mv/files.mv @@ -23,8 +23,8 @@ arm/arm/cpufunc_asm_pj4b.S standard arm/arm/irq_dispatch.S standard arm/mv/bus_space.c standard -arm/mv/common.c standard arm/mv/gpio.c standard +arm/mv/mv_common.c standard arm/mv/mv_localbus.c standard arm/mv/mv_machdep.c standard arm/mv/mv_pci.c optional pci diff --git a/sys/arm/mv/common.c b/sys/arm/mv/mv_common.c similarity index 99% rename from sys/arm/mv/common.c rename to sys/arm/mv/mv_common.c index 366fcf153..44c22cb20 100644 --- a/sys/arm/mv/common.c +++ b/sys/arm/mv/mv_common.c @@ -153,8 +153,11 @@ struct fdt_pm_mask_entry fdt_pm_mask_table[] = { static __inline int pm_is_disabled(uint32_t mask) { - +#if defined(SOC_MV_KIRKWOOD) + return (soc_power_ctrl_get(mask) == mask); +#else return (soc_power_ctrl_get(mask) == mask ? 0 : 1); +#endif } /* @@ -221,7 +224,16 @@ fdt_pm(phandle_t node) continue; compat = fdt_is_compatible(node, fdt_pm_mask_table[i].compat); - +#if defined(SOC_MV_KIRKWOOD) + if (compat && (cpu_pm_ctrl & fdt_pm_mask_table[i].mask)) { + dev_mask |= (1 << i); + ena = 0; + break; + } else if (compat) { + dev_mask |= (1 << i); + break; + } +#else if (compat && (~cpu_pm_ctrl & fdt_pm_mask_table[i].mask)) { dev_mask |= (1 << i); ena = 0; @@ -230,6 +242,7 @@ fdt_pm(phandle_t node) dev_mask |= (1 << i); break; } +#endif } return (ena); diff --git a/sys/arm/mv/mvreg.h b/sys/arm/mv/mvreg.h index 79398d911..1d6efed13 100644 --- a/sys/arm/mv/mvreg.h +++ b/sys/arm/mv/mvreg.h @@ -142,7 +142,11 @@ /* * Power Control */ +#if defined(SOC_MV_KIRKWOOD) +#define CPU_PM_CTRL 0x18 +#else #define CPU_PM_CTRL 0x1C +#endif #define CPU_PM_CTRL_NONE 0 #define CPU_PM_CTRL_ALL ~0x0 diff --git a/sys/arm/rockchip/files.rk30xx b/sys/arm/rockchip/files.rk30xx index 6a7a7c684..7fcd411d1 100644 --- a/sys/arm/rockchip/files.rk30xx +++ b/sys/arm/rockchip/files.rk30xx @@ -13,7 +13,7 @@ arm/arm/gic.c standard arm/arm/mpcore_timer.c standard arm/rockchip/bus_space.c standard -arm/rockchip/common.c standard +arm/rockchip/rk30xx_common.c standard arm/rockchip/rk30xx_machdep.c standard arm/rockchip/rk30xx_pmu.c standard arm/rockchip/rk30xx_grf.c standard diff --git a/sys/arm/rockchip/common.c b/sys/arm/rockchip/rk30xx_common.c similarity index 100% rename from sys/arm/rockchip/common.c rename to sys/arm/rockchip/rk30xx_common.c diff --git a/sys/arm/samsung/exynos/common.c b/sys/arm/samsung/exynos/exynos5_common.c similarity index 100% rename from sys/arm/samsung/exynos/common.c rename to sys/arm/samsung/exynos/exynos5_common.c diff --git a/sys/arm/samsung/exynos/files.exynos5 b/sys/arm/samsung/exynos/files.exynos5 index 1d90415e6..bb8218e4c 100644 --- a/sys/arm/samsung/exynos/files.exynos5 +++ b/sys/arm/samsung/exynos/files.exynos5 @@ -16,7 +16,7 @@ arm/arm/generic_timer.c standard arm/samsung/exynos/arch_timer.c standard arm/samsung/exynos/exynos5_mp.c optional smp -arm/samsung/exynos/common.c standard +arm/samsung/exynos/exynos5_common.c standard arm/samsung/exynos/exynos5_machdep.c standard arm/samsung/exynos/uart.c optional uart arm/samsung/exynos/ehci_exynos5.c optional ehci diff --git a/sys/arm/tegra/files.tegra2 b/sys/arm/tegra/files.tegra2 index 7f6e8937b..de91f32fe 100644 --- a/sys/arm/tegra/files.tegra2 +++ b/sys/arm/tegra/files.tegra2 @@ -11,7 +11,7 @@ arm/arm/irq_dispatch.S standard arm/arm/gic.c standard arm/arm/mpcore_timer.c standard -arm/tegra/common.c standard +arm/tegra/tegra2_common.c standard arm/tegra/tegra2_machdep.c standard kern/kern_clocksource.c standard diff --git a/sys/arm/tegra/common.c b/sys/arm/tegra/tegra2_common.c similarity index 100% rename from sys/arm/tegra/common.c rename to sys/arm/tegra/tegra2_common.c diff --git a/sys/arm/ti/files.ti b/sys/arm/ti/files.ti index b2c964a4f..510dbf982 100644 --- a/sys/arm/ti/files.ti +++ b/sys/arm/ti/files.ti @@ -11,7 +11,7 @@ arm/arm/cpufunc_asm_arm11.S standard arm/arm/cpufunc_asm_armv7.S standard arm/arm/irq_dispatch.S standard -arm/ti/common.c standard +arm/ti/ti_common.c standard arm/ti/ti_cpuid.c standard arm/ti/ti_machdep.c standard arm/ti/ti_prcm.c standard diff --git a/sys/arm/ti/common.c b/sys/arm/ti/ti_common.c similarity index 100% rename from sys/arm/ti/common.c rename to sys/arm/ti/ti_common.c diff --git a/sys/arm/versatile/files.versatile b/sys/arm/versatile/files.versatile index 702a2366b..ba892b362 100644 --- a/sys/arm/versatile/files.versatile +++ b/sys/arm/versatile/files.versatile @@ -9,11 +9,11 @@ arm/arm/cpufunc_asm_armv6.S standard arm/arm/irq_dispatch.S standard arm/versatile/bus_space.c standard -arm/versatile/common.c standard arm/versatile/pl050.c optional sc arm/versatile/sp804.c standard arm/versatile/versatile_machdep.c standard arm/versatile/versatile_clcd.c optional sc +arm/versatile/versatile_common.c standard arm/versatile/versatile_pci.c optional pci arm/versatile/versatile_pci_bus_space.c optional pci arm/versatile/versatile_sic.c standard diff --git a/sys/arm/versatile/common.c b/sys/arm/versatile/versatile_common.c similarity index 100% rename from sys/arm/versatile/common.c rename to sys/arm/versatile/versatile_common.c diff --git a/sys/boot/fdt/dts/arm/hl201.dts b/sys/boot/fdt/dts/arm/hl201.dts new file mode 100644 index 000000000..1566b30f8 --- /dev/null +++ b/sys/boot/fdt/dts/arm/hl201.dts @@ -0,0 +1,44 @@ +/* + * Hot-e HL-201 - Warner Losh public domain + * + * $FreeBSD$ + */ +/dts-v1/; + +/* + * The following is a white lie. The HL-201 is a stripped down version of + * the SAM9G20EK board with a video output chip. + */ +#include "at91sam9g20ek_common.dtsi" + +/ { + model = "Thinlinx HL201"; + compatible = "thinlinx,hl201", "atmel,at91sam9g20ek", "atmel,at91sam9g20", "atmel,at91sam9"; + + leds { + compatible = "gpio-leds"; + + ds1 { + label = "ds1"; + gpios = <&pioA 9 0>; + linux,default-trigger = "heartbeat"; + }; + + ds5 { + label = "ds5"; + gpios = <&pioA 6 1>; + }; + }; + + /* Missing: one wire serial number, video chip */ + + aliases { + dbgu = &dbgu; + }; + + + chosen { + stdin = "dbgu"; + stdout = "dbgu"; + }; +}; diff --git a/sys/dev/ffec/if_ffec.c b/sys/dev/ffec/if_ffec.c index 16b9baae3..3acec6eb0 100644 --- a/sys/dev/ffec/if_ffec.c +++ b/sys/dev/ffec/if_ffec.c @@ -958,9 +958,10 @@ ffec_setup_rxfilter(struct ffec_softc *sc) TAILQ_FOREACH(ifma, &sc->ifp->if_multiaddrs, ifma_link) { if (ifma->ifma_addr->sa_family != AF_LINK) continue; - crc = ether_crc32_be(LLADDR((struct sockaddr_dl *) + /* 6 bits from MSB in LE CRC32 are used for hash. */ + crc = ether_crc32_le(LLADDR((struct sockaddr_dl *) ifma->ifma_addr), ETHER_ADDR_LEN); - ghash |= 1LLU << (crc & 0x3f); + ghash |= 1LLU << (((uint8_t *)&crc)[3] >> 2); } if_maddr_runlock(ifp); } diff --git a/sys/dev/uart/uart_bus_fdt.c b/sys/dev/uart/uart_bus_fdt.c index f434f4f4f..92e155b34 100644 --- a/sys/dev/uart/uart_bus_fdt.c +++ b/sys/dev/uart/uart_bus_fdt.c @@ -97,9 +97,12 @@ uart_fdt_get_clock(phandle_t node, pcell_t *cell) { pcell_t clock; + /* + * clock-frequency is a FreeBSD-specific hack. Make its presence optional. + */ if ((OF_getprop(node, "clock-frequency", &clock, sizeof(clock))) <= 0) - return (ENXIO); + clock = 0; if (clock == 0) /* Try to retrieve parent 'bus-frequency' */ -- 2.45.0