summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'sys/powerpc')
-rw-r--r--sys/powerpc/ofw/ofw_pcibus.c32
-rw-r--r--sys/powerpc/powermac/uninorth.c2
-rw-r--r--sys/powerpc/powerpc/openpic.c2
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);
OpenPOWER on IntegriCloud