On Thu, May 26, 2011 at 3:40 PM, John Baldwin <jhb_at_freebsd.org> wrote: > Ohh, you have two devices behind this bridge that have prefetch ranges. > > As a hack, can you try this: > > Index: pci_pci.c > =================================================================== > --- pci_pci.c (revision 222285) > +++ pci_pci.c (working copy) > _at__at_ -162,8 +162,13 _at__at_ pcib_write_windows(struct pcib_softc *sc, int mask > { > device_t dev; > uint32_t val; > + uint16_t cmd; > > dev = sc->dev; > + cmd = pci_read_config(dev, PCIR_COMMAND, 2); > + if (cmd & (PCIM_CMD_PORTEN | PCIM_CMD_MEMEN)) > + pci_write_config(dev, PCIR_COMMAND, > + cmd & ~(PCIM_CMD_PORTEN | PCIM_CMD_MEMEN), 2); > if (sc->io.valid && mask & WIN_IO) { > val = pci_read_config(dev, PCIR_IOBASEL_1, 1); > if ((val & PCIM_BRIO_MASK) == PCIM_BRIO_32) { > _at__at_ -192,6 +197,8 _at__at_ pcib_write_windows(struct pcib_softc *sc, int mask > pci_write_config(dev, PCIR_PMBASEL_1, sc->pmem.base >> 16, 2); > pci_write_config(dev, PCIR_PMLIMITL_1, sc->pmem.limit >> 16, 2); > } > + if (cmd & (PCIM_CMD_PORTEN | PCIM_CMD_MEMEN)) > + pci_write_config(dev, PCIR_COMMAND, cmd, 2); > } > > static void > _at__at_ -337,6 +344,9 _at__at_ pcib_probe_windows(struct pcib_softc *sc) > pci_read_config(dev, PCIR_PMLIMITL_1, 2)); > max = 0xffffffff; > } > + /* XXX: Testing hack */ > + if (device_get_unit(sc->sc_dev) == 1) i'm assuming that "sc->sc_dev" should be "dev" (this fixes a compilation error). > + sc->pmem.limit = 0xefffffff; > pcib_alloc_window(sc, &sc->pmem, SYS_RES_MEMORY, > RF_PREFETCHABLE, max); > } that seems to work! btw, is my machine a test-pig for an upcoming change to the PCI bus driver?Received on Sat May 28 2011 - 23:45:49 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:14 UTC