summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2014-05-15 17:30:16 +0000
committerian <ian@FreeBSD.org>2014-05-15 17:30:16 +0000
commit1e3130abad8238f721742fec6f1344d69dfc799a (patch)
tree02c63d840ed8c9a1ca98f1fd2391c32f3d2be191 /sys
parentfa992863d2953ae935e914366aeafac44ad9d005 (diff)
downloadFreeBSD-src-1e3130abad8238f721742fec6f1344d69dfc799a.zip
FreeBSD-src-1e3130abad8238f721742fec6f1344d69dfc799a.tar.gz
MFC r261423, r261424, r261516, r261513, r261562, r261563, r261564, r261565,
r261596, r261606 Add the imx sdhci controller. Move Open Firmware device root on PowerPC, ARM, and MIPS systems to a sub-node of nexus (ofwbus) rather than direct attach under nexus. This fixes FDT on x86 and will make coexistence with ACPI on ARM systems easier. SPARC is unchanged. Add the missing ')' at end of sentence. Reword it to use a more common idiom. Pass the kernel physical address to initarm through the boot param struct. Make functions only used in vfp.c static, and remove vfp_enable. Fix __syscall on armeb EABI. As it returns a 64-bit value it needs to place 32-bit data in r1, not r0. 64-bit data is already packed correctly. Use abp_physaddr for the physical address over KERNPHYSADDR. This helps us remove the need to load the kernel at a fixed address. Remove references to PHYSADDR where it's used only in debugging output. Dynamically generate the page table. This will allow us to detect the physical address we are loaded at to change the mapping.
Diffstat (limited to 'sys')
-rw-r--r--sys/arm/arm/elf_trampoline.c2
-rw-r--r--sys/arm/arm/locore.S95
-rw-r--r--sys/arm/arm/machdep.c29
-rw-r--r--sys/arm/arm/nexus.c14
-rw-r--r--sys/arm/arm/pmap-v6.c2
-rw-r--r--sys/arm/arm/pmap.c2
-rw-r--r--sys/arm/arm/support.S2
-rw-r--r--sys/arm/arm/vfp.c21
-rw-r--r--sys/arm/arm/vm_machdep.c16
-rw-r--r--sys/arm/at91/at91_machdep.c3
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2835_fb.c2
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2835_fbd.c2
-rw-r--r--sys/arm/econa/econa_machdep.c3
-rw-r--r--sys/arm/freescale/imx/tzic.c4
-rw-r--r--sys/arm/include/cpu.h1
-rw-r--r--sys/arm/include/machdep.h2
-rw-r--r--sys/arm/mv/mv_localbus.c2
-rw-r--r--sys/arm/mv/mv_pci.c2
-rw-r--r--sys/arm/s3c2xx0/s3c24x0_machdep.c3
-rw-r--r--sys/arm/xscale/ixp425/avila_machdep.c3
-rw-r--r--sys/conf/files3
-rw-r--r--sys/conf/files.powerpc2
-rw-r--r--sys/dev/fdt/fdtbus.c91
-rw-r--r--sys/dev/fdt/simplebus.c2
-rw-r--r--sys/dev/mmc/mmc.c6
-rw-r--r--sys/dev/ofw/ofw_nexus.h40
-rw-r--r--sys/dev/ofw/ofwbus.c (renamed from sys/dev/ofw/ofw_nexus.c)193
-rw-r--r--sys/dev/powermac_nvram/powermac_nvram.c2
-rw-r--r--sys/mips/beri/beri_simplebus.c2
-rw-r--r--sys/mips/mips/nexus.c15
-rw-r--r--sys/powerpc/mambo/mambo.c2
-rw-r--r--sys/powerpc/mpc85xx/lbc.c2
-rw-r--r--sys/powerpc/mpc85xx/pci_mpc85xx.c2
-rw-r--r--sys/powerpc/ofw/ofw_cpu.c2
-rw-r--r--sys/powerpc/ofw/openpic_ofw.c2
-rw-r--r--sys/powerpc/powermac/cpcht.c2
-rw-r--r--sys/powerpc/powermac/grackle.c2
-rw-r--r--sys/powerpc/powermac/smu.c2
-rw-r--r--sys/powerpc/powermac/uninorth.c2
-rw-r--r--sys/powerpc/powermac/uninorthpci.c2
-rw-r--r--sys/powerpc/powerpc/nexus.c39
-rw-r--r--sys/powerpc/pseries/rtas_dev.c2
-rw-r--r--sys/powerpc/pseries/rtas_pci.c2
-rw-r--r--sys/powerpc/pseries/vdevice.c2
-rw-r--r--sys/powerpc/pseries/xics.c4
-rw-r--r--sys/powerpc/psim/iobus.c2
46 files changed, 273 insertions, 364 deletions
diff --git a/sys/arm/arm/elf_trampoline.c b/sys/arm/arm/elf_trampoline.c
index c27880e..a490a83 100644
--- a/sys/arm/arm/elf_trampoline.c
+++ b/sys/arm/arm/elf_trampoline.c
@@ -189,7 +189,7 @@ _startC(void)
int physaddr = KERNPHYSADDR;
int tmp1;
unsigned int sp = ((unsigned int)&_end & ~3) + 4;
-#if defined(FLASHADDR) && defined(LOADERRAMADDR)
+#if defined(FLASHADDR) && defined(PHYSADDR) && defined(LOADERRAMADDR)
unsigned int pc;
__asm __volatile("mov %0, pc\n"
diff --git a/sys/arm/arm/locore.S b/sys/arm/arm/locore.S
index 609c310..f018927 100644
--- a/sys/arm/arm/locore.S
+++ b/sys/arm/arm/locore.S
@@ -153,22 +153,27 @@ Lunmapped:
ldr r2, =(KERNVIRTADDR - KERNPHYSADDR)
sub r0, r1, r2
- adr r4, mmu_init_table
- b 3f
-
-2:
- str r3, [r0, r2]
- add r2, r2, #4
- add r3, r3, #(L1_S_SIZE)
- adds r1, r1, #-1
- bhi 2b
-3:
- ldmia r4!, {r1,r2,r3} /* # of sections, VA, PA|attr */
- cmp r1, #0
- adrne r5, 2b
- bicne r5, r5, #0xf0000000
- orrne r5, r5, #PHYSADDR
- movne pc, r5
+ /*
+ * Map PA == VA
+ */
+ ldr r5, =(PHYSADDR)
+ mov r1, r5
+ mov r2, r5
+ /* Map 64MiB, preserved over calls to build_pagetables */
+ mov r3, #64
+ bl build_pagetables
+
+ /* Create the kernel map to jump to */
+ mov r1, r5
+ ldr r2, =(KERNBASE)
+ bl build_pagetables
+
+#if defined(SOCDEV_PA) && defined(SOCDEV_VA)
+ /* Create the custom map */
+ ldr r1, =SOCDEV_VA
+ ldr r2, =SOCDEV_PA
+ bl build_pagetables
+#endif
#if defined(SMP)
orr r0, r0, #2 /* Set TTB shared memory flag */
@@ -216,7 +221,7 @@ mmu_done:
ldr pc, .Lvirt_done
virt_done:
- mov r1, #20 /* loader info size is 20 bytes also second arg */
+ mov r1, #24 /* loader info size is 24 bytes also second arg */
subs sp, sp, r1 /* allocate arm_boot_params struct on stack */
bic sp, sp, #7 /* align stack to 8 bytes */
mov r0, sp /* loader info pointer is first arg */
@@ -225,6 +230,8 @@ virt_done:
str r8, [r0, #8] /* Store r1 from boot loader */
str ip, [r0, #12] /* store r2 from boot loader */
str fp, [r0, #16] /* store r3 from boot loader */
+ ldr r5, =KERNPHYSADDR /* load KERNPHYSADDR as the physical address */
+ str r5, [r0, #20] /* store the physical address */
mov fp, #0 /* trace back starts here */
bl _C_LABEL(initarm) /* Off we go */
@@ -236,6 +243,40 @@ virt_done:
adr r0, .Lmainreturned
b _C_LABEL(panic)
/* NOTREACHED */
+END(btext)
+END(_start)
+
+/*
+ * Builds the page table
+ * r0 - The table base address
+ * r1 - The physical address (trashed)
+ * r2 - The virtual address (trashed)
+ * r3 - The number of 1MiB sections
+ * r4 - Trashed
+ *
+ * Addresses must be 1MiB aligned
+ */
+build_pagetables:
+ /* Set the required page attributed */
+ ldr r4, =(L1_TYPE_S|L1_S_C|L1_S_AP(AP_KRW))
+#if defined(SMP)
+ orr r4, #(L1_SHARED)
+#endif
+ orr r1, r4
+
+ /* Move the virtual address to the correct bit location */
+ lsr r2, #(L1_S_SHIFT - 2)
+
+ mov r4, r3
+1:
+ str r1, [r0, r2]
+ add r2, r2, #4
+ add r1, r1, #(L1_S_SIZE)
+ adds r4, r4, #-1
+ bhi 1b
+
+ RET
+
#define MMU_INIT(va,pa,n_sec,attr) \
.word n_sec ; \
.word 4*((va)>>L1_S_SHIFT) ; \
@@ -255,27 +296,7 @@ Lstartup_pagetable:
Lstartup_pagetable_secondary:
.word temp_pagetable
#endif
-END(btext)
-END(_start)
-mmu_init_table:
- /* fill all table VA==PA */
- /* map SDRAM VA==PA, WT cacheable */
-#if !defined(SMP)
- MMU_INIT(PHYSADDR, PHYSADDR, 64, L1_TYPE_S|L1_S_C|L1_S_AP(AP_KRW))
- /* map VA 0xc0000000..0xc3ffffff to PA */
- MMU_INIT(KERNBASE, PHYSADDR, 64, L1_TYPE_S|L1_S_C|L1_S_AP(AP_KRW))
-#if defined(SOCDEV_PA) && defined(SOCDEV_VA)
- /* Map in 0x04000000 worth of the SoC's devices for bootstrap debugging */
- MMU_INIT(SOCDEV_VA, SOCDEV_PA, 64, L1_TYPE_S|L1_S_C|L1_S_AP(AP_KRW))
-#endif
-#else
- MMU_INIT(PHYSADDR, PHYSADDR , 64, L1_TYPE_S|L1_SHARED|L1_S_C|L1_S_AP(AP_KRW))
- /* map VA 0xc0000000..0xc3ffffff to PA */
- MMU_INIT(KERNBASE, PHYSADDR, 64, L1_TYPE_S|L1_SHARED|L1_S_C|L1_S_AP(AP_KRW))
- MMU_INIT(0x48000000, 0x48000000, 1, L1_TYPE_S|L1_SHARED|L1_S_C|L1_S_AP(AP_KRW))
-#endif /* SMP */
- .word 0 /* end of table */
.Lstart:
.word _edata
.word _ebss
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c
index 191be92..5082fa9 100644
--- a/sys/arm/arm/machdep.c
+++ b/sys/arm/arm/machdep.c
@@ -788,7 +788,7 @@ makectx(struct trapframe *tf, struct pcb *pcb)
* calling pmap_bootstrap.
*/
void
-arm_dump_avail_init(vm_offset_t ramsize, size_t max)
+arm_dump_avail_init(vm_paddr_t physaddr, vm_offset_t ramsize, size_t max)
{
#ifdef LINUX_BOOT_ABI
/*
@@ -814,8 +814,8 @@ arm_dump_avail_init(vm_offset_t ramsize, size_t max)
if (max < 4)
panic("dump_avail too small\n");
- dump_avail[0] = round_page(PHYSADDR);
- dump_avail[1] = trunc_page(PHYSADDR + ramsize);
+ dump_avail[0] = round_page(physaddr);
+ dump_avail[1] = trunc_page(physaddr + ramsize);
dump_avail[2] = 0;
dump_avail[3] = 0;
}
@@ -901,7 +901,7 @@ linux_parse_boot_param(struct arm_boot_params *abp)
board_id = abp->abp_r1;
walker = (struct arm_lbabi_tag *)
- (abp->abp_r2 + KERNVIRTADDR - KERNPHYSADDR);
+ (abp->abp_r2 + KERNVIRTADDR - abp->abp_physaddr);
/* xxx - Need to also look for binary device tree */
if (ATAG_TAG(walker) != ATAG_CORE)
@@ -979,7 +979,7 @@ freebsd_parse_boot_param(struct arm_boot_params *abp)
ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t);
ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t);
#endif
- preload_addr_relocate = KERNVIRTADDR - KERNPHYSADDR;
+ preload_addr_relocate = KERNVIRTADDR - abp->abp_physaddr;
return lastaddr;
}
#endif
@@ -1081,15 +1081,15 @@ print_kenv(void)
}
static void
-physmap_init(struct mem_region *availmem_regions, int availmem_regions_sz)
+physmap_init(struct mem_region *availmem_regions, int availmem_regions_sz,
+ vm_offset_t kernload)
{
int i, j, cnt;
- vm_offset_t phys_kernelend, kernload;
+ vm_offset_t phys_kernelend;
uint32_t s, e, sz;
struct mem_region *mp, *mp1;
- phys_kernelend = KERNPHYSADDR + (virtual_avail - KERNVIRTADDR);
- kernload = KERNPHYSADDR;
+ phys_kernelend = kernload + (virtual_avail - KERNVIRTADDR);
/*
* Remove kernel physical address range from avail
@@ -1327,7 +1327,7 @@ initarm(struct arm_boot_params *abp)
/* Define a macro to simplify memory allocation */
#define valloc_pages(var, np) \
alloc_pages((var).pv_va, (np)); \
- (var).pv_pa = (var).pv_va + (KERNPHYSADDR - KERNVIRTADDR);
+ (var).pv_pa = (var).pv_va + (abp->abp_physaddr - KERNVIRTADDR);
#define alloc_pages(var, np) \
(var) = freemempos; \
@@ -1348,7 +1348,7 @@ initarm(struct arm_boot_params *abp)
L2_TABLE_SIZE_REAL * (i - j);
kernel_pt_table[i].pv_pa =
kernel_pt_table[i].pv_va - KERNVIRTADDR +
- KERNPHYSADDR;
+ abp->abp_physaddr;
}
}
@@ -1393,7 +1393,7 @@ initarm(struct arm_boot_params *abp)
pmap_curmaxkvaddr = l2_start + (l2size - 1) * L1_S_SIZE;
/* Map kernel code and data */
- pmap_map_chunk(l1pagetable, KERNVIRTADDR, KERNPHYSADDR,
+ pmap_map_chunk(l1pagetable, KERNVIRTADDR, abp->abp_physaddr,
(((uint32_t)(lastaddr) - KERNVIRTADDR) + PAGE_MASK) & ~PAGE_MASK,
VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
@@ -1497,7 +1497,8 @@ initarm(struct arm_boot_params *abp)
arm_intrnames_init();
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
- arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0]));
+ arm_dump_avail_init(abp->abp_physaddr, memsize,
+ sizeof(dump_avail) / sizeof(dump_avail[0]));
pmap_bootstrap(freemempos, &kernel_l1pt);
msgbufp = (void *)msgbufpv.pv_va;
msgbufinit(msgbufp, msgbufsize);
@@ -1506,7 +1507,7 @@ initarm(struct arm_boot_params *abp)
/*
* Prepare map of physical memory regions available to vm subsystem.
*/
- physmap_init(availmem_regions, availmem_regions_sz);
+ physmap_init(availmem_regions, availmem_regions_sz, abp->abp_physaddr);
init_param2(physmem);
kdb_init();
diff --git a/sys/arm/arm/nexus.c b/sys/arm/arm/nexus.c
index ec2c18f..fe1261f 100644
--- a/sys/arm/arm/nexus.c
+++ b/sys/arm/arm/nexus.c
@@ -63,11 +63,11 @@ __FBSDID("$FreeBSD$");
#include "opt_platform.h"
#ifdef FDT
-#include <dev/ofw/ofw_nexus.h>
#include <dev/fdt/fdt_common.h>
#include <machine/fdt.h>
#include "ofw_bus_if.h"
-#else
+#endif
+
static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device");
struct nexus_device {
@@ -84,7 +84,6 @@ static int nexus_print_child(device_t, device_t);
static device_t nexus_add_child(device_t, u_int, const char *, int);
static struct resource *nexus_alloc_resource(device_t, device_t, int, int *,
u_long, u_long, u_long, u_int);
-#endif
static int nexus_activate_resource(device_t, device_t, int, int,
struct resource *);
static int nexus_config_intr(device_t dev, int irq, enum intr_trigger trig,
@@ -102,7 +101,6 @@ static int nexus_ofw_map_intr(device_t dev, device_t child, phandle_t iparent,
#endif
static device_method_t nexus_methods[] = {
-#ifndef FDT
/* Device interface */
DEVMETHOD(device_probe, nexus_probe),
DEVMETHOD(device_attach, nexus_attach),
@@ -110,7 +108,6 @@ static device_method_t nexus_methods[] = {
DEVMETHOD(bus_print_child, nexus_print_child),
DEVMETHOD(bus_add_child, nexus_add_child),
DEVMETHOD(bus_alloc_resource, nexus_alloc_resource),
-#endif
DEVMETHOD(bus_activate_resource, nexus_activate_resource),
DEVMETHOD(bus_config_intr, nexus_config_intr),
DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource),
@@ -123,19 +120,13 @@ static device_method_t nexus_methods[] = {
};
static devclass_t nexus_devclass;
-#ifndef FDT
static driver_t nexus_driver = {
"nexus",
nexus_methods,
1 /* no softc */
};
-#else
-DEFINE_CLASS_1(nexus, nexus_driver, nexus_methods,
- sizeof(struct ofw_nexus_softc), ofw_nexus_driver);
-#endif
DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0);
-#ifndef FDT
static int
nexus_probe(device_t dev)
{
@@ -235,7 +226,6 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
return (rv);
}
-#endif
static int
nexus_config_intr(device_t dev, int irq, enum intr_trigger trig,
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
index 2b43e15..8ec061d 100644
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -1312,8 +1312,6 @@ pmap_init(void)
vm_size_t s;
int i, pv_npg;
- PDEBUG(1, printf("pmap_init: phys_start = %08x\n", PHYSADDR));
-
l2zone = uma_zcreate("L2 Table", L2_TABLE_SIZE_REAL, pmap_l2ptp_ctor,
NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM | UMA_ZONE_NOFREE);
l2table_zone = uma_zcreate("L2 Table", sizeof(struct l2_dtable), NULL,
diff --git a/sys/arm/arm/pmap.c b/sys/arm/arm/pmap.c
index 86db596..8ce2944 100644
--- a/sys/arm/arm/pmap.c
+++ b/sys/arm/arm/pmap.c
@@ -1826,8 +1826,6 @@ pmap_init(void)
{
int shpgperproc = PMAP_SHPGPERPROC;
- PDEBUG(1, printf("pmap_init: phys_start = %08x\n", PHYSADDR));
-
l2zone = uma_zcreate("L2 Table", L2_TABLE_SIZE_REAL, pmap_l2ptp_ctor,
NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM | UMA_ZONE_NOFREE);
l2table_zone = uma_zcreate("L2 Table", sizeof(struct l2_dtable), NULL,
diff --git a/sys/arm/arm/support.S b/sys/arm/arm/support.S
index 0c117a9..b6d2dbb 100644
--- a/sys/arm/arm/support.S
+++ b/sys/arm/arm/support.S
@@ -939,7 +939,7 @@ END(memmove)
ENTRY(memcpy)
/* save leaf functions having to store this away */
/* Do not check arm_memcpy if we're running from flash */
-#ifdef FLASHADDR
+#if defined(FLASHADDR) && defined(PHYSADDR)
#if FLASHADDR > PHYSADDR
ldr r3, =FLASHADDR
cmp r3, pc
diff --git a/sys/arm/arm/vfp.c b/sys/arm/arm/vfp.c
index e6c02bc..8ee38bb 100644
--- a/sys/arm/arm/vfp.c
+++ b/sys/arm/arm/vfp.c
@@ -42,10 +42,9 @@ __FBSDID("$FreeBSD$");
/* function prototypes */
unsigned int get_coprocessorACR(void);
-int vfp_bounce(u_int, u_int, struct trapframe *, int);
+static int vfp_bounce(u_int, u_int, struct trapframe *, int);
+static void vfp_restore(struct vfp_state *);
void vfp_discard(void);
-void vfp_enable(void);
-void vfp_restore(struct vfp_state *);
void vfp_store(struct vfp_state *);
void set_coprocessorACR(u_int);
@@ -134,7 +133,7 @@ SYSINIT(vfp, SI_SUB_CPU, SI_ORDER_ANY, vfp_init, NULL);
/* start VFP unit, restore the vfp registers from the PCB and retry
* the instruction
*/
-int
+static int
vfp_bounce(u_int addr, u_int insn, struct trapframe *frame, int code)
{
u_int fpexc;
@@ -196,7 +195,7 @@ vfp_bounce(u_int addr, u_int insn, struct trapframe *frame, int code)
* 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.
*/
-void
+static void
vfp_restore(struct vfp_state *vfpsave)
{
u_int vfpscr = 0;
@@ -280,17 +279,5 @@ vfp_discard()
fmxr(VFPEXC, tmp);
}
-/* Enable the VFP hardware without restoring registers.
- * Called when the registers are still in the VFP unit
- */
-void
-vfp_enable()
-{
- u_int tmp = 0;
-
- tmp = fmrx(VFPEXC);
- tmp |= VFPEXC_EN;
- fmxr(VFPEXC, tmp);
-}
#endif
diff --git a/sys/arm/arm/vm_machdep.c b/sys/arm/arm/vm_machdep.c
index 58cb194..fdfeca4 100644
--- a/sys/arm/arm/vm_machdep.c
+++ b/sys/arm/arm/vm_machdep.c
@@ -298,15 +298,25 @@ cpu_set_syscall_retval(struct thread *td, int error)
struct trapframe *frame;
int fixup;
#ifdef __ARMEB__
- uint32_t insn;
+ u_int call;
#endif
frame = td->td_frame;
fixup = 0;
#ifdef __ARMEB__
- insn = *(u_int32_t *)(frame->tf_pc - INSN_SIZE);
- if ((insn & 0x000fffff) == SYS___syscall) {
+ /*
+ * __syscall returns an off_t while most other syscalls return an
+ * int. As an off_t is 64-bits and an int is 32-bits we need to
+ * place the returned data into r1. As the lseek and frerebsd6_lseek
+ * syscalls also return an off_t they do not need this fixup.
+ */
+#ifdef __ARM_EABI__
+ call = frame->tf_r7;
+#else
+ call = *(u_int32_t *)(frame->tf_pc - INSN_SIZE) & 0x000fffff;
+#endif
+ if (call == SYS___syscall) {
register_t *ap = &frame->tf_r0;
register_t code = ap[_QUAD_LOWWORD];
if (td->td_proc->p_sysent->sv_mask)
diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c
index ad38410..9e73d0c 100644
--- a/sys/arm/at91/at91_machdep.c
+++ b/sys/arm/at91/at91_machdep.c
@@ -630,7 +630,8 @@ initarm(struct arm_boot_params *abp)
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
pmap_curmaxkvaddr = afterkern + L1_S_SIZE * (KERNEL_PT_KERN_NUM - 1);
- arm_dump_avail_init(memsize, sizeof(dump_avail)/sizeof(dump_avail[0]));
+ arm_dump_avail_init(abp->abp_physaddr, memsize,
+ sizeof(dump_avail)/sizeof(dump_avail[0]));
/* Always use the 256MB of KVA we have available between the kernel and devices */
vm_max_kernel_address = KERNVIRTADDR + (256 << 20);
pmap_bootstrap(freemempos, &kernel_l1pt);
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_fb.c b/sys/arm/broadcom/bcm2835/bcm2835_fb.c
index 5dd5f99..88156ed 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_fb.c
+++ b/sys/arm/broadcom/bcm2835/bcm2835_fb.c
@@ -361,7 +361,7 @@ static driver_t bcm_fb_driver = {
sizeof(struct bcmsc_softc),
};
-DRIVER_MODULE(bcm2835fb, nexus, bcm_fb_driver, bcm_fb_devclass, 0, 0);
+DRIVER_MODULE(bcm2835fb, ofwbus, bcm_fb_driver, bcm_fb_devclass, 0, 0);
/*
* Video driver routines and glue.
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_fbd.c b/sys/arm/broadcom/bcm2835/bcm2835_fbd.c
index 2c69b9a..cf7cecd 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_fbd.c
+++ b/sys/arm/broadcom/bcm2835/bcm2835_fbd.c
@@ -315,4 +315,4 @@ static driver_t bcm_fb_driver = {
sizeof(struct bcmsc_softc),
};
-DRIVER_MODULE(bcm2835fb, nexus, bcm_fb_driver, bcm_fb_devclass, 0, 0);
+DRIVER_MODULE(bcm2835fb, ofwbus, bcm_fb_driver, bcm_fb_devclass, 0, 0);
diff --git a/sys/arm/econa/econa_machdep.c b/sys/arm/econa/econa_machdep.c
index 04fd208..8f41494 100644
--- a/sys/arm/econa/econa_machdep.c
+++ b/sys/arm/econa/econa_machdep.c
@@ -322,7 +322,8 @@ initarm(struct arm_boot_params *abp)
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
pmap_curmaxkvaddr = afterkern + L1_S_SIZE * (KERNEL_PT_KERN_NUM - 1);
- arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0]));
+ arm_dump_avail_init(abp->abp_physaddr, memsize,
+ sizeof(dump_avail) / sizeof(dump_avail[0]));
vm_max_kernel_address = KERNVIRTADDR + 3 * memsize;
pmap_bootstrap(freemempos, &kernel_l1pt);
diff --git a/sys/arm/freescale/imx/tzic.c b/sys/arm/freescale/imx/tzic.c
index 39548dc..0f3cf5c 100644
--- a/sys/arm/freescale/imx/tzic.c
+++ b/sys/arm/freescale/imx/tzic.c
@@ -146,9 +146,9 @@ static devclass_t tzic_devclass;
/*
* Memory space of controller located outside of device range, so let him to
- * attach not only to simplebus, but nexus also.
+ * attach not only to simplebus, but ofwbus also.
*/
-EARLY_DRIVER_MODULE(tzic, nexus, tzic_driver, tzic_devclass, 0, 0,
+EARLY_DRIVER_MODULE(tzic, ofwbus, tzic_driver, tzic_devclass, 0, 0,
BUS_PASS_INTERRUPT);
EARLY_DRIVER_MODULE(tzic, simplebus, tzic_driver, tzic_devclass, 0, 0,
BUS_PASS_INTERRUPT);
diff --git a/sys/arm/include/cpu.h b/sys/arm/include/cpu.h
index 95779e1..88dbcdb 100644
--- a/sys/arm/include/cpu.h
+++ b/sys/arm/include/cpu.h
@@ -41,6 +41,7 @@ struct arm_boot_params {
register_t abp_r1; /* r1 from the boot loader */
register_t abp_r2; /* r2 from the boot loader */
register_t abp_r3; /* r3 from the boot loader */
+ vm_offset_t abp_physaddr; /* The kernel physical address */
};
void arm_vector_init(vm_offset_t, int);
diff --git a/sys/arm/include/machdep.h b/sys/arm/include/machdep.h
index 46d7e66..e8f5c4f 100644
--- a/sys/arm/include/machdep.h
+++ b/sys/arm/include/machdep.h
@@ -72,6 +72,6 @@ void board_set_serial(uint64_t);
void board_set_revision(uint32_t);
/* Setup standard arrays */
-void arm_dump_avail_init( vm_offset_t memsize, size_t max);
+void arm_dump_avail_init(vm_paddr_t, vm_offset_t, size_t);
#endif /* !_MACHINE_MACHDEP_H_ */
diff --git a/sys/arm/mv/mv_localbus.c b/sys/arm/mv/mv_localbus.c
index 0a03688..fc64253 100644
--- a/sys/arm/mv/mv_localbus.c
+++ b/sys/arm/mv/mv_localbus.c
@@ -156,7 +156,7 @@ static struct localbus_bank localbus_banks[MV_LOCALBUS_MAX_BANKS];
devclass_t localbus_devclass;
-DRIVER_MODULE(localbus, nexus, localbus_driver, localbus_devclass, 0, 0);
+DRIVER_MODULE(localbus, ofwbus, localbus_driver, localbus_devclass, 0, 0);
static int
fdt_localbus_reg_decode(phandle_t node, struct localbus_softc *sc,
diff --git a/sys/arm/mv/mv_pci.c b/sys/arm/mv/mv_pci.c
index 690ebb4..be4ccc9 100644
--- a/sys/arm/mv/mv_pci.c
+++ b/sys/arm/mv/mv_pci.c
@@ -398,7 +398,7 @@ static driver_t mv_pcib_driver = {
devclass_t pcib_devclass;
-DRIVER_MODULE(pcib, nexus, mv_pcib_driver, pcib_devclass, 0, 0);
+DRIVER_MODULE(pcib, ofwbus, mv_pcib_driver, pcib_devclass, 0, 0);
static struct mtx pcicfg_mtx;
diff --git a/sys/arm/s3c2xx0/s3c24x0_machdep.c b/sys/arm/s3c2xx0/s3c24x0_machdep.c
index 8f432be..18cbff5 100644
--- a/sys/arm/s3c2xx0/s3c24x0_machdep.c
+++ b/sys/arm/s3c2xx0/s3c24x0_machdep.c
@@ -384,7 +384,8 @@ initarm(struct arm_boot_params *abp)
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
pmap_curmaxkvaddr = afterkern + 0x100000 * (KERNEL_PT_KERN_NUM - 1);
- arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0]));
+ arm_dump_avail_init(abp->abp_physaddr, memsize,
+ sizeof(dump_avail) / sizeof(dump_avail[0]));
vm_max_kernel_address = KERNVIRTADDR + 3 * memsize;
pmap_bootstrap(freemempos, &kernel_l1pt);
msgbufp = (void*)msgbufpv.pv_va;
diff --git a/sys/arm/xscale/ixp425/avila_machdep.c b/sys/arm/xscale/ixp425/avila_machdep.c
index 7322f5b..8166a4b 100644
--- a/sys/arm/xscale/ixp425/avila_machdep.c
+++ b/sys/arm/xscale/ixp425/avila_machdep.c
@@ -433,7 +433,8 @@ initarm(struct arm_boot_params *abp)
arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
pmap_curmaxkvaddr = afterkern + PAGE_SIZE;
- arm_dump_avail_init(memsize, sizeof(dump_avail) / sizeof(dump_avail[0]));
+ arm_dump_avail_init(abp->abp_physaddr, memsize,
+ sizeof(dump_avail) / sizeof(dump_avail[0]));
vm_max_kernel_address = 0xd0000000;
pmap_bootstrap(pmap_curmaxkvaddr, &kernel_l1pt);
msgbufp = (void*)msgbufpv.pv_va;
diff --git a/sys/conf/files b/sys/conf/files
index 2aefaf3..37173e4 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -1407,7 +1407,6 @@ dev/fdt/fdt_common.c optional fdt
dev/fdt/fdt_slicer.c optional fdt cfi | fdt nand
dev/fdt/fdt_static_dtb.S optional fdt fdt_dtb_static \
dependency "$S/boot/fdt/dts/${FDT_DTS_FILE}"
-dev/fdt/fdtbus.c optional fdtbus
dev/fdt/simplebus.c optional fdt
dev/fe/if_fe.c optional fe
dev/fe/if_fe_pccard.c optional fe pccard
@@ -1968,7 +1967,7 @@ dev/ofw/ofw_bus_subr.c optional fdt
dev/ofw/ofw_fdt.c optional fdt
dev/ofw/ofw_if.m optional fdt
dev/ofw/ofw_iicbus.c optional fdt iicbus
-dev/ofw/ofw_nexus.c optional fdt
+dev/ofw/ofwbus.c optional fdt
dev/ofw/openfirm.c optional fdt
dev/ofw/openfirmio.c optional fdt
dev/patm/if_patm.c optional patm pci
diff --git a/sys/conf/files.powerpc b/sys/conf/files.powerpc
index 63b70c4..0e9d1c3 100644
--- a/sys/conf/files.powerpc
+++ b/sys/conf/files.powerpc
@@ -48,7 +48,7 @@ dev/ofw/ofw_bus_subr.c optional aim
dev/ofw/ofw_console.c optional aim
dev/ofw/ofw_disk.c optional ofwd aim
dev/ofw/ofw_iicbus.c optional iicbus aim
-dev/ofw/ofw_nexus.c optional aim | fdt
+dev/ofw/ofwbus.c optional aim | fdt
dev/ofw/ofw_standard.c optional aim powerpc
dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac
dev/quicc/quicc_bfe_fdt.c optional quicc mpc85xx
diff --git a/sys/dev/fdt/fdtbus.c b/sys/dev/fdt/fdtbus.c
deleted file mode 100644
index a0ebec8..0000000
--- a/sys/dev/fdt/fdtbus.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*-
- * Copyright (c) 2009-2010 The FreeBSD Foundation
- * All rights reserved.
- *
- * This software was developed by Semihalf under sponsorship from
- * the FreeBSD Foundation.
- *
- * 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 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
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/ktr.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/bus.h>
-#include <sys/rman.h>
-#include <sys/malloc.h>
-
-#include <dev/ofw/openfirm.h>
-#include <dev/ofw/ofw_nexus.h>
-
-#include "ofw_bus_if.h"
-
-/*
- * Prototypes.
- */
-static void fdtbus_identify(driver_t *, device_t);
-static int fdtbus_probe(device_t);
-
-/*
- * Bus interface definition.
- */
-static device_method_t fdtbus_methods[] = {
- /* Device interface */
- DEVMETHOD(device_identify, fdtbus_identify),
- DEVMETHOD(device_probe, fdtbus_probe),
-
- /* Bus interface */
- DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
- DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
- DEVMETHOD(bus_config_intr, bus_generic_config_intr),
- DEVMETHOD(bus_setup_intr, bus_generic_setup_intr),
- DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr),
-
- DEVMETHOD_END
-};
-
-devclass_t fdtbus_devclass;
-DEFINE_CLASS_1(fdtbus, fdtbus_driver, fdtbus_methods,
- sizeof(struct ofw_nexus_softc), ofw_nexus_driver);
-DRIVER_MODULE(fdtbus, nexus, fdtbus_driver, fdtbus_devclass, 0, 0);
-
-static void
-fdtbus_identify(driver_t *driver, device_t parent)
-{
-
- if (device_find_child(parent, "fdtbus", -1) == NULL)
- BUS_ADD_CHILD(parent, 0, "fdtbus", -1);
-}
-
-static int
-fdtbus_probe(device_t dev)
-{
-
- device_set_desc(dev, "Flattened Device Tree");
- return (BUS_PROBE_NOWILDCARD);
-}
-
diff --git a/sys/dev/fdt/simplebus.c b/sys/dev/fdt/simplebus.c
index ee968ae..d36cba4 100644
--- a/sys/dev/fdt/simplebus.c
+++ b/sys/dev/fdt/simplebus.c
@@ -121,7 +121,7 @@ static driver_t simplebus_driver = {
sizeof(struct simplebus_softc)
};
static devclass_t simplebus_devclass;
-DRIVER_MODULE(simplebus, nexus, simplebus_driver, simplebus_devclass, 0, 0);
+DRIVER_MODULE(simplebus, ofwbus, simplebus_driver, simplebus_devclass, 0, 0);
DRIVER_MODULE(simplebus, simplebus, simplebus_driver, simplebus_devclass, 0, 0);
static int
diff --git a/sys/dev/mmc/mmc.c b/sys/dev/mmc/mmc.c
index 2ca0875..e8ac406 100644
--- a/sys/dev/mmc/mmc.c
+++ b/sys/dev/mmc/mmc.c
@@ -1756,9 +1756,11 @@ static driver_t mmc_driver = {
};
static devclass_t mmc_devclass;
-DRIVER_MODULE(mmc, ti_mmchs, mmc_driver, mmc_devclass, NULL, NULL);
DRIVER_MODULE(mmc, at91_mci, mmc_driver, mmc_devclass, NULL, NULL);
-DRIVER_MODULE(mmc, sdhci_pci, mmc_driver, mmc_devclass, NULL, NULL);
DRIVER_MODULE(mmc, sdhci_bcm, mmc_driver, mmc_devclass, NULL, NULL);
DRIVER_MODULE(mmc, sdhci_fdt, mmc_driver, mmc_devclass, NULL, NULL);
+DRIVER_MODULE(mmc, sdhci_imx, mmc_driver, mmc_devclass, NULL, NULL);
+DRIVER_MODULE(mmc, sdhci_pci, mmc_driver, mmc_devclass, NULL, NULL);
DRIVER_MODULE(mmc, sdhci_ti, mmc_driver, mmc_devclass, NULL, NULL);
+DRIVER_MODULE(mmc, ti_mmchs, mmc_driver, mmc_devclass, NULL, NULL);
+
diff --git a/sys/dev/ofw/ofw_nexus.h b/sys/dev/ofw/ofw_nexus.h
deleted file mode 100644
index e67b4a3..0000000
--- a/sys/dev/ofw/ofw_nexus.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * Copyright (c) 2010 Marius Strobl <marius@FreeBSD.org>
- * 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 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
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _OFW_NEXUS_H_
-#define _OFW_NEXUS_H_
-
-struct ofw_nexus_softc {
- uint32_t acells, scells;
- struct rman sc_intr_rman;
- struct rman sc_mem_rman;
-};
-
-DECLARE_CLASS(ofw_nexus_driver);
-
-#endif /* _OFW_NEXUS_H_ */
diff --git a/sys/dev/ofw/ofw_nexus.c b/sys/dev/ofw/ofwbus.c
index b3c5e03..d06917d 100644
--- a/sys/dev/ofw/ofw_nexus.c
+++ b/sys/dev/ofw/ofwbus.c
@@ -49,69 +49,78 @@ __FBSDID("$FreeBSD$");
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
-#include <dev/ofw/ofw_nexus.h>
#include <dev/ofw/openfirm.h>
#include <machine/bus.h>
#include <machine/resource.h>
/*
- * The nexus (which is a pseudo-bus actually) iterates over the nodes that
+ * The ofwbus (which is a pseudo-bus actually) iterates over the nodes that
* hang from the Open Firmware root node and adds them as devices to this bus
* (except some special nodes which are excluded) so that drivers can be
* attached to them.
*
- * Additionally, interrupt setup/teardown and some resource management are
- * done at this level.
- *
*/
-struct nexus_devinfo {
+struct ofwbus_devinfo {
struct ofw_bus_devinfo ndi_obdinfo;
struct resource_list ndi_rl;
};
-static device_probe_t nexus_probe;
-static device_attach_t nexus_attach;
-static bus_print_child_t nexus_print_child;
-static bus_add_child_t nexus_add_child;
-static bus_probe_nomatch_t nexus_probe_nomatch;
-static bus_alloc_resource_t nexus_alloc_resource;
-static bus_adjust_resource_t nexus_adjust_resource;
-static bus_release_resource_t nexus_release_resource;
-static bus_get_resource_list_t nexus_get_resource_list;
-static ofw_bus_get_devinfo_t nexus_get_devinfo;
-
-static int nexus_inlist(const char *, const char *const *);
-static struct nexus_devinfo * nexus_setup_dinfo(device_t, phandle_t);
-static void nexus_destroy_dinfo(struct nexus_devinfo *);
-static int nexus_print_res(struct nexus_devinfo *);
-
-static device_method_t nexus_methods[] = {
+struct ofwbus_softc {
+ uint32_t acells, scells;
+ struct rman sc_intr_rman;
+ struct rman sc_mem_rman;
+};
+
+static device_identify_t ofwbus_identify;
+static device_probe_t ofwbus_probe;
+static device_attach_t ofwbus_attach;
+static bus_print_child_t ofwbus_print_child;
+static bus_add_child_t ofwbus_add_child;
+static bus_probe_nomatch_t ofwbus_probe_nomatch;
+static bus_alloc_resource_t ofwbus_alloc_resource;
+static bus_adjust_resource_t ofwbus_adjust_resource;
+static bus_release_resource_t ofwbus_release_resource;
+static bus_get_resource_list_t ofwbus_get_resource_list;
+static ofw_bus_get_devinfo_t ofwbus_get_devinfo;
+
+static int ofwbus_inlist(const char *, const char *const *);
+static struct ofwbus_devinfo * ofwbus_setup_dinfo(device_t, phandle_t);
+static void ofwbus_destroy_dinfo(struct ofwbus_devinfo *);
+static int ofwbus_print_res(struct ofwbus_devinfo *);
+
+static device_method_t ofwbus_methods[] = {
/* Device interface */
- DEVMETHOD(device_probe, nexus_probe),
- DEVMETHOD(device_attach, nexus_attach),
+ DEVMETHOD(device_identify, ofwbus_identify),
+ DEVMETHOD(device_probe, ofwbus_probe),
+ DEVMETHOD(device_attach, ofwbus_attach),
DEVMETHOD(device_detach, bus_generic_detach),
DEVMETHOD(device_shutdown, bus_generic_shutdown),
DEVMETHOD(device_suspend, bus_generic_suspend),
DEVMETHOD(device_resume, bus_generic_resume),
/* Bus interface */
- DEVMETHOD(bus_print_child, nexus_print_child),
- DEVMETHOD(bus_probe_nomatch, nexus_probe_nomatch),
+ DEVMETHOD(bus_print_child, ofwbus_print_child),
+ DEVMETHOD(bus_probe_nomatch, ofwbus_probe_nomatch),
DEVMETHOD(bus_read_ivar, bus_generic_read_ivar),
DEVMETHOD(bus_write_ivar, bus_generic_write_ivar),
- DEVMETHOD(bus_add_child, nexus_add_child),
+ DEVMETHOD(bus_add_child, ofwbus_add_child),
DEVMETHOD(bus_child_pnpinfo_str, ofw_bus_gen_child_pnpinfo_str),
- DEVMETHOD(bus_alloc_resource, nexus_alloc_resource),
- DEVMETHOD(bus_adjust_resource, nexus_adjust_resource),
- DEVMETHOD(bus_release_resource, nexus_release_resource),
+ DEVMETHOD(bus_alloc_resource, ofwbus_alloc_resource),
+ DEVMETHOD(bus_adjust_resource, ofwbus_adjust_resource),
+ DEVMETHOD(bus_release_resource, ofwbus_release_resource),
DEVMETHOD(bus_set_resource, bus_generic_rl_set_resource),
DEVMETHOD(bus_get_resource, bus_generic_rl_get_resource),
- DEVMETHOD(bus_get_resource_list, nexus_get_resource_list),
+ DEVMETHOD(bus_get_resource_list, ofwbus_get_resource_list),
+ DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
+ DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+ DEVMETHOD(bus_config_intr, bus_generic_config_intr),
+ DEVMETHOD(bus_setup_intr, bus_generic_setup_intr),
+ DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr),
/* ofw_bus interface */
- DEVMETHOD(ofw_bus_get_devinfo, nexus_get_devinfo),
+ DEVMETHOD(ofw_bus_get_devinfo, ofwbus_get_devinfo),
DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat),
DEVMETHOD(ofw_bus_get_model, ofw_bus_gen_get_model),
DEVMETHOD(ofw_bus_get_name, ofw_bus_gen_get_name),
@@ -121,11 +130,16 @@ static device_method_t nexus_methods[] = {
DEVMETHOD_END
};
-DEFINE_CLASS_0(ofw_nexus, ofw_nexus_driver, nexus_methods,
- sizeof(struct ofw_nexus_softc));
-MODULE_VERSION(ofw_nexus, 1);
+static driver_t ofwbus_driver = {
+ "ofwbus",
+ ofwbus_methods,
+ sizeof(struct ofwbus_softc)
+};
+static devclass_t ofwbus_devclass;
+DRIVER_MODULE(ofwbus, nexus, ofwbus_driver, ofwbus_devclass, 0, 0);
+MODULE_VERSION(ofwbus, 1);
-static const char *const nexus_excl_name[] = {
+static const char *const ofwbus_excl_name[] = {
"FJSV,system",
"aliases",
"associations",
@@ -145,14 +159,14 @@ static const char *const nexus_excl_name[] = {
NULL
};
-static const char *const nexus_excl_type[] = {
+static const char *const ofwbus_excl_type[] = {
"core",
"cpu",
NULL
};
static int
-nexus_inlist(const char *name, const char *const *list)
+ofwbus_inlist(const char *name, const char *const *list)
{
int i;
@@ -164,24 +178,35 @@ nexus_inlist(const char *name, const char *const *list)
return (0);
}
-#define NEXUS_EXCLUDED(name, type) \
- (nexus_inlist((name), nexus_excl_name) || \
- ((type) != NULL && nexus_inlist((type), nexus_excl_type)))
+#define OFWBUS_EXCLUDED(name, type) \
+ (ofwbus_inlist((name), ofwbus_excl_name) || \
+ ((type) != NULL && ofwbus_inlist((type), ofwbus_excl_type)))
+
+static void
+ofwbus_identify(driver_t *driver, device_t parent)
+{
+
+ /* Check if Open Firmware has been instantiated */
+ if (OF_peer(0) == -1)
+ return;
+
+ if (device_find_child(parent, "ofwbus", -1) == NULL)
+ BUS_ADD_CHILD(parent, 0, "ofwbus", -1);
+}
static int
-nexus_probe(device_t dev)
+ofwbus_probe(device_t dev)
{
- /* Nexus does always match. */
- device_set_desc(dev, "Open Firmware Nexus device");
- return (0);
+ device_set_desc(dev, "Open Firmware Device Tree");
+ return (BUS_PROBE_NOWILDCARD);
}
static int
-nexus_attach(device_t dev)
+ofwbus_attach(device_t dev)
{
- struct nexus_devinfo *ndi;
- struct ofw_nexus_softc *sc;
+ struct ofwbus_devinfo *ndi;
+ struct ofwbus_softc *sc;
device_t cdev;
phandle_t node;
@@ -189,6 +214,12 @@ nexus_attach(device_t dev)
node = OF_peer(0);
+ /*
+ * If no Open Firmware, bail early
+ */
+ if (node == -1)
+ return (ENXIO);
+
sc->sc_intr_rman.rm_type = RMAN_ARRAY;
sc->sc_intr_rman.rm_descr = "Interrupts";
sc->sc_mem_rman.rm_type = RMAN_ARRAY;
@@ -205,12 +236,6 @@ nexus_attach(device_t dev)
bus_generic_probe(dev);
/*
- * If no Open Firmware, bail early
- */
- if (node == -1)
- return (bus_generic_attach(dev));
-
- /*
* Some important numbers
*/
sc->acells = 2;
@@ -222,13 +247,13 @@ nexus_attach(device_t dev)
* Now walk the OFW tree and attach top-level devices.
*/
for (node = OF_child(node); node > 0; node = OF_peer(node)) {
- if ((ndi = nexus_setup_dinfo(dev, node)) == NULL)
+ if ((ndi = ofwbus_setup_dinfo(dev, node)) == NULL)
continue;
cdev = device_add_child(dev, NULL, -1);
if (cdev == NULL) {
device_printf(dev, "<%s>: device_add_child failed\n",
ndi->ndi_obdinfo.obd_name);
- nexus_destroy_dinfo(ndi);
+ ofwbus_destroy_dinfo(ndi);
continue;
}
device_set_ivars(cdev, ndi);
@@ -237,10 +262,10 @@ nexus_attach(device_t dev)
}
static device_t
-nexus_add_child(device_t dev, u_int order, const char *name, int unit)
+ofwbus_add_child(device_t dev, u_int order, const char *name, int unit)
{
device_t cdev;
- struct nexus_devinfo *ndi;
+ struct ofwbus_devinfo *ndi;
cdev = device_add_child_ordered(dev, order, name, unit);
if (cdev == NULL)
@@ -255,18 +280,18 @@ nexus_add_child(device_t dev, u_int order, const char *name, int unit)
}
static int
-nexus_print_child(device_t bus, device_t child)
+ofwbus_print_child(device_t bus, device_t child)
{
int rv;
rv = bus_print_child_header(bus, child);
- rv += nexus_print_res(device_get_ivars(child));
+ rv += ofwbus_print_res(device_get_ivars(child));
rv += bus_print_child_footer(bus, child);
return (rv);
}
static void
-nexus_probe_nomatch(device_t bus, device_t child)
+ofwbus_probe_nomatch(device_t bus, device_t child)
{
const char *name, *type;
@@ -278,16 +303,16 @@ nexus_probe_nomatch(device_t bus, device_t child)
device_printf(bus, "<%s>",
name != NULL ? name : "unknown");
- nexus_print_res(device_get_ivars(child));
+ ofwbus_print_res(device_get_ivars(child));
printf(" type %s (no driver attached)\n",
type != NULL ? type : "unknown");
}
static struct resource *
-nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
+ofwbus_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 ofw_nexus_softc *sc;
+ struct ofwbus_softc *sc;
struct rman *rm;
struct resource *rv;
struct resource_list_entry *rle;
@@ -344,17 +369,17 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
}
static int
-nexus_adjust_resource(device_t bus, device_t child __unused, int type,
+ofwbus_adjust_resource(device_t bus, device_t child __unused, int type,
struct resource *r, u_long start, u_long end)
{
- struct ofw_nexus_softc *sc;
+ struct ofwbus_softc *sc;
struct rman *rm;
- device_t nexus;
+ device_t ofwbus;
- nexus = bus;
- while (strcmp(device_get_name(device_get_parent(nexus)), "root") != 0)
- nexus = device_get_parent(nexus);
- sc = device_get_softc(nexus);
+ ofwbus = bus;
+ while (strcmp(device_get_name(device_get_parent(ofwbus)), "root") != 0)
+ ofwbus = device_get_parent(ofwbus);
+ sc = device_get_softc(ofwbus);
switch (type) {
case SYS_RES_IRQ:
rm = &sc->sc_intr_rman;
@@ -373,7 +398,7 @@ nexus_adjust_resource(device_t bus, device_t child __unused, int type,
}
static int
-nexus_release_resource(device_t bus __unused, device_t child, int type,
+ofwbus_release_resource(device_t bus __unused, device_t child, int type,
int rid, struct resource *r)
{
int error;
@@ -387,28 +412,28 @@ nexus_release_resource(device_t bus __unused, device_t child, int type,
}
static struct resource_list *
-nexus_get_resource_list(device_t bus __unused, device_t child)
+ofwbus_get_resource_list(device_t bus __unused, device_t child)
{
- struct nexus_devinfo *ndi;
+ struct ofwbus_devinfo *ndi;
ndi = device_get_ivars(child);
return (&ndi->ndi_rl);
}
static const struct ofw_bus_devinfo *
-nexus_get_devinfo(device_t bus __unused, device_t child)
+ofwbus_get_devinfo(device_t bus __unused, device_t child)
{
- struct nexus_devinfo *ndi;
+ struct ofwbus_devinfo *ndi;
ndi = device_get_ivars(child);
return (&ndi->ndi_obdinfo);
}
-static struct nexus_devinfo *
-nexus_setup_dinfo(device_t dev, phandle_t node)
+static struct ofwbus_devinfo *
+ofwbus_setup_dinfo(device_t dev, phandle_t node)
{
- struct ofw_nexus_softc *sc;
- struct nexus_devinfo *ndi;
+ struct ofwbus_softc *sc;
+ struct ofwbus_devinfo *ndi;
uint32_t *reg, *intr, icells;
uint64_t phys, size;
phandle_t iparent;
@@ -423,7 +448,7 @@ nexus_setup_dinfo(device_t dev, phandle_t node)
free(ndi, M_DEVBUF);
return (NULL);
}
- if (NEXUS_EXCLUDED(ndi->ndi_obdinfo.obd_name,
+ if (OFWBUS_EXCLUDED(ndi->ndi_obdinfo.obd_name,
ndi->ndi_obdinfo.obd_type)) {
ofw_bus_gen_destroy_devinfo(&ndi->ndi_obdinfo);
free(ndi, M_DEVBUF);
@@ -479,7 +504,7 @@ nexus_setup_dinfo(device_t dev, phandle_t node)
}
static void
-nexus_destroy_dinfo(struct nexus_devinfo *ndi)
+ofwbus_destroy_dinfo(struct ofwbus_devinfo *ndi)
{
resource_list_free(&ndi->ndi_rl);
@@ -488,7 +513,7 @@ nexus_destroy_dinfo(struct nexus_devinfo *ndi)
}
static int
-nexus_print_res(struct nexus_devinfo *ndi)
+ofwbus_print_res(struct ofwbus_devinfo *ndi)
{
int rv;
diff --git a/sys/dev/powermac_nvram/powermac_nvram.c b/sys/dev/powermac_nvram/powermac_nvram.c
index 56dc929..53650e9 100644
--- a/sys/dev/powermac_nvram/powermac_nvram.c
+++ b/sys/dev/powermac_nvram/powermac_nvram.c
@@ -84,7 +84,7 @@ static driver_t powermac_nvram_driver = {
static devclass_t powermac_nvram_devclass;
-DRIVER_MODULE(powermac_nvram, nexus, powermac_nvram_driver, powermac_nvram_devclass, 0, 0);
+DRIVER_MODULE(powermac_nvram, ofwbus, powermac_nvram_driver, powermac_nvram_devclass, 0, 0);
/*
* Cdev methods.
diff --git a/sys/mips/beri/beri_simplebus.c b/sys/mips/beri/beri_simplebus.c
index 55b3149..934a395 100644
--- a/sys/mips/beri/beri_simplebus.c
+++ b/sys/mips/beri/beri_simplebus.c
@@ -136,7 +136,7 @@ static driver_t simplebus_driver = {
devclass_t simplebus_devclass;
-DRIVER_MODULE(simplebus, nexus, simplebus_driver, simplebus_devclass, 0, 0);
+DRIVER_MODULE(simplebus, ofwbus, simplebus_driver, simplebus_devclass, 0, 0);
DRIVER_MODULE(simplebus, simplebus, simplebus_driver, simplebus_devclass, 0,
0);
diff --git a/sys/mips/mips/nexus.c b/sys/mips/mips/nexus.c
index ecf315d..06c0317 100644
--- a/sys/mips/mips/nexus.c
+++ b/sys/mips/mips/nexus.c
@@ -60,10 +60,6 @@ __FBSDID("$FreeBSD$");
#include "opt_platform.h"
-#ifdef FDT
-#include <dev/ofw/ofw_nexus.h>
-#endif
-
#undef NEXUS_DEBUG
#ifdef NEXUS_DEBUG
#define dprintf printf
@@ -73,7 +69,6 @@ __FBSDID("$FreeBSD$");
#define NUM_MIPS_IRQS 6
-#ifndef FDT
static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device");
struct nexus_device {
@@ -102,7 +97,6 @@ static int nexus_release_resource(device_t, device_t, int, int,
struct resource *);
static int nexus_set_resource(device_t, device_t, int, int, u_long,
u_long);
-#endif
static int nexus_activate_resource(device_t, device_t, int, int,
struct resource *);
static int nexus_deactivate_resource(device_t, device_t, int, int,
@@ -115,7 +109,6 @@ static int nexus_teardown_intr(device_t, device_t, struct resource *,
void *);
static device_method_t nexus_methods[] = {
-#ifndef FDT
/* Device interface */
DEVMETHOD(device_probe, nexus_probe),
DEVMETHOD(device_attach, nexus_attach),
@@ -129,7 +122,6 @@ static device_method_t nexus_methods[] = {
DEVMETHOD(bus_print_child, nexus_print_child),
DEVMETHOD(bus_release_resource, nexus_release_resource),
DEVMETHOD(bus_set_resource, nexus_set_resource),
-#endif
DEVMETHOD(bus_setup_intr, nexus_setup_intr),
DEVMETHOD(bus_teardown_intr, nexus_teardown_intr),
DEVMETHOD(bus_activate_resource,nexus_activate_resource),
@@ -139,19 +131,13 @@ static device_method_t nexus_methods[] = {
{ 0, 0 }
};
-#ifndef FDT
static driver_t nexus_driver = {
"nexus",
nexus_methods,
1 /* no softc */
};
-#else
-DEFINE_CLASS_1(nexus, nexus_driver, nexus_methods,
- sizeof(struct ofw_nexus_softc), ofw_nexus_driver);
-#endif
static devclass_t nexus_devclass;
-#ifndef FDT
static int
nexus_probe(device_t dev)
{
@@ -387,7 +373,6 @@ nexus_release_resource(device_t bus, device_t child, int type, int rid,
return (rman_release_resource(r));
}
-#endif
static int
nexus_activate_resource(device_t bus, device_t child, int type, int rid,
diff --git a/sys/powerpc/mambo/mambo.c b/sys/powerpc/mambo/mambo.c
index aa1b9a4..2c54476 100644
--- a/sys/powerpc/mambo/mambo.c
+++ b/sys/powerpc/mambo/mambo.c
@@ -75,7 +75,7 @@ static driver_t mambobus_driver = {
static devclass_t mambobus_devclass;
-DRIVER_MODULE(mambo, nexus, mambobus_driver, mambobus_devclass, 0, 0);
+DRIVER_MODULE(mambo, ofwbus, mambobus_driver, mambobus_devclass, 0, 0);
static int
mambobus_probe(device_t dev)
diff --git a/sys/powerpc/mpc85xx/lbc.c b/sys/powerpc/mpc85xx/lbc.c
index 5c27ca4..62b56c3 100644
--- a/sys/powerpc/mpc85xx/lbc.c
+++ b/sys/powerpc/mpc85xx/lbc.c
@@ -113,7 +113,7 @@ static driver_t lbc_driver = {
devclass_t lbc_devclass;
-DRIVER_MODULE(lbc, nexus, lbc_driver, lbc_devclass, 0, 0);
+DRIVER_MODULE(lbc, ofwbus, lbc_driver, lbc_devclass, 0, 0);
/*
* Calculate address mask used by OR(n) registers. Use memory region size to
diff --git a/sys/powerpc/mpc85xx/pci_mpc85xx.c b/sys/powerpc/mpc85xx/pci_mpc85xx.c
index 5d7f542..ebe8bd7 100644
--- a/sys/powerpc/mpc85xx/pci_mpc85xx.c
+++ b/sys/powerpc/mpc85xx/pci_mpc85xx.c
@@ -170,7 +170,7 @@ static devclass_t fsl_pcib_devclass;
DEFINE_CLASS_1(pcib, fsl_pcib_driver, fsl_pcib_methods,
sizeof(struct fsl_pcib_softc), ofw_pci_driver);
-DRIVER_MODULE(pcib, nexus, fsl_pcib_driver, fsl_pcib_devclass, 0, 0);
+DRIVER_MODULE(pcib, ofwbus, fsl_pcib_driver, fsl_pcib_devclass, 0, 0);
static int
fsl_pcib_probe(device_t dev)
diff --git a/sys/powerpc/ofw/ofw_cpu.c b/sys/powerpc/ofw/ofw_cpu.c
index 6cc6484..e830e3e 100644
--- a/sys/powerpc/ofw/ofw_cpu.c
+++ b/sys/powerpc/ofw/ofw_cpu.c
@@ -74,7 +74,7 @@ static driver_t ofw_cpulist_driver = {
static devclass_t ofw_cpulist_devclass;
-DRIVER_MODULE(ofw_cpulist, nexus, ofw_cpulist_driver, ofw_cpulist_devclass,
+DRIVER_MODULE(ofw_cpulist, ofwbus, ofw_cpulist_driver, ofw_cpulist_devclass,
0, 0);
static int
diff --git a/sys/powerpc/ofw/openpic_ofw.c b/sys/powerpc/ofw/openpic_ofw.c
index 0e85dda..65b2b89 100644
--- a/sys/powerpc/ofw/openpic_ofw.c
+++ b/sys/powerpc/ofw/openpic_ofw.c
@@ -90,7 +90,7 @@ static driver_t openpic_ofw_driver = {
sizeof(struct openpic_softc),
};
-DRIVER_MODULE(openpic, nexus, openpic_ofw_driver, openpic_devclass, 0, 0);
+DRIVER_MODULE(openpic, ofwbus, openpic_ofw_driver, openpic_devclass, 0, 0);
DRIVER_MODULE(openpic, simplebus, openpic_ofw_driver, openpic_devclass, 0, 0);
DRIVER_MODULE(openpic, macio, openpic_ofw_driver, openpic_devclass, 0, 0);
diff --git a/sys/powerpc/powermac/cpcht.c b/sys/powerpc/powermac/cpcht.c
index 03d07e9..090d3aa 100644
--- a/sys/powerpc/powermac/cpcht.c
+++ b/sys/powerpc/powermac/cpcht.c
@@ -134,7 +134,7 @@ struct cpcht_softc {
static devclass_t cpcht_devclass;
DEFINE_CLASS_1(pcib, cpcht_driver, cpcht_methods, sizeof(struct cpcht_softc),
ofw_pci_driver);
-DRIVER_MODULE(cpcht, nexus, cpcht_driver, cpcht_devclass, 0, 0);
+DRIVER_MODULE(cpcht, ofwbus, cpcht_driver, cpcht_devclass, 0, 0);
#define CPCHT_IOPORT_BASE 0xf4000000UL /* Hardwired */
#define CPCHT_IOPORT_SIZE 0x00400000UL
diff --git a/sys/powerpc/powermac/grackle.c b/sys/powerpc/powermac/grackle.c
index 03c975d..b4a8a3b 100644
--- a/sys/powerpc/powermac/grackle.c
+++ b/sys/powerpc/powermac/grackle.c
@@ -102,7 +102,7 @@ static device_method_t grackle_methods[] = {
static devclass_t grackle_devclass;
DEFINE_CLASS_1(pcib, grackle_driver, grackle_methods,
sizeof(struct grackle_softc), ofw_pci_driver);
-DRIVER_MODULE(grackle, nexus, grackle_driver, grackle_devclass, 0, 0);
+DRIVER_MODULE(grackle, ofwbus, grackle_driver, grackle_devclass, 0, 0);
static int
grackle_probe(device_t dev)
diff --git a/sys/powerpc/powermac/smu.c b/sys/powerpc/powermac/smu.c
index 5c622e3..5b74da3 100644
--- a/sys/powerpc/powermac/smu.c
+++ b/sys/powerpc/powermac/smu.c
@@ -210,7 +210,7 @@ static driver_t smu_driver = {
static devclass_t smu_devclass;
-DRIVER_MODULE(smu, nexus, smu_driver, smu_devclass, 0, 0);
+DRIVER_MODULE(smu, ofwbus, smu_driver, smu_devclass, 0, 0);
static MALLOC_DEFINE(M_SMU, "smu", "SMU Sensor Information");
#define SMU_MAILBOX 0x8000860c
diff --git a/sys/powerpc/powermac/uninorth.c b/sys/powerpc/powermac/uninorth.c
index ab051a5..421e625 100644
--- a/sys/powerpc/powermac/uninorth.c
+++ b/sys/powerpc/powermac/uninorth.c
@@ -143,7 +143,7 @@ static devclass_t unin_chip_devclass;
*/
static device_t unin_chip;
-DRIVER_MODULE(unin, nexus, unin_chip_driver, unin_chip_devclass, 0, 0);
+DRIVER_MODULE(unin, ofwbus, unin_chip_driver, unin_chip_devclass, 0, 0);
/*
* Add an interrupt to the dev's resource list if present
diff --git a/sys/powerpc/powermac/uninorthpci.c b/sys/powerpc/powermac/uninorthpci.c
index 5cf7a79..9da06ff 100644
--- a/sys/powerpc/powermac/uninorthpci.c
+++ b/sys/powerpc/powermac/uninorthpci.c
@@ -98,7 +98,7 @@ static devclass_t uninorth_devclass;
DEFINE_CLASS_1(pcib, uninorth_driver, uninorth_methods,
sizeof(struct uninorth_softc), ofw_pci_driver);
-DRIVER_MODULE(uninorth, nexus, uninorth_driver, uninorth_devclass, 0, 0);
+DRIVER_MODULE(uninorth, ofwbus, uninorth_driver, uninorth_devclass, 0, 0);
static int
uninorth_probe(device_t dev)
diff --git a/sys/powerpc/powerpc/nexus.c b/sys/powerpc/powerpc/nexus.c
index 2e9bbe6..8a4d815 100644
--- a/sys/powerpc/powerpc/nexus.c
+++ b/sys/powerpc/powerpc/nexus.c
@@ -49,7 +49,6 @@ __FBSDID("$FreeBSD$");
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
-#include <dev/ofw/ofw_nexus.h>
#include <dev/ofw/openfirm.h>
#include <machine/bus.h>
@@ -57,15 +56,12 @@ __FBSDID("$FreeBSD$");
#include <machine/resource.h>
/*
- * The nexus (which is a pseudo-bus actually) iterates over the nodes that
- * hang from the Open Firmware root node and adds them as devices to this bus
- * (except some special nodes which are excluded) so that drivers can be
- * attached to them.
- *
- * Additionally, interrupt setup/teardown and some resource management are
- * done at this level.
+ * The nexus handles root-level resource allocation requests and interrupt
+ * mapping. All direct subdevices of nexus are attached by DEVICE_IDENTIFY().
*/
+static device_probe_t nexus_probe;
+static device_attach_t nexus_attach;
static bus_setup_intr_t nexus_setup_intr;
static bus_teardown_intr_t nexus_teardown_intr;
static bus_activate_resource_t nexus_activate_resource;
@@ -77,7 +73,12 @@ static bus_config_intr_t nexus_config_intr;
static ofw_bus_map_intr_t nexus_ofw_map_intr;
static device_method_t nexus_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, nexus_probe),
+ DEVMETHOD(device_attach, nexus_attach),
+
/* Bus interface */
+ DEVMETHOD(bus_add_child, bus_generic_add_child),
DEVMETHOD(bus_activate_resource, nexus_activate_resource),
DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource),
DEVMETHOD(bus_setup_intr, nexus_setup_intr),
@@ -95,13 +96,31 @@ static device_method_t nexus_methods[] = {
static devclass_t nexus_devclass;
-DEFINE_CLASS_1(nexus, nexus_driver, nexus_methods,
- sizeof(struct ofw_nexus_softc), ofw_nexus_driver);
+DEFINE_CLASS_0(nexus, nexus_driver, nexus_methods, 1);
EARLY_DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0,
BUS_PASS_BUS);
MODULE_VERSION(nexus, 1);
static int
+nexus_probe(device_t dev)
+{
+
+ device_quiet(dev); /* suppress attach message for neatness */
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+nexus_attach(device_t dev)
+{
+
+ bus_generic_probe(dev);
+ bus_generic_attach(dev);
+
+ return (0);
+}
+
+static int
nexus_setup_intr(device_t bus __unused, device_t child, struct resource *r,
int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg,
void **cookiep)
diff --git a/sys/powerpc/pseries/rtas_dev.c b/sys/powerpc/pseries/rtas_dev.c
index 36cb199..79d70e2 100644
--- a/sys/powerpc/pseries/rtas_dev.c
+++ b/sys/powerpc/pseries/rtas_dev.c
@@ -73,7 +73,7 @@ static driver_t rtasdev_driver = {
static devclass_t rtasdev_devclass;
-DRIVER_MODULE(rtasdev, nexus, rtasdev_driver, rtasdev_devclass, 0, 0);
+DRIVER_MODULE(rtasdev, ofwbus, rtasdev_driver, rtasdev_devclass, 0, 0);
static int
rtasdev_probe(device_t dev)
diff --git a/sys/powerpc/pseries/rtas_pci.c b/sys/powerpc/pseries/rtas_pci.c
index 0835a27..90a7e6b 100644
--- a/sys/powerpc/pseries/rtas_pci.c
+++ b/sys/powerpc/pseries/rtas_pci.c
@@ -99,7 +99,7 @@ struct rtaspci_softc {
static devclass_t rtaspci_devclass;
DEFINE_CLASS_1(pcib, rtaspci_driver, rtaspci_methods,
sizeof(struct rtaspci_softc), ofw_pci_driver);
-DRIVER_MODULE(rtaspci, nexus, rtaspci_driver, rtaspci_devclass, 0, 0);
+DRIVER_MODULE(rtaspci, ofwbus, rtaspci_driver, rtaspci_devclass, 0, 0);
static int
rtaspci_probe(device_t dev)
diff --git a/sys/powerpc/pseries/vdevice.c b/sys/powerpc/pseries/vdevice.c
index e733a9d..d2c399b 100644
--- a/sys/powerpc/pseries/vdevice.c
+++ b/sys/powerpc/pseries/vdevice.c
@@ -103,7 +103,7 @@ static driver_t vdevice_driver = {
static devclass_t vdevice_devclass;
-DRIVER_MODULE(vdevice, nexus, vdevice_driver, vdevice_devclass, 0, 0);
+DRIVER_MODULE(vdevice, ofwbus, vdevice_driver, vdevice_devclass, 0, 0);
static int
vdevice_probe(device_t dev)
diff --git a/sys/powerpc/pseries/xics.c b/sys/powerpc/pseries/xics.c
index 7bfbb3d..47b53d6 100644
--- a/sys/powerpc/pseries/xics.c
+++ b/sys/powerpc/pseries/xics.c
@@ -122,9 +122,9 @@ static driver_t xics_driver = {
static devclass_t xicp_devclass;
static devclass_t xics_devclass;
-EARLY_DRIVER_MODULE(xicp, nexus, xicp_driver, xicp_devclass, 0, 0,
+EARLY_DRIVER_MODULE(xicp, ofwbus, xicp_driver, xicp_devclass, 0, 0,
BUS_PASS_INTERRUPT-1);
-EARLY_DRIVER_MODULE(xics, nexus, xics_driver, xics_devclass, 0, 0,
+EARLY_DRIVER_MODULE(xics, ofwbus, xics_driver, xics_devclass, 0, 0,
BUS_PASS_INTERRUPT);
static int
diff --git a/sys/powerpc/psim/iobus.c b/sys/powerpc/psim/iobus.c
index 6ed8cd3..6a6ac27 100644
--- a/sys/powerpc/psim/iobus.c
+++ b/sys/powerpc/psim/iobus.c
@@ -116,7 +116,7 @@ static driver_t iobus_driver = {
devclass_t iobus_devclass;
-DRIVER_MODULE(iobus, nexus, iobus_driver, iobus_devclass, 0, 0);
+DRIVER_MODULE(iobus, ofwbus, iobus_driver, iobus_devclass, 0, 0);
static int
iobus_probe(device_t dev)
OpenPOWER on IntegriCloud