svn commit: r304627 - projects/powernv/powerpc/powernv
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Mon Aug 22 19:27:31 UTC 2016
Author: nwhitehorn
Date: Mon Aug 22 19:27:30 2016
New Revision: 304627
URL: https://svnweb.freebsd.org/changeset/base/304627
Log:
Set up OPAL IRQs properly.
Modified:
projects/powernv/powerpc/powernv/opal_dev.c
Modified: projects/powernv/powerpc/powernv/opal_dev.c
==============================================================================
--- projects/powernv/powerpc/powernv/opal_dev.c Mon Aug 22 19:27:20 2016 (r304626)
+++ projects/powernv/powerpc/powernv/opal_dev.c Mon Aug 22 19:27:30 2016 (r304627)
@@ -94,6 +94,7 @@ DRIVER_MODULE(opaldev, ofwbus, opaldev_d
static int
opaldev_probe(device_t dev)
{
+ phandle_t iparent;
pcell_t *irqs;
int i, n_irqs;
@@ -106,13 +107,18 @@ opaldev_probe(device_t dev)
/* Manually add IRQs before attaching */
if (OF_hasprop(ofw_bus_get_node(dev), "opal-interrupts")) {
+ iparent = OF_finddevice("/interrupt-controller at 0");
+ iparent = OF_xref_from_node(iparent);
+printf("IPARENT: %#x\n", iparent);
+
n_irqs = OF_getproplen(ofw_bus_get_node(dev),
"opal-interrupts") / sizeof(*irqs);
irqs = malloc(n_irqs * sizeof(*irqs), M_DEVBUF, M_WAITOK);
OF_getencprop(ofw_bus_get_node(dev), "opal-interrupts", irqs,
n_irqs * sizeof(*irqs));
for (i = 0; i < n_irqs; i++)
- bus_set_resource(dev, SYS_RES_IRQ, i, irqs[i], 1);
+ bus_set_resource(dev, SYS_RES_IRQ, i,
+ ofw_bus_map_intr(dev, iparent, 1, &irqs[i]), 1);
free(irqs, M_DEVBUF);
}
@@ -240,6 +246,8 @@ opal_shutdown(void *arg, int howto)
opal_call(OPAL_CEC_POWER_DOWN, 0 /* Normal power off */);
else
opal_call(OPAL_CEC_REBOOT);
+
+ opal_call(OPAL_RETURN_CPU);
}
static void
More information about the svn-src-projects
mailing list