ofwbus: remove arm64 ifdefs
Rather than using the DEVICE_IDENTIFY method, let's have other ofwbus-using platforms add ofwbus0 explicitly in nexus, like arm64. This gives them the same flexibility, e.g. if riscv starts supporting ACPI, and cleans up the #ifdefs. We were doing this already on riscv, but adjust the 'order' parameters. Reviewed by: andrew, jhb MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D38492
This commit is contained in:
parent
99553344e9
commit
53d5e65eea
@ -182,8 +182,11 @@ nexus_attach(device_t dev)
|
|||||||
if (rman_init(&irq_rman) || rman_manage_region(&irq_rman, 0, ~0))
|
if (rman_init(&irq_rman) || rman_manage_region(&irq_rman, 0, ~0))
|
||||||
panic("nexus_attach irq_rman");
|
panic("nexus_attach irq_rman");
|
||||||
|
|
||||||
|
/* First, add ofwbus0. */
|
||||||
|
device_add_child(dev, "ofwbus", 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First, deal with the children we know about already
|
* Next, deal with the children we know about already.
|
||||||
*/
|
*/
|
||||||
bus_generic_probe(dev);
|
bus_generic_probe(dev);
|
||||||
bus_generic_attach(dev);
|
bus_generic_attach(dev);
|
||||||
|
@ -54,12 +54,10 @@ __FBSDID("$FreeBSD$");
|
|||||||
* The ofwbus (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
|
* 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
|
* (except some special nodes which are excluded) so that drivers can be
|
||||||
* attached to them.
|
* attached to them. There should be only one ofwbus in the system, added
|
||||||
|
* directly as a child of nexus0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __aarch64__
|
|
||||||
static device_identify_t ofwbus_identify;
|
|
||||||
#endif
|
|
||||||
static device_probe_t ofwbus_probe;
|
static device_probe_t ofwbus_probe;
|
||||||
static device_attach_t ofwbus_attach;
|
static device_attach_t ofwbus_attach;
|
||||||
static bus_alloc_resource_t ofwbus_alloc_resource;
|
static bus_alloc_resource_t ofwbus_alloc_resource;
|
||||||
@ -67,9 +65,6 @@ static bus_release_resource_t ofwbus_release_resource;
|
|||||||
|
|
||||||
static device_method_t ofwbus_methods[] = {
|
static device_method_t ofwbus_methods[] = {
|
||||||
/* Device interface */
|
/* Device interface */
|
||||||
#ifndef __aarch64__
|
|
||||||
DEVMETHOD(device_identify, ofwbus_identify),
|
|
||||||
#endif
|
|
||||||
DEVMETHOD(device_probe, ofwbus_probe),
|
DEVMETHOD(device_probe, ofwbus_probe),
|
||||||
DEVMETHOD(device_attach, ofwbus_attach),
|
DEVMETHOD(device_attach, ofwbus_attach),
|
||||||
|
|
||||||
@ -87,28 +82,12 @@ EARLY_DRIVER_MODULE(ofwbus, nexus, ofwbus_driver, 0, 0,
|
|||||||
BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE);
|
BUS_PASS_BUS + BUS_PASS_ORDER_MIDDLE);
|
||||||
MODULE_VERSION(ofwbus, 1);
|
MODULE_VERSION(ofwbus, 1);
|
||||||
|
|
||||||
#ifndef __aarch64__
|
|
||||||
static void
|
|
||||||
ofwbus_identify(driver_t *driver, device_t parent)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Check if Open Firmware has been instantiated */
|
|
||||||
if (OF_peer(0) == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (device_find_child(parent, "ofwbus", -1) == NULL)
|
|
||||||
BUS_ADD_CHILD(parent, 0, "ofwbus", -1);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ofwbus_probe(device_t dev)
|
ofwbus_probe(device_t dev)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef __aarch64__
|
|
||||||
if (OF_peer(0) == 0)
|
if (OF_peer(0) == 0)
|
||||||
return (ENXIO);
|
return (ENXIO);
|
||||||
#endif
|
|
||||||
|
|
||||||
device_set_desc(dev, "Open Firmware Device Tree");
|
device_set_desc(dev, "Open Firmware Device Tree");
|
||||||
return (BUS_PROBE_NOWILDCARD);
|
return (BUS_PROBE_NOWILDCARD);
|
||||||
|
@ -146,6 +146,10 @@ nexus_attach(device_t dev)
|
|||||||
rman_manage_region(&mem_rman, 0, BUS_SPACE_MAXADDR) != 0)
|
rman_manage_region(&mem_rman, 0, BUS_SPACE_MAXADDR) != 0)
|
||||||
panic("%s: failed to set up rmans.", __func__);
|
panic("%s: failed to set up rmans.", __func__);
|
||||||
|
|
||||||
|
/* Add ofwbus0. */
|
||||||
|
device_add_child(dev, "ofwbus", 0);
|
||||||
|
|
||||||
|
/* Now, probe children. */
|
||||||
bus_generic_probe(dev);
|
bus_generic_probe(dev);
|
||||||
bus_generic_attach(dev);
|
bus_generic_attach(dev);
|
||||||
|
|
||||||
|
@ -165,9 +165,13 @@ nexus_attach(device_t dev)
|
|||||||
if (rman_init(&irq_rman) || rman_manage_region(&irq_rman, 0, ~0))
|
if (rman_init(&irq_rman) || rman_manage_region(&irq_rman, 0, ~0))
|
||||||
panic("nexus_attach irq_rman");
|
panic("nexus_attach irq_rman");
|
||||||
|
|
||||||
nexus_add_child(dev, 8, "timer", 0);
|
/*
|
||||||
nexus_add_child(dev, 9, "rcons", 0);
|
* Add direct children of nexus. Devices will be probed and attached
|
||||||
nexus_add_child(dev, 10, "ofwbus", 0);
|
* through ofwbus0.
|
||||||
|
*/
|
||||||
|
nexus_add_child(dev, 0, "timer", 0);
|
||||||
|
nexus_add_child(dev, 1, "rcons", 0);
|
||||||
|
nexus_add_child(dev, 2, "ofwbus", 0);
|
||||||
|
|
||||||
bus_generic_probe(dev);
|
bus_generic_probe(dev);
|
||||||
bus_generic_attach(dev);
|
bus_generic_attach(dev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user