diff options
Diffstat (limited to 'arch/powerpc/kernel/pci-common.c')
-rw-r--r-- | arch/powerpc/kernel/pci-common.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 9c69e7e145c5..4fee63cb53ff 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -1366,12 +1366,17 @@ static void __init pcibios_allocate_resources(int pass) | |||
1366 | 1366 | ||
1367 | for_each_pci_dev(dev) { | 1367 | for_each_pci_dev(dev) { |
1368 | pci_read_config_word(dev, PCI_COMMAND, &command); | 1368 | pci_read_config_word(dev, PCI_COMMAND, &command); |
1369 | for (idx = 0; idx < 6; idx++) { | 1369 | for (idx = 0; idx <= PCI_ROM_RESOURCE; idx++) { |
1370 | r = &dev->resource[idx]; | 1370 | r = &dev->resource[idx]; |
1371 | if (r->parent) /* Already allocated */ | 1371 | if (r->parent) /* Already allocated */ |
1372 | continue; | 1372 | continue; |
1373 | if (!r->flags || (r->flags & IORESOURCE_UNSET)) | 1373 | if (!r->flags || (r->flags & IORESOURCE_UNSET)) |
1374 | continue; /* Not assigned at all */ | 1374 | continue; /* Not assigned at all */ |
1375 | /* We only allocate ROMs on pass 1 just in case they | ||
1376 | * have been screwed up by firmware | ||
1377 | */ | ||
1378 | if (idx == PCI_ROM_RESOURCE ) | ||
1379 | disabled = 1; | ||
1375 | if (r->flags & IORESOURCE_IO) | 1380 | if (r->flags & IORESOURCE_IO) |
1376 | disabled = !(command & PCI_COMMAND_IO); | 1381 | disabled = !(command & PCI_COMMAND_IO); |
1377 | else | 1382 | else |
@@ -1382,17 +1387,19 @@ static void __init pcibios_allocate_resources(int pass) | |||
1382 | if (pass) | 1387 | if (pass) |
1383 | continue; | 1388 | continue; |
1384 | r = &dev->resource[PCI_ROM_RESOURCE]; | 1389 | r = &dev->resource[PCI_ROM_RESOURCE]; |
1385 | if (r->flags & IORESOURCE_ROM_ENABLE) { | 1390 | if (r->flags) { |
1386 | /* Turn the ROM off, leave the resource region, | 1391 | /* Turn the ROM off, leave the resource region, |
1387 | * but keep it unregistered. | 1392 | * but keep it unregistered. |
1388 | */ | 1393 | */ |
1389 | u32 reg; | 1394 | u32 reg; |
1390 | pr_debug("PCI: Switching off ROM of %s\n", | ||
1391 | pci_name(dev)); | ||
1392 | r->flags &= ~IORESOURCE_ROM_ENABLE; | ||
1393 | pci_read_config_dword(dev, dev->rom_base_reg, ®); | 1395 | pci_read_config_dword(dev, dev->rom_base_reg, ®); |
1394 | pci_write_config_dword(dev, dev->rom_base_reg, | 1396 | if (reg & PCI_ROM_ADDRESS_ENABLE) { |
1395 | reg & ~PCI_ROM_ADDRESS_ENABLE); | 1397 | pr_debug("PCI: Switching off ROM of %s\n", |
1398 | pci_name(dev)); | ||
1399 | r->flags &= ~IORESOURCE_ROM_ENABLE; | ||
1400 | pci_write_config_dword(dev, dev->rom_base_reg, | ||
1401 | reg & ~PCI_ROM_ADDRESS_ENABLE); | ||
1402 | } | ||
1396 | } | 1403 | } |
1397 | } | 1404 | } |
1398 | } | 1405 | } |