Commit df5eb1d6 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Jesse Barnes

x86/PCI: MMCONFIG: add PCI_MMCFG_BUS_OFFSET() to factor common expression

This factors out the common "bus << 20" expression used when computing the
MMCONFIG address.
Reviewed-by: default avatarYinghai Lu <yinghai@kernel.org>
Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent f7ca6984
...@@ -124,6 +124,8 @@ extern void __init pci_mmcfg_arch_free(void); ...@@ -124,6 +124,8 @@ extern void __init pci_mmcfg_arch_free(void);
extern struct acpi_mcfg_allocation *pci_mmcfg_config; extern struct acpi_mcfg_allocation *pci_mmcfg_config;
extern int pci_mmcfg_config_num; extern int pci_mmcfg_config_num;
#define PCI_MMCFG_BUS_OFFSET(bus) ((bus) << 20)
/* /*
* AMD Fam10h CPUs are buggy, and cannot access MMIO config space * AMD Fam10h CPUs are buggy, and cannot access MMIO config space
* on their northbrige except through the * %eax register. As such, you MUST * on their northbrige except through the * %eax register. As such, you MUST
......
...@@ -355,8 +355,9 @@ static void __init pci_mmcfg_insert_resources(void) ...@@ -355,8 +355,9 @@ static void __init pci_mmcfg_insert_resources(void)
snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN, snprintf(names, PCI_MMCFG_RESOURCE_NAME_LEN,
"PCI MMCONFIG %u [%02x-%02x]", cfg->pci_segment, "PCI MMCONFIG %u [%02x-%02x]", cfg->pci_segment,
cfg->start_bus_number, cfg->end_bus_number); cfg->start_bus_number, cfg->end_bus_number);
res->start = cfg->address + (cfg->start_bus_number << 20); res->start = cfg->address +
res->end = res->start + (num_buses << 20) - 1; PCI_MMCFG_BUS_OFFSET(cfg->start_bus_number);
res->end = res->start + PCI_MMCFG_BUS_OFFSET(num_buses) - 1;
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
insert_resource(&iomem_resource, res); insert_resource(&iomem_resource, res);
names += PCI_MMCFG_RESOURCE_NAME_LEN; names += PCI_MMCFG_RESOURCE_NAME_LEN;
...@@ -478,15 +479,14 @@ static void __init pci_mmcfg_reject_broken(int early) ...@@ -478,15 +479,14 @@ static void __init pci_mmcfg_reject_broken(int early)
return; return;
for (i = 0; i < pci_mmcfg_config_num; i++) { for (i = 0; i < pci_mmcfg_config_num; i++) {
int valid = 0; int num_buses, valid = 0;
u64 addr, size; u64 addr, size;
cfg = &pci_mmcfg_config[i]; cfg = &pci_mmcfg_config[i];
addr = cfg->start_bus_number; addr = cfg->address +
addr <<= 20; PCI_MMCFG_BUS_OFFSET(cfg->start_bus_number);
addr += cfg->address; num_buses = cfg->end_bus_number - cfg->start_bus_number + 1;
size = cfg->end_bus_number + 1 - cfg->start_bus_number; size = PCI_MMCFG_BUS_OFFSET(num_buses);
size <<= 20;
printk(KERN_NOTICE "PCI: MCFG configuration %d: base %lx " printk(KERN_NOTICE "PCI: MCFG configuration %d: base %lx "
"segment %hu buses %u - %u\n", "segment %hu buses %u - %u\n",
i, (unsigned long)cfg->address, cfg->pci_segment, i, (unsigned long)cfg->address, cfg->pci_segment,
......
...@@ -47,7 +47,7 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn) ...@@ -47,7 +47,7 @@ static u32 get_base_addr(unsigned int seg, int bus, unsigned devfn)
*/ */
static void pci_exp_set_dev_base(unsigned int base, int bus, int devfn) static void pci_exp_set_dev_base(unsigned int base, int bus, int devfn)
{ {
u32 dev_base = base | (bus << 20) | (devfn << 12); u32 dev_base = base | PCI_MMCFG_BUS_OFFSET(bus) | (devfn << 12);
int cpu = smp_processor_id(); int cpu = smp_processor_id();
if (dev_base != mmcfg_last_accessed_device || if (dev_base != mmcfg_last_accessed_device ||
cpu != mmcfg_last_accessed_cpu) { cpu != mmcfg_last_accessed_cpu) {
......
...@@ -43,7 +43,7 @@ static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned i ...@@ -43,7 +43,7 @@ static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned i
addr = get_virt(seg, bus); addr = get_virt(seg, bus);
if (!addr) if (!addr)
return NULL; return NULL;
return addr + ((bus << 20) | (devfn << 12)); return addr + (PCI_MMCFG_BUS_OFFSET(bus) | (devfn << 12));
} }
static int pci_mmcfg_read(unsigned int seg, unsigned int bus, static int pci_mmcfg_read(unsigned int seg, unsigned int bus,
...@@ -113,17 +113,16 @@ static void __iomem * __init mcfg_ioremap(struct acpi_mcfg_allocation *cfg) ...@@ -113,17 +113,16 @@ static void __iomem * __init mcfg_ioremap(struct acpi_mcfg_allocation *cfg)
{ {
void __iomem *addr; void __iomem *addr;
u64 start, size; u64 start, size;
int num_buses;
start = cfg->start_bus_number; start = cfg->address + PCI_MMCFG_BUS_OFFSET(cfg->start_bus_number);
start <<= 20; num_buses = cfg->end_bus_number - cfg->start_bus_number + 1;
start += cfg->address; size = PCI_MMCFG_BUS_OFFSET(num_buses);
size = cfg->end_bus_number + 1 - cfg->start_bus_number;
size <<= 20;
addr = ioremap_nocache(start, size); addr = ioremap_nocache(start, size);
if (addr) { if (addr) {
printk(KERN_INFO "PCI: Using MMCONFIG at %Lx - %Lx\n", printk(KERN_INFO "PCI: Using MMCONFIG at %Lx - %Lx\n",
start, start + size - 1); start, start + size - 1);
addr -= cfg->start_bus_number << 20; addr -= PCI_MMCFG_BUS_OFFSET(cfg->start_bus_number);
} }
return addr; return addr;
} }
...@@ -162,7 +161,7 @@ void __init pci_mmcfg_arch_free(void) ...@@ -162,7 +161,7 @@ void __init pci_mmcfg_arch_free(void)
for (i = 0; i < pci_mmcfg_config_num; ++i) { for (i = 0; i < pci_mmcfg_config_num; ++i) {
if (pci_mmcfg_virt[i].virt) { if (pci_mmcfg_virt[i].virt) {
iounmap(pci_mmcfg_virt[i].virt + (pci_mmcfg_virt[i].cfg->start_bus_number << 20)); iounmap(pci_mmcfg_virt[i].virt + PCI_MMCFG_BUS_OFFSET(pci_mmcfg_virt[i].cfg->start_bus_number));
pci_mmcfg_virt[i].virt = NULL; pci_mmcfg_virt[i].virt = NULL;
pci_mmcfg_virt[i].cfg = NULL; pci_mmcfg_virt[i].cfg = NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment