diff options
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/ofw/ofw_pcibus.c | 32 | ||||
-rw-r--r-- | sys/powerpc/powermac/uninorth.c | 2 | ||||
-rw-r--r-- | sys/powerpc/powerpc/openpic.c | 2 |
3 files changed, 24 insertions, 12 deletions
diff --git a/sys/powerpc/ofw/ofw_pcibus.c b/sys/powerpc/ofw/ofw_pcibus.c index 3a7564b..d4ef78f 100644 --- a/sys/powerpc/ofw/ofw_pcibus.c +++ b/sys/powerpc/ofw/ofw_pcibus.c @@ -219,7 +219,7 @@ ofw_pcibus_enum_devtree(device_t dev, u_int domain, u_int busno) powerpc_config_intr(intr[0], (intr[1] & 1) ? INTR_TRIGGER_LEVEL : INTR_TRIGGER_EDGE, - INTR_POLARITY_HIGH); + INTR_POLARITY_LOW); } resource_list_add(&dinfo->opd_dinfo.resources, @@ -265,15 +265,27 @@ ofw_pcibus_enum_bus(device_t dev, u_int domain, u_int busno) dinfo = (struct ofw_pcibus_devinfo *)pci_read_device( pcib, domain, busno, s, f, sizeof(*dinfo)); - if (dinfo != NULL) { - dinfo->opd_obdinfo.obd_node = -1; - - dinfo->opd_obdinfo.obd_name = NULL; - dinfo->opd_obdinfo.obd_compat = NULL; - dinfo->opd_obdinfo.obd_type = NULL; - dinfo->opd_obdinfo.obd_model = NULL; - pci_add_child(dev, (struct pci_devinfo *)dinfo); + if (dinfo == NULL) + continue; + + dinfo->opd_obdinfo.obd_node = -1; + + dinfo->opd_obdinfo.obd_name = NULL; + dinfo->opd_obdinfo.obd_compat = NULL; + dinfo->opd_obdinfo.obd_type = NULL; + dinfo->opd_obdinfo.obd_model = NULL; + + /* + * For non OFW-devices, don't believe 0 + * for an interrupt. + */ + if (dinfo->opd_dinfo.cfg.intline == 0) { + dinfo->opd_dinfo.cfg.intline = PCI_INVALID_IRQ; + PCIB_WRITE_CONFIG(pcib, busno, s, f, + PCIR_INTLINE, PCI_INVALID_IRQ, 1); } + + pci_add_child(dev, (struct pci_devinfo *)dinfo); } } } @@ -311,7 +323,7 @@ ofw_pcibus_assign_interrupt(device_t dev, device_t child) * spec will need to be studied. */ - return (0); + return (PCI_INVALID_IRQ); #ifdef NOTYET intr = pci_get_intpin(child); diff --git a/sys/powerpc/powermac/uninorth.c b/sys/powerpc/powermac/uninorth.c index c0d228b..dba91ca 100644 --- a/sys/powerpc/powermac/uninorth.c +++ b/sys/powerpc/powermac/uninorth.c @@ -182,7 +182,7 @@ unin_chip_add_intr(phandle_t devnode, struct unin_chip_devinfo *dinfo) if (icells > 1) { powerpc_config_intr(INTR_VEC(iparent, intr[i]), (intr[i+1] & 1) ? INTR_TRIGGER_LEVEL : - INTR_TRIGGER_EDGE, INTR_POLARITY_HIGH); + INTR_TRIGGER_EDGE, INTR_POLARITY_LOW); } dinfo->udi_interrupts[dinfo->udi_ninterrupts] = diff --git a/sys/powerpc/powerpc/openpic.c b/sys/powerpc/powerpc/openpic.c index 3a13235..0b98964 100644 --- a/sys/powerpc/powerpc/openpic.c +++ b/sys/powerpc/powerpc/openpic.c @@ -175,7 +175,7 @@ openpic_attach(device_t dev) for (irq = 0; irq < sc->sc_nirq; irq++) { x = irq; /* irq == vector. */ x |= OPENPIC_IMASK; - x |= OPENPIC_POLARITY_POSITIVE; + x |= OPENPIC_POLARITY_NEGATIVE; x |= OPENPIC_SENSE_LEVEL; x |= 8 << OPENPIC_PRIORITY_SHIFT; openpic_write(sc, OPENPIC_SRC_VECTOR(irq), x); |