+ x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used.patch added to -mm tree
[email protected]
tree noticeThe patch titled
x86_64: set cfg_size for AMD Family 10h in case MMCONFIG is used
has been added to the -mm tree. Its filename is
x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used.patch
Before you just go and hit "reply", please:
a) Consider who else should be cc'ed
b) Prefer to cc a suitable mailing list as well
c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's
*** Remember to use Documentation/SubmitChecklist when testing your code ***
See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this
The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/
------------------------------------------------------
Subject: x86_64: set cfg_size for AMD Family 10h in case MMCONFIG is used
From: Yinghai Lu <[email protected]>
Reuse pci_cfg_space_size but skip check pci express and pci-x CAP ID.
---
arch/x86/pci/fixup.c | 14 ++++++++++++++ drivers/pci/probe.c | 11 ++++++++++- include/linux/pci.h | 1 + 3 files changed, 25 insertions(+), 1 deletion(-)
arch/x86/pci/fixup.c renamed from arch/x86/pci/fixup.c~x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used +14 -0
@@ -491,3 +491,17 @@ static void __devinit pci_siemens_interr }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SIEMENS ,0x0015 , pci_siemens_interrupt_controller); + +/* +* Regular PCI devices have 256 bytes, but AMD Family 10h Opteron ext config +* have 4096 bytes. Even if the device is capable, that doesn't mean we can +* access it. Maybe we don't have a way to generate extended config space +* accesses. So check it +*/ +static void fam10h_pci_cfg_space_size (struct pci_dev *dev) +{ + dev->cfg_size =pci_cfg_space_size_ext (dev,0 ); +} + +DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_AMD ,PCI_ANY_ID , + fam10h_pci_cfg_space_size);
drivers/pci/probe.c renamed from drivers/pci/probe.c~x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used +10 -1
@@ -827,11 +827,14 @@ static void set_pcie_port_type(struct pc* reading the dword at 0x100 which must either be 0 or a valid extended * capability header. */ -int pci_cfg_space_size (struct pci_dev *dev) +int pci_cfg_space_size_ext (struct pci_dev *dev,unsigned check_exp_pcix) {int pos;u32 status; +if (!check_exp_pcix) + goto skip; + pos =pci_find_capability (dev,PCI_CAP_ID_EXP );if (!pos) { pos =pci_find_capability (dev,PCI_CAP_ID_PCIX );
@@ -843,6 +846,7 @@ int pci_cfg_space_size(struct pci_dev *d goto fail; } + skip:if (pci_read_config_dword (dev,256 , &status) !=PCIBIOS_SUCCESSFUL ) goto fail;if (status ==0xffffffff )
@@ -854,6 +858,11 @@ int pci_cfg_space_size(struct pci_dev *dreturn PCI_CFG_SPACE_SIZE ; } +int pci_cfg_space_size (struct pci_dev *dev) +{ +return pci_cfg_space_size_ext (dev,1 ); +} +static void pci_release_bus_bridge_dev (struct device *dev) {kfree (dev);
include/linux/pci.h renamed from include/linux/pci.h~x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used +1 -0
@@ -663,6 +663,7 @@ int pci_scan_bridge(struct pci_bus *bus,void pci_walk_bus (struct pci_bus *top,void (*cb)(struct pci_dev *,void *),void *userdata); +int pci_cfg_space_size_ext (struct pci_dev *dev,unsigned check_exp_pcix);int pci_cfg_space_size (struct pci_dev *dev);unsigned char pci_bus_max_busnr (struct pci_bus * bus);
_
Patches currently in -mm which might be from [email protected] are
git-cpufreq.patch serial-keep-the-dtr-setting-for-serial-console.patch pcie-aer-dont-check-_osc-when-acpi-is-disabled.patch git-x86.patch pci-dont-load-acpi_php-when-acpi-is-disabled.patch x86-clear-pci_mmcfg_virt-when-mmcfg-get-rejected.patch x86-mmconf-enable-mcfg-early.patch x86-mmconf-enable-mcfg-early-cleanup.patch x86_64-check-and-enable-mmconfig-for-amd-family-10h-opteron-v3.patch x86_64-check-msr-to-get-mmconfig-for-amd-family-10h-opteron-v3-2.patch x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used.patch kernel-printkc-concerns-about-the-console-handover.patch
PATCH 1/1 x86_64: AMD Family 10h enable ext config in quirk
need to be applied after gregkh-pci-pci-make-pci-extended-config-space-a-driver-opt-in.patch x86_64-set-cfg_size-for-amd-family-10h-in-case-mmconfig-is-used.patch
[PATCH] x86_64: AMD Family 10h enable ext config in quirk
because of changes of gregkh-pci-pci-make-pci-extended-config-space-a-driver-opt-in.patch
need to call pci_enable_ext_config to enable mmconfig before set right cfg_size even MCFG is there
arch/x86/pci/fixup.c +4 -2
@@ -498,10 +498,12 @@* access it. Maybe we don't have a way to generate extended config space * accesses. So check it */ -static void fam10h_pci_cfg_space_size (struct pci_dev *dev) +static void fam10h_enable_pci_ext_cfg (struct pci_dev *dev) { +pci_enable_ext_config (dev); +/* recheck cfg_size without pcie_pcix checking */ dev->cfg_size =pci_cfg_space_size_ext (dev,0 ); }DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_AMD ,PCI_ANY_ID , - fam10h_pci_cfg_space_size); + fam10h_enable_pci_ext_cfg);