浏览代码

[PATCH] i386: Add MMCFG resources to i386 too

Following earlier x86-64 patch

Cc: gregkh@suse.de

Signed-off-by: Andi Kleen <ak@suse.de>
Andi Kleen 19 年之前
父节点
当前提交
de09bddb9d
共有 1 个文件被更改,包括 35 次插入0 次删除
  1. 35 0
      arch/i386/pci/mmconfig.c

+ 35 - 0
arch/i386/pci/mmconfig.c

@@ -151,6 +151,38 @@ static struct pci_raw_ops pci_mmcfg = {
 	.write =	pci_mmcfg_write,
 	.write =	pci_mmcfg_write,
 };
 };
 
 
+
+static __init void pci_mmcfg_insert_resources(void)
+{
+#define PCI_MMCFG_RESOURCE_NAME_LEN 19
+	int i;
+	struct resource *res;
+	char *names;
+	unsigned num_buses;
+
+	res = kcalloc(PCI_MMCFG_RESOURCE_NAME_LEN + sizeof(*res),
+			pci_mmcfg_config_num, GFP_KERNEL);
+
+	if (!res) {
+		printk(KERN_ERR "PCI: Unable to allocate MMCONFIG resources\n");
+		return;
+	}
+
+	names = (void *)&res[pci_mmcfg_config_num];
+	for (i = 0; i < pci_mmcfg_config_num; i++, res++) {
+		num_buses = pci_mmcfg_config[i].end_bus_number -
+		    pci_mmcfg_config[i].start_bus_number + 1;
+		res->name = names;
+		snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN, "PCI MMCONFIG %u",
+			pci_mmcfg_config[i].pci_segment_group_number);
+		res->start = pci_mmcfg_config[i].base_address;
+		res->end = res->start + (num_buses << 20) - 1;
+		res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+		insert_resource(&iomem_resource, res);
+		names += PCI_MMCFG_RESOURCE_NAME_LEN;
+	}
+}
+
 /* K8 systems have some devices (typically in the builtin northbridge)
 /* K8 systems have some devices (typically in the builtin northbridge)
    that are only accessible using type1
    that are only accessible using type1
    Normally this can be expressed in the MCFG by not listing them
    Normally this can be expressed in the MCFG by not listing them
@@ -187,6 +219,8 @@ static __init void unreachable_devices(void)
 	}
 	}
 }
 }
 
 
+
+
 void __init pci_mmcfg_init(int type)
 void __init pci_mmcfg_init(int type)
 {
 {
 	if ((pci_probe & PCI_PROBE_MMCONF) == 0)
 	if ((pci_probe & PCI_PROBE_MMCONF) == 0)
@@ -214,4 +248,5 @@ void __init pci_mmcfg_init(int type)
 	pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
 	pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF;
 
 
 	unreachable_devices();
 	unreachable_devices();
+	pci_mmcfg_insert_resources();
 }
 }