x86_64: add mmconfig to resource tree
PATCH 1/1 x86_64: add mmconfig to resource tree
This patch addes the PCI memory mapped config region(s) to be visible in /proc/iomem. This will allow for more visibility into the physical memory map without having to parse the dmesg output.
Signed-off-by Aaron Durbin <[email protected]>
---
arch/x86_64/pci/mmconfig.c +33 -0
@@ -9,6 +9,7 @@ #include <linux/pci.h>#include <linux/init.h> #include <linux/acpi.h> #include <linux/bitmap.h> +#include <linux/ioport.h> #include <asm/e820.h> #include "pci.h"
@@ -164,6 +165,37 @@ static __init void unreachable_devices(v } } +static __init void pci_mmcfg_insert_resources (void ) +{ +#define PCI_MMCFG_RESOURCE_NAME_LEN 19 +int i; +struct resource *res; +char *names; +unsigned n; + + n = (PCI_MMCFG_RESOURCE_NAME_LEN +sizeof (*res)); + n *= pci_mmcfg_config_num; + + res =kcalloc (1 , n,GFP_KERNEL ); + +if (!res) +return ; + + names = (void *)&res[pci_mmcfg_config_num]; +for (i =0 ; i < pci_mmcfg_config_num; i++, res++) { + n = 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 + (n <<20 ) -1 ; + res->flags =IORESOURCE_MEM |IORESOURCE_BUSY ; +insert_resource (&iomem_resource, res); + names +=PCI_MMCFG_RESOURCE_NAME_LEN ; + } +} +void __init pci_mmcfg_init (void ) {int i;
@@ -205,6 +237,7 @@ void __init pci_mmcfg_init(void) }unreachable_devices (); +pci_mmcfg_insert_resources (); raw_pci_ops = &pci_mmcfg; pci_probe = (pci_probe & ~PCI_PROBE_MASK ) |PCI_PROBE_MMCONF ;