svn commit: r233472 - stable/9/sys/powerpc/powermac
Andreas Tobler
andreast at FreeBSD.org
Sun Mar 25 18:43:15 UTC 2012
Author: andreast
Date: Sun Mar 25 18:43:14 2012
New Revision: 233472
URL: http://svn.freebsd.org/changeset/base/233472
Log:
MFC: r233188
Provide a fix for certain PowerMacs where the U3 i2c lacks the interrupt
info.
Modified:
stable/9/sys/powerpc/powermac/uninorth.c
Modified: stable/9/sys/powerpc/powermac/uninorth.c
==============================================================================
--- stable/9/sys/powerpc/powermac/uninorth.c Sun Mar 25 18:42:19 2012 (r233471)
+++ stable/9/sys/powerpc/powermac/uninorth.c Sun Mar 25 18:43:14 2012 (r233472)
@@ -262,9 +262,11 @@ unin_chip_attach(device_t dev)
struct unin_chip_devinfo *dinfo;
phandle_t root;
phandle_t child;
+ phandle_t iparent;
device_t cdev;
char compat[32];
- u_int reg[3];
+ char name[32];
+ u_int irq, reg[3];
int error, i = 0;
sc = device_get_softc(dev);
@@ -315,6 +317,33 @@ unin_chip_attach(device_t dev)
dinfo->udi_ninterrupts = 0;
unin_chip_add_intr(child, dinfo);
+ /*
+ * Some Apple machines do have a bug in OF, they miss
+ * the interrupt entries on the U3 I2C node. That means they
+ * do not have an entry with number of interrupts nor the
+ * entry of the interrupt parent handle.
+ * We define an interrupt and hardwire it to the /u3/mpic
+ * handle.
+ */
+
+ if (OF_getprop(child, "name", name, sizeof(name)) <= 0)
+ device_printf(dev, "device has no name!\n");
+ if (dinfo->udi_ninterrupts == 0 &&
+ (strcmp(name, "i2c-bus") == 0 ||
+ strcmp(name, "i2c") == 0)) {
+ if (OF_getprop(child, "interrupt-parent", &iparent,
+ sizeof(iparent)) <= 0) {
+ iparent = OF_finddevice("/u3/mpic");
+ device_printf(dev, "Set /u3/mpic as iparent!\n");
+ }
+ /* Add an interrupt number 0 to the parent. */
+ irq = MAP_IRQ(iparent, 0);
+ resource_list_add(&dinfo->udi_resources, SYS_RES_IRQ,
+ dinfo->udi_ninterrupts, irq, irq, 1);
+ dinfo->udi_interrupts[dinfo->udi_ninterrupts] = irq;
+ dinfo->udi_ninterrupts++;
+ }
+
unin_chip_add_reg(child, dinfo);
cdev = device_add_child(dev, NULL, -1);
More information about the svn-src-stable-9
mailing list