summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2015-01-05 21:39:35 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2015-01-05 21:39:35 +0000
commit1be9b49684c6ec6e6f32f63949d830f3fd701424 (patch)
tree4c3db7d4bfb6dca4d572b0e95ece0bd15c084d46 /sys/powerpc
parentb607899981eb85462637abe337a8b449bdd9dfd5 (diff)
downloadFreeBSD-src-1be9b49684c6ec6e6f32f63949d830f3fd701424.zip
FreeBSD-src-1be9b49684c6ec6e6f32f63949d830f3fd701424.tar.gz
Restore use of ofw_bus_intr_to_rl() in the pseries vdevice driver after fixing
ofw_bus_intr_to_rl() to match the spec for unspecified interrupt-parent properties.
Diffstat (limited to 'sys/powerpc')
-rw-r--r--sys/powerpc/pseries/vdevice.c26
1 files changed, 5 insertions, 21 deletions
diff --git a/sys/powerpc/pseries/vdevice.c b/sys/powerpc/pseries/vdevice.c
index d2c399b..2ec4c33 100644
--- a/sys/powerpc/pseries/vdevice.c
+++ b/sys/powerpc/pseries/vdevice.c
@@ -128,12 +128,14 @@ vdevice_attach(device_t dev)
{
phandle_t root, child;
device_t cdev;
- int icells, i, nintr, *intr;
- phandle_t iparent;
struct vdevice_devinfo *dinfo;
root = ofw_bus_get_node(dev);
+ /* The XICP (root PIC) will handle all our interrupts */
+ powerpc_register_pic(root_pic, OF_xref_from_node(root),
+ 1 << 24 /* 24-bit XIRR field */, 1 /* Number of IPIs */, FALSE);
+
for (child = OF_child(root); child != 0; child = OF_peer(child)) {
dinfo = malloc(sizeof(*dinfo), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -144,25 +146,7 @@ vdevice_attach(device_t dev)
}
resource_list_init(&dinfo->mdi_resources);
- if (OF_searchprop(child, "#interrupt-cells", &icells,
- sizeof(icells)) <= 0)
- icells = 2;
- if (OF_getprop(child, "interrupt-parent", &iparent,
- sizeof(iparent)) <= 0)
- iparent = -1;
- nintr = OF_getprop_alloc(child, "interrupts", sizeof(*intr),
- (void **)&intr);
- if (nintr > 0) {
- for (i = 0; i < nintr; i += icells) {
- u_int irq = intr[i];
- if (iparent != -1)
- irq = ofw_bus_map_intr(dev, iparent,
- icells, &intr[i]);
-
- resource_list_add(&dinfo->mdi_resources,
- SYS_RES_IRQ, i, irq, irq, i);
- }
- }
+ ofw_bus_intr_to_rl(dev, child, &dinfo->mdi_resources);
cdev = device_add_child(dev, NULL, -1);
if (cdev == NULL) {
OpenPOWER on IntegriCloud