]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sparc/PCI: Reserve legacy mmio after PCI mmio
authorYinghai Lu <yinghai@kernel.org>
Thu, 8 Oct 2015 21:38:23 +0000 (14:38 -0700)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Mon, 19 Oct 2015 20:41:06 +0000 (13:41 -0700)
On one system found bunch of claim resource fail from pci device.
pci_sun4v f02b894c: PCI host bridge to bus 0000:00
pci_bus 0000:00: root bus resource [io  0x2007e00000000-0x2007e0fffffff] (bus address [0x0000-0xfffffff])
pci_bus 0000:00: root bus resource [mem 0x2000000000000-0x200007effffff] (bus address [0x00000000-0x7effffff])
pci_bus 0000:00: root bus resource [mem 0x2000100000000-0x20007ffffffff] (bus address [0x100000000-0x7ffffffff])
...
PCI: Claiming 0000:00:02.0: Resource 14: 0002000000000000..00020000004fffff [200]
pci 0000:00:02.0: can't claim BAR 14 [mem 0x2000000000000-0x20000004fffff]: address conflict with Video RAM area [??? 0x20000000a0000-0x20000000bffff flags 0x80000000]
pci 0000:02:00.0: can't claim BAR 0 [mem 0x2000000000000-0x20000000fffff]: no compatible bridge window
PCI: Claiming 0000:02:00.0: Resource 3: 0002000000100000..0002000000103fff [200]
pci 0000:02:00.0: can't claim BAR 3 [mem 0x2000000100000-0x2000000103fff]: no compatible bridge window
PCI: Claiming 0000:02:00.1: Resource 0: 0002000000200000..00020000002fffff [200]
pci 0000:02:00.1: can't claim BAR 0 [mem 0x2000000200000-0x20000002fffff]: no compatible bridge window
PCI: Claiming 0000:02:00.1: Resource 3: 0002000000104000..0002000000107fff [200]
pci 0000:02:00.1: can't claim BAR 3 [mem 0x2000000104000-0x2000000107fff]: no compatible bridge window
PCI: Claiming 0000:02:00.2: Resource 0: 0002000000300000..00020000003fffff [200]
pci 0000:02:00.2: can't claim BAR 0 [mem 0x2000000300000-0x20000003fffff]: no compatible bridge window
PCI: Claiming 0000:02:00.2: Resource 3: 0002000000108000..000200000010bfff [200]
pci 0000:02:00.2: can't claim BAR 3 [mem 0x2000000108000-0x200000010bfff]: no compatible bridge window
PCI: Claiming 0000:02:00.3: Resource 0: 0002000000400000..00020000004fffff [200]
pci 0000:02:00.3: can't claim BAR 0 [mem 0x2000000400000-0x20000004fffff]: no compatible bridge window
PCI: Claiming 0000:02:00.3: Resource 3: 000200000010c000..000200000010ffff [200]
pci 0000:02:00.3: can't claim BAR 3 [mem 0x200000010c000-0x200000010ffff]: no compatible bridge window

The bridge 00:02.0 resource does not get reserved as Video RAM take the position early,
and following children all failed.

Move down Video RAM area reservation after pci mmio get reserved,
so we leave pci driver to use those regions.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Orabug: 21826746

Signed-off-by: Khalid Aziz <khalid.aziz@oracle.com>
(cherry picked from commit cc265ed0d546e2b46b6ae745d6510f2067b0a6d0)

arch/sparc/kernel/pci.c
arch/sparc/kernel/pci_common.c
arch/sparc/kernel/pci_impl.h

index 9ede0e77bd477f4c6549542677a1d65dd07927a1..a23d71865891e6def74dd6bee64bda15da59dbc8 100644 (file)
@@ -682,6 +682,7 @@ struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
        pci_bus_register_of_sysfs(bus);
 
        pci_claim_bus_resources(bus);
+       pci_register_legacy_regions(pbm);
        pci_bus_add_devices(bus);
        return bus;
 }
index c4b6989690dcf48736ec416eb77487755752a4b5..957dc9d0300d936315c2b09935538864d8a90476 100644 (file)
@@ -363,7 +363,7 @@ static void pci_register_region(struct pci_pbm_info *pbm, const char *name,
        }
 }
 
-static void pci_register_legacy_regions(struct pci_pbm_info *pbm)
+void pci_register_legacy_regions(struct pci_pbm_info *pbm)
 {
        /* VGA Video RAM. */
        pci_register_region(pbm, "Video RAM area", 0xa0000UL, 0x20000UL);
@@ -498,7 +498,6 @@ void pci_determine_mem_io_space(struct pci_pbm_info *pbm)
        if (pbm->mem64_space.flags)
                request_resource(&iomem_resource, &pbm->mem64_space);
 
-       pci_register_legacy_regions(pbm);
        pci_register_iommu_region(pbm);
 }
 
index 08b74af5717f2628c1530e07080cc92647898ea3..5b92ad4d1a6bfbc4f0c606e9357641c1288f3d41 100644 (file)
@@ -166,6 +166,7 @@ void pci_get_pbm_props(struct pci_pbm_info *pbm);
 struct pci_bus *pci_scan_one_pbm(struct pci_pbm_info *pbm,
                                 struct device *parent);
 void pci_determine_mem_io_space(struct pci_pbm_info *pbm);
+void pci_register_legacy_regions(struct pci_pbm_info *pbm);
 
 /* Error reporting support. */
 void pci_scan_for_target_abort(struct pci_pbm_info *, struct pci_bus *);