Messages in this thread | | | Date | Sat, 22 Dec 2007 01:12:18 -0800 | From | Andrew Morton <> | Subject | Re: PCI resource problems caused by improper address rounding |
| |
On Thu, 20 Dec 2007 11:46:16 +0300 Ivan Kokshaysky <ink@jurassic.park.msu.ru> wrote:
> PCI: do respect full 64-bit address for bridge prefetch window > > Prevent the prefetch window from being programmed with a bogus address > when its respective resource gets allocated above the 4G mark. > > Note that we cannot yet guarantee correct resource allocations > above 4G, though it might work in some simple cases. >
So.. did we agree that this patch is good to go?
> --- a/drivers/pci/setup-bus.c > +++ b/drivers/pci/setup-bus.c > @@ -208,8 +208,11 @@ pci_setup_bridge(struct pci_bus *bus) > } > pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l); > > - /* Clear out the upper 32 bits of PREF base. */ > - pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0); > + /* Set up the upper 32 bits of PREF base/limit. */ > + l = region.start >> 16 >> 16;
We have the little upper_32_bits() helper for this.
> + pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, l); > + l = region.end >> 16 >> 16; > + pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, l); > > pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl); > }
| |