diff options
Diffstat (limited to 'arch/x86/pci/amd_bus.c')
| -rw-r--r-- | arch/x86/pci/amd_bus.c | 43 | 
1 files changed, 11 insertions, 32 deletions
diff --git a/arch/x86/pci/amd_bus.c b/arch/x86/pci/amd_bus.c index 026e4931d16..0567df3890e 100644 --- a/arch/x86/pci/amd_bus.c +++ b/arch/x86/pci/amd_bus.c @@ -30,34 +30,6 @@ static struct pci_hostbridge_probe pci_probes[] __initdata = {  	{ 0, 0x18, PCI_VENDOR_ID_AMD, 0x1300 },  }; -static u64 __initdata fam10h_mmconf_start; -static u64 __initdata fam10h_mmconf_end; -static void __init get_pci_mmcfg_amd_fam10h_range(void) -{ -	u32 address; -	u64 base, msr; -	unsigned segn_busn_bits; - -	/* assume all cpus from fam10h have mmconf */ -        if (boot_cpu_data.x86 < 0x10) -		return; - -	address = MSR_FAM10H_MMIO_CONF_BASE; -	rdmsrl(address, msr); - -	/* mmconfig is not enable */ -	if (!(msr & FAM10H_MMIO_CONF_ENABLE)) -		return; - -	base = msr & (FAM10H_MMIO_CONF_BASE_MASK<<FAM10H_MMIO_CONF_BASE_SHIFT); - -	segn_busn_bits = (msr >> FAM10H_MMIO_CONF_BUSRANGE_SHIFT) & -			 FAM10H_MMIO_CONF_BUSRANGE_MASK; - -	fam10h_mmconf_start = base; -	fam10h_mmconf_end = base + (1ULL<<(segn_busn_bits + 20)) - 1; -} -  #define RANGE_NUM 16  /** @@ -85,6 +57,9 @@ static int __init early_fill_mp_bus_info(void)  	u64 val;  	u32 address;  	bool found; +	struct resource fam10h_mmconf_res, *fam10h_mmconf; +	u64 fam10h_mmconf_start; +	u64 fam10h_mmconf_end;  	if (!early_pci_allowed())  		return -1; @@ -211,12 +186,17 @@ static int __init early_fill_mp_bus_info(void)  		subtract_range(range, RANGE_NUM, 0, end);  	/* get mmconfig */ -	get_pci_mmcfg_amd_fam10h_range(); +	fam10h_mmconf = amd_get_mmconfig_range(&fam10h_mmconf_res);  	/* need to take out mmconf range */ -	if (fam10h_mmconf_end) { -		printk(KERN_DEBUG "Fam 10h mmconf [%llx, %llx]\n", fam10h_mmconf_start, fam10h_mmconf_end); +	if (fam10h_mmconf) { +		printk(KERN_DEBUG "Fam 10h mmconf %pR\n", fam10h_mmconf); +		fam10h_mmconf_start = fam10h_mmconf->start; +		fam10h_mmconf_end = fam10h_mmconf->end;  		subtract_range(range, RANGE_NUM, fam10h_mmconf_start,  				 fam10h_mmconf_end + 1); +	} else { +		fam10h_mmconf_start = 0; +		fam10h_mmconf_end = 0;  	}  	/* mmio resource */ @@ -403,7 +383,6 @@ static void __init pci_enable_pci_io_ecs(void)  			++n;  		}  	} -	pr_info("Extended Config Space enabled on %u nodes\n", n);  #endif  }  |