|
@@ -13,7 +13,10 @@
|
|
|
|
|
|
#include "pci.h"
|
|
#include "pci.h"
|
|
|
|
|
|
-#define MMCONFIG_APER_SIZE (256*1024*1024)
|
|
|
|
|
|
+/* aperture is up to 256MB but BIOS may reserve less */
|
|
|
|
+#define MMCONFIG_APER_MIN (2 * 1024*1024)
|
|
|
|
+#define MMCONFIG_APER_MAX (256 * 1024*1024)
|
|
|
|
+
|
|
/* Verify the first 16 busses. We assume that systems with more busses
|
|
/* Verify the first 16 busses. We assume that systems with more busses
|
|
get MCFG right. */
|
|
get MCFG right. */
|
|
#define MAX_CHECK_BUS 16
|
|
#define MAX_CHECK_BUS 16
|
|
@@ -175,9 +178,10 @@ void __init pci_mmcfg_init(void)
|
|
return;
|
|
return;
|
|
|
|
|
|
if (!e820_all_mapped(pci_mmcfg_config[0].base_address,
|
|
if (!e820_all_mapped(pci_mmcfg_config[0].base_address,
|
|
- pci_mmcfg_config[0].base_address + MMCONFIG_APER_SIZE,
|
|
|
|
|
|
+ pci_mmcfg_config[0].base_address + MMCONFIG_APER_MIN,
|
|
E820_RESERVED)) {
|
|
E820_RESERVED)) {
|
|
- printk(KERN_ERR "PCI: BIOS Bug: MCFG area is not E820-reserved\n");
|
|
|
|
|
|
+ printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %x is not E820-reserved\n",
|
|
|
|
+ pci_mmcfg_config[0].base_address);
|
|
printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
|
|
printk(KERN_ERR "PCI: Not using MMCONFIG.\n");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -190,7 +194,8 @@ void __init pci_mmcfg_init(void)
|
|
}
|
|
}
|
|
for (i = 0; i < pci_mmcfg_config_num; ++i) {
|
|
for (i = 0; i < pci_mmcfg_config_num; ++i) {
|
|
pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i];
|
|
pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i];
|
|
- pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, MMCONFIG_APER_SIZE);
|
|
|
|
|
|
+ pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address,
|
|
|
|
+ MMCONFIG_APER_MAX);
|
|
if (!pci_mmcfg_virt[i].virt) {
|
|
if (!pci_mmcfg_virt[i].virt) {
|
|
printk("PCI: Cannot map mmconfig aperture for segment %d\n",
|
|
printk("PCI: Cannot map mmconfig aperture for segment %d\n",
|
|
pci_mmcfg_config[i].pci_segment_group_number);
|
|
pci_mmcfg_config[i].pci_segment_group_number);
|