aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/setup-bus.c
diff options
context:
space:
mode:
authorAlex Williamson <alex.williamson@hp.com>2009-11-30 16:51:44 -0500
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-12-04 18:52:43 -0500
commit59353ea30e65ab3ae181d6175e3212e1361c3787 (patch)
tree4fc54f9c8e3b4dd5af6d7f125739ccac9f9d6410 /drivers/pci/setup-bus.c
parent04b55c4732780381410e52db0e9bfb7661f2b4b3 (diff)
PCI: Always set prefetchable base/limit upper32 registers
Prior to 1f82de10 we always initialized the upper 32bits of the prefetchable memory window, regardless of the address range used. Now we only touch it for a >32bit address, which means the upper32 registers remain whatever the BIOS initialized them too. It's valid for the BIOS to set the upper32 base/limit to 0xffffffff/0x00000000, which makes us program prefetchable ranges like 0xffffffffabc00000 - 0x00000000abc00000 Revert the chunk of 1f82de10 that made this conditional so we always write the upper32 registers and remove now unused pref_mem64 variable. Signed-off-by: Alex Williamson <alex.williamson@hp.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Diffstat (limited to 'drivers/pci/setup-bus.c')
-rw-r--r--drivers/pci/setup-bus.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 502d1704c533..c48cd377b3f5 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c
@@ -140,7 +140,6 @@ static void pci_setup_bridge(struct pci_bus *bus)
140 struct resource *res; 140 struct resource *res;
141 struct pci_bus_region region; 141 struct pci_bus_region region;
142 u32 l, bu, lu, io_upper16; 142 u32 l, bu, lu, io_upper16;
143 int pref_mem64;
144 143
145 if (pci_is_enabled(bridge)) 144 if (pci_is_enabled(bridge))
146 return; 145 return;
@@ -194,7 +193,6 @@ static void pci_setup_bridge(struct pci_bus *bus)
194 pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0); 193 pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0);
195 194
196 /* Set up PREF base/limit. */ 195 /* Set up PREF base/limit. */
197 pref_mem64 = 0;
198 bu = lu = 0; 196 bu = lu = 0;
199 res = bus->resource[2]; 197 res = bus->resource[2];
200 pcibios_resource_to_bus(bridge, &region, res); 198 pcibios_resource_to_bus(bridge, &region, res);
@@ -202,7 +200,6 @@ static void pci_setup_bridge(struct pci_bus *bus)
202 l = (region.start >> 16) & 0xfff0; 200 l = (region.start >> 16) & 0xfff0;
203 l |= region.end & 0xfff00000; 201 l |= region.end & 0xfff00000;
204 if (res->flags & IORESOURCE_MEM_64) { 202 if (res->flags & IORESOURCE_MEM_64) {
205 pref_mem64 = 1;
206 bu = upper_32_bits(region.start); 203 bu = upper_32_bits(region.start);
207 lu = upper_32_bits(region.end); 204 lu = upper_32_bits(region.end);
208 } 205 }
@@ -214,11 +211,9 @@ static void pci_setup_bridge(struct pci_bus *bus)
214 } 211 }
215 pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l); 212 pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
216 213
217 if (pref_mem64) { 214 /* Set the upper 32 bits of PREF base & limit. */
218 /* Set the upper 32 bits of PREF base & limit. */ 215 pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, bu);
219 pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, bu); 216 pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, lu);
220 pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, lu);
221 }
222 217
223 pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl); 218 pci_write_config_word(bridge, PCI_BRIDGE_CONTROL, bus->bridge_ctl);
224} 219}