The following reply was made to PR kern/181148; it has been noted by GNATS.
From: "Christopher D. Harrison" <[email protected]> To: John Baldwin <[email protected]> Cc: [email protected], [email protected], Doug White <[email protected]> Subject: Re: kern/181148: [ata] sas expanders not available in 9.2-RC1 [regression] Date: Fri, 09 Aug 2013 13:15:23 -0500 I upgraded the bios and it appears that this fixed the issue. I wish I had a board running the old bios version now to test this new code. Thanks for all your help in debugging this issue. -C On 08/09/13 13:05, John Baldwin wrote: > The mps(4) driver is just broken. 9.2 includes a fix that if your BIOS > writers can't do simple math and allocate conflicting resources, it disables > decoding of the device where it finds the conflict. Later if a device driver > expicitly asks to use that resource, the PCI bus will allocate a fresh > resource range that doesn't conflict if possible. If it suceeds it > re-enables > decoding. The mps(4) driver checks to see if decoding is enabled before it > calls bus_alloc_resource(). It should not. It should assume that if > bus_alloc_resource() succeeds, everything is fine and decoding will be > enabled. Try this fix: > > Index: mps_pci.c > =================================================================== > --- mps_pci.c (revision 254147) > +++ mps_pci.c (working copy) > @@ -183,7 +183,6 @@ mps_pci_attach(device_t dev) > { > struct mps_softc *sc; > struct mps_ident *m; > - uint16_t command; > int error; > > sc = device_get_softc(dev); > @@ -193,18 +192,7 @@ mps_pci_attach(device_t dev) > sc->mps_flags = m->flags; > > /* Twiddle basic PCI config bits for a sanity check */ > - command = pci_read_config(dev, PCIR_COMMAND, 2); > - command |= PCIM_CMD_BUSMASTEREN; > - pci_write_config(dev, PCIR_COMMAND, command, 2); > - command = pci_read_config(dev, PCIR_COMMAND, 2); > - if ((command& PCIM_CMD_BUSMASTEREN) == 0) { > - mps_printf(sc, "Cannot enable PCI busmaster\n"); > - return (ENXIO); > - } > - if ((command& PCIM_CMD_MEMEN) == 0) { > - mps_printf(sc, "PCI memory window not available\n"); > - return (ENXIO); > - } > + pci_enable_busmaster(dev); > > /* Allocate the System Interface Register Set */ > sc->mps_regs_rid = PCIR_BAR(1); > _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "[email protected]"
