Fix a bug introduced as part of r287726; use the right device_t for

determining the softc of the bridge in psycho_route_interrupt(). [1]
While at it, update the corresponding comment that the code in
question is also necessary for U30s in addition to E450s (a fact
that has been known for ages).

PR:		218478
Submitted by:	Yoshihiko Iwama
This commit is contained in:
marius 2017-04-29 00:53:17 +00:00
parent 8d88056d06
commit 16d43a0ed2

View File

@ -944,14 +944,14 @@ psycho_route_interrupt(device_t bridge, device_t dev, int pin)
if (pin > 4)
return (pin);
/*
* Guess the INO; we always assume that this is a non-OBIO
* device, and that pin is a "real" intpin number. Determine
* the mapping register to be used by the slot number.
* We only need to do this on E450s, it seems; here, the slot numbers
* for bus A are one-based, while those for bus B seemingly have an
* offset of 2 (hence the factor of 3 below).
* Guess the INO; we always assume that this is a non-OBIO device,
* and that pin is a "real" intpin number. Determine the mapping
* register to be used by the slot number.
* We only need to do this on E450s and U30s, though; here, the
* slot numbers for bus A are one-based, while those for bus B
* seemingly have an offset of 2 (hence the factor of 3 below).
*/
sc = device_get_softc(dev);
sc = device_get_softc(bridge);
intrmap = PSR_PCIA0_INT_MAP +
8 * (pci_get_slot(dev) - 1 + 3 * sc->sc_half);
mintr = INTINO(PSYCHO_READ8(sc, intrmap)) + pin - 1;