diff options
-rw-r--r-- | arch/x86/pci/fixup.c | 20 | ||||
-rw-r--r-- | drivers/pci/probe.c | 9 |
2 files changed, 8 insertions, 21 deletions
diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c index 7d388d5cf548..096b0ed0713e 100644 --- a/arch/x86/pci/fixup.c +++ b/arch/x86/pci/fixup.c | |||
@@ -495,26 +495,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_SIEMENS, 0x0015, | |||
495 | pci_siemens_interrupt_controller); | 495 | pci_siemens_interrupt_controller); |
496 | 496 | ||
497 | /* | 497 | /* |
498 | * Regular PCI devices have 256 bytes, but AMD Family 10h/11h CPUs have | ||
499 | * 4096 bytes configuration space for each function of their processor | ||
500 | * configuration space. | ||
501 | */ | ||
502 | static void amd_cpu_pci_cfg_space_size(struct pci_dev *dev) | ||
503 | { | ||
504 | dev->cfg_size = pci_cfg_space_size_ext(dev); | ||
505 | } | ||
506 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1200, amd_cpu_pci_cfg_space_size); | ||
507 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1201, amd_cpu_pci_cfg_space_size); | ||
508 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1202, amd_cpu_pci_cfg_space_size); | ||
509 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1203, amd_cpu_pci_cfg_space_size); | ||
510 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1204, amd_cpu_pci_cfg_space_size); | ||
511 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1300, amd_cpu_pci_cfg_space_size); | ||
512 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1301, amd_cpu_pci_cfg_space_size); | ||
513 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1302, amd_cpu_pci_cfg_space_size); | ||
514 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1303, amd_cpu_pci_cfg_space_size); | ||
515 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, 0x1304, amd_cpu_pci_cfg_space_size); | ||
516 | |||
517 | /* | ||
518 | * SB600: Disable BAR1 on device 14.0 to avoid HPET resources from | 498 | * SB600: Disable BAR1 on device 14.0 to avoid HPET resources from |
519 | * confusing the PCI engine: | 499 | * confusing the PCI engine: |
520 | */ | 500 | */ |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 9e7d642e66b0..579a56c8181f 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -847,6 +847,11 @@ int pci_cfg_space_size(struct pci_dev *dev) | |||
847 | { | 847 | { |
848 | int pos; | 848 | int pos; |
849 | u32 status; | 849 | u32 status; |
850 | u16 class; | ||
851 | |||
852 | class = dev->class >> 8; | ||
853 | if (class == PCI_CLASS_BRIDGE_HOST) | ||
854 | return pci_cfg_space_size_ext(dev); | ||
850 | 855 | ||
851 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); | 856 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); |
852 | if (!pos) { | 857 | if (!pos) { |
@@ -936,7 +941,6 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) | |||
936 | dev->multifunction = !!(hdr_type & 0x80); | 941 | dev->multifunction = !!(hdr_type & 0x80); |
937 | dev->vendor = l & 0xffff; | 942 | dev->vendor = l & 0xffff; |
938 | dev->device = (l >> 16) & 0xffff; | 943 | dev->device = (l >> 16) & 0xffff; |
939 | dev->cfg_size = pci_cfg_space_size(dev); | ||
940 | dev->error_state = pci_channel_io_normal; | 944 | dev->error_state = pci_channel_io_normal; |
941 | set_pcie_port_type(dev); | 945 | set_pcie_port_type(dev); |
942 | 946 | ||
@@ -952,6 +956,9 @@ static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn) | |||
952 | return NULL; | 956 | return NULL; |
953 | } | 957 | } |
954 | 958 | ||
959 | /* need to have dev->class ready */ | ||
960 | dev->cfg_size = pci_cfg_space_size(dev); | ||
961 | |||
955 | return dev; | 962 | return dev; |
956 | } | 963 | } |
957 | 964 | ||