|
@@ -665,21 +665,23 @@ static void pci_bridge_check_ranges(struct pci_bus *bus)
|
|
|
|
|
|
pci_read_config_word(bridge, PCI_IO_BASE, &io);
|
|
pci_read_config_word(bridge, PCI_IO_BASE, &io);
|
|
if (!io) {
|
|
if (!io) {
|
|
- pci_write_config_word(bridge, PCI_IO_BASE, 0xf0f0);
|
|
|
|
|
|
+ pci_write_config_word(bridge, PCI_IO_BASE, 0xe0f0);
|
|
pci_read_config_word(bridge, PCI_IO_BASE, &io);
|
|
pci_read_config_word(bridge, PCI_IO_BASE, &io);
|
|
pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
|
|
pci_write_config_word(bridge, PCI_IO_BASE, 0x0);
|
|
}
|
|
}
|
|
if (io)
|
|
if (io)
|
|
b_res[0].flags |= IORESOURCE_IO;
|
|
b_res[0].flags |= IORESOURCE_IO;
|
|
|
|
+
|
|
/* DECchip 21050 pass 2 errata: the bridge may miss an address
|
|
/* DECchip 21050 pass 2 errata: the bridge may miss an address
|
|
disconnect boundary by one PCI data phase.
|
|
disconnect boundary by one PCI data phase.
|
|
Workaround: do not use prefetching on this device. */
|
|
Workaround: do not use prefetching on this device. */
|
|
if (bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == 0x0001)
|
|
if (bridge->vendor == PCI_VENDOR_ID_DEC && bridge->device == 0x0001)
|
|
return;
|
|
return;
|
|
|
|
+
|
|
pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
|
|
pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
|
|
if (!pmem) {
|
|
if (!pmem) {
|
|
pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE,
|
|
pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE,
|
|
- 0xfff0fff0);
|
|
|
|
|
|
+ 0xffe0fff0);
|
|
pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
|
|
pci_read_config_dword(bridge, PCI_PREF_MEMORY_BASE, &pmem);
|
|
pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, 0x0);
|
|
pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, 0x0);
|
|
}
|
|
}
|