diff options
author | Nathan Whitehorn <nwhitehorn@FreeBSD.org> | 2015-01-05 21:39:35 +0000 |
---|---|---|
committer | Nathan Whitehorn <nwhitehorn@FreeBSD.org> | 2015-01-05 21:39:35 +0000 |
commit | 08b96b9ff5c8f964f38f2511bc36d800d5d31463 (patch) | |
tree | 4c3db7d4bfb6dca4d572b0e95ece0bd15c084d46 /sys/dev/ofw/ofw_bus_subr.c | |
parent | 531d65e139675cdbfed6511074efe9d94f873fbd (diff) |
Notes
Diffstat (limited to 'sys/dev/ofw/ofw_bus_subr.c')
-rw-r--r-- | sys/dev/ofw/ofw_bus_subr.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sys/dev/ofw/ofw_bus_subr.c b/sys/dev/ofw/ofw_bus_subr.c index cd1169365d680..5805eb4f45e86 100644 --- a/sys/dev/ofw/ofw_bus_subr.c +++ b/sys/dev/ofw/ofw_bus_subr.c @@ -382,9 +382,17 @@ ofw_bus_intr_to_rl(device_t dev, phandle_t node, struct resource_list *rl) if (nintr > 0) { if (OF_searchencprop(node, "interrupt-parent", &iparent, sizeof(iparent)) == -1) { - device_printf(dev, "No interrupt-parent found, " - "assuming direct parent\n"); - iparent = OF_parent(node); + for (iparent = node; iparent != 0; + iparent = OF_parent(node)) { + if (OF_hasprop(iparent, "interrupt-controller")) + break; + } + if (iparent == 0) { + device_printf(dev, "No interrupt-parent found, " + "assuming direct parent\n"); + iparent = OF_parent(node); + } + iparent = OF_xref_from_node(iparent); } if (OF_searchencprop(OF_node_from_xref(iparent), "#interrupt-cells", &icells, sizeof(icells)) == -1) { @@ -430,3 +438,4 @@ ofw_bus_intr_to_rl(device_t dev, phandle_t node, struct resource_list *rl) free(intr, M_OFWPROP); return (err); } + |