On Sunday, May 22, 2011 1:20:39 pm deeptech71_at_gmail.com wrote: > On Sat, May 21, 2011 at 3:59 PM, deeptech71_at_gmail.com > <deeptech71_at_gmail.com> wrote: > > On Thu, May 19, 2011 at 11:35 PM, John Baldwin <jhb_at_freebsd.org> wrote: > >> Index: pci_pci.c > >> =================================================================== > >> --- pci_pci.c (revision 222093) > >> +++ 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_ -231,7 +238,9 _at__at_ pcib_alloc_window(struct pcib_softc *sc, struct pc > >> w->name, (uintmax_t)w->base, (uintmax_t)w->limit); > >> w->base = max_address; > >> w->limit = 0; > >> +#if 0 > >> pcib_write_windows(sc, w->mask); > >> +#endif > >> return; > >> } > >> pcib_activate_window(sc, type); > > > > that seems to work. > > oops, i forgot to set the AGP aperture size to 128M during testing. > that patch actually does NOT work. Hmmm, I've no idea why this breaks your device. It should just leave the window alone until we shrink it down to the actual window. 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) + sc->pmem.limit = 0xefffffff; pcib_alloc_window(sc, &sc->pmem, SYS_RES_MEMORY, RF_PREFETCHABLE, max); } -- John BaldwinReceived on Thu May 26 2011 - 11:40:38 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:14 UTC