On Thu, May 19, 2011 at 11:35 PM, John Baldwin <jhb_at_freebsd.org> wrote: > On Thursday, May 19, 2011 12:28:46 pm deeptech71_at_gmail.com wrote: >> On Thu, May 19, 2011 at 2:13 PM, John Baldwin <jhb_at_freebsd.org> wrote: >> > Yeah, your BIOS continues to behave very poorly. Please try this hack to > see >> > if it allows your video to still work with any AGP aperture size: >> > >> > Index: pci_pci.c >> > =================================================================== >> > --- pci_pci.c (revision 222093) >> > +++ pci_pci.c (working copy) >> > _at__at_ -231,7 +231,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); >> >> does not. > > Hummm, that should leave the PCI-PCI bridge unchanged until we write the new > values in place so it's never "turned off" (only updated to use a smaller > range at some point). You could try patching write_windows to disable IO and > memory decoding in the PCI command register while the windows are frobbed. > > 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.Received on Sat May 21 2011 - 11:59:57 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:14 UTC