Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1373893
| From | Yinghai Lu <yinghai@kernel.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v11 05/60] sparc/PCI: Reserve legacy mmio after PCI mmio |
| Date | 2016-04-08 02:40 +0200 |
| Message-ID | <rlsCS-3LP-13@gated-at.bofh.it> (permalink) |
| References | <rlsjv-3zZ-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
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 resources reservation all fail.
Move down Video RAM area reservation after pci mmio get reserved,
so we leave pci driver to use those regions.
-v5: merge simplify one and use pcibios_bus_to_resource()
-v6: use pci_find_bus_resource()
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Tested-by: Khalid Aziz <khalid.aziz@oracle.com>
---
arch/sparc/kernel/pci.c | 1 +
arch/sparc/kernel/pci_common.c | 59 ++++++++++++++++++++++--------------------
arch/sparc/kernel/pci_impl.h | 1 +
3 files changed, 33 insertions(+), 28 deletions(-)
diff --git a/arch/sparc/kernel/pci.c b/arch/sparc/kernel/pci.c
index 4606dc1..9c6daad 100644
--- a/arch/sparc/kernel/pci.c
+++ b/arch/sparc/kernel/pci.c
@@ -677,6 +677,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(bus);
pci_bus_add_devices(bus);
return bus;
}
diff --git a/arch/sparc/kernel/pci_common.c b/arch/sparc/kernel/pci_common.c
index 76998f8..1ebc7ff 100644
--- a/arch/sparc/kernel/pci_common.c
+++ b/arch/sparc/kernel/pci_common.c
@@ -328,41 +328,46 @@ void pci_get_pbm_props(struct pci_pbm_info *pbm)
}
}
-static void pci_register_legacy_regions(struct resource *io_res,
- struct resource *mem_res)
+static void pci_register_region(struct pci_bus *bus, const char *name,
+ resource_size_t rstart, resource_size_t size)
{
- struct resource *p;
+ struct resource *res, *conflict, *bus_res;
+ struct pci_bus_region region;
- /* VGA Video RAM. */
- p = kzalloc(sizeof(*p), GFP_KERNEL);
- if (!p)
+ res = kzalloc(sizeof(*res), GFP_KERNEL);
+ if (!res)
return;
- p->name = "Video RAM area";
- p->start = mem_res->start + 0xa0000UL;
- p->end = p->start + 0x1ffffUL;
- p->flags = IORESOURCE_BUSY;
- request_resource(mem_res, p);
+ res->flags = IORESOURCE_MEM;
- p = kzalloc(sizeof(*p), GFP_KERNEL);
- if (!p)
+ region.start = rstart;
+ region.end = rstart + size - 1UL;
+ pcibios_bus_to_resource(bus, res, ®ion);
+ bus_res = pci_find_bus_resource(bus, res);
+ if (!bus_res) {
+ kfree(res);
return;
+ }
+
+ res->name = name;
+ res->flags |= IORESOURCE_BUSY;
+ conflict = request_resource_conflict(bus_res, res);
+ if (conflict) {
+ dev_printk(KERN_DEBUG, &bus->dev,
+ " can't claim %s %pR: address conflict with %s %pR\n",
+ res->name, res, conflict->name, conflict);
+ kfree(res);
+ }
+}
- p->name = "System ROM";
- p->start = mem_res->start + 0xf0000UL;
- p->end = p->start + 0xffffUL;
- p->flags = IORESOURCE_BUSY;
- request_resource(mem_res, p);
+void pci_register_legacy_regions(struct pci_bus *bus)
+{
+ /* VGA Video RAM. */
+ pci_register_region(bus, "Video RAM area", 0xa0000UL, 0x20000UL);
- p = kzalloc(sizeof(*p), GFP_KERNEL);
- if (!p)
- return;
+ pci_register_region(bus, "System ROM", 0xf0000UL, 0x10000UL);
- p->name = "Video ROM";
- p->start = mem_res->start + 0xc0000UL;
- p->end = p->start + 0x7fffUL;
- p->flags = IORESOURCE_BUSY;
- request_resource(mem_res, p);
+ pci_register_region(bus, "Video ROM", 0xc0000UL, 0x8000UL);
}
static void pci_register_iommu_region(struct pci_pbm_info *pbm)
@@ -504,8 +509,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->io_space,
- &pbm->mem_space);
pci_register_iommu_region(pbm);
}
diff --git a/arch/sparc/kernel/pci_impl.h b/arch/sparc/kernel/pci_impl.h
index 2853af7..ff8f5e1 100644
--- a/arch/sparc/kernel/pci_impl.h
+++ b/arch/sparc/kernel/pci_impl.h
@@ -167,6 +167,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_bus *bus);
/* Error reporting support. */
void pci_scan_for_target_abort(struct pci_pbm_info *, struct pci_bus *);
--
1.8.4.5
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v11 00/60] PCI: Resource allocation cleanup for v4.7 Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 22/60] PCI: Get new realloc size for bridge for last try Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 42/60] PCI: Skip required+optional if there is no optional Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 25/60] PCI: Reuse res_to_dev_res() in reassign_resources_sorted() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 29/60] PCI: Don't add too much optional size for hotplug bridge MMIO Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 35/60] PCI: Simplify res reference using in __assign_resources_sorted() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 32/60] PCI: Rename pdev_sort_resources() to pdev_assign_resources_prepare() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 34/60] PCI: Add debug printout during releasing partial assigned resources Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 26/60] PCI: Use correct align for optional only resources during sorting Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 38/60] PCI: Check if resource is allocated before trying to assign one Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 31/60] PCI: Remove duplicated code for resource sorting Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 56/60] PCI: Add debug print out for min_align and alt_size Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 12/60] PCI: Check pref compatible bit for mem64 resource of PCIe device Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 58/60] PCI: Introduce resource_disabled() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 24/60] PCI: Cleanup res_to_dev_res() printout Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 39/60] PCI: Separate out save_resources()/restore_resources() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 49/60] PCI: Don't add too much io port for hotplug bridge with old size Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 54/60] resources: Make allocate_resource() return best fit resource Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 46/60] PCI: Fix size calculation with old_size on rescan path Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 48/60] PCI: Move ISA io port align out of calculate_iosize() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 02/60] alpha/PCI: Only check iomem_is_exclusive() for IORESOURCE_MEM, not IORESOURCE_IO Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 41/60] PCI: Separate required+optional assigning to another function Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 33/60] PCI: Treat ROM resource as optional during realloc Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:30 +0200
[PATCH v11 28/60] PCI: Optimize bus align/size calculation for optional during sizing Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 04/60] sparc/PCI: Use correct offset for bus address to resource Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 23/60] PCI: Don't release sibling bridge resources during hotplug Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 05/60] sparc/PCI: Reserve legacy mmio after PCI mmio Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 53/60] PCI: Kill macro checking for bus io port sizing Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 03/60] PCI: Add pci_find_bus_resource() Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 11/60] OF/PCI: Add IORESOURCE_MEM_64 for 64-bit resource Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 06/60] sparc/PCI: Add IORESOURCE_MEM_64 for 64-bit resource in OF parsing Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 08/60] PCI: Kill wrong quirk about M7101 Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 14/60] PCI: Add has_mem64 for struct host_bridge Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 30/60] PCI: Reorder resources list for required/optional resources Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 44/60] PCI: Add alt_size ressource allocation support Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
Re: [PATCH v11 44/60] PCI: Add alt_size ressource allocation support Linus Torvalds <torvalds@linux-foundation.org> - 2016-04-08 03:00 +0200
Re: [PATCH v11 44/60] PCI: Add alt_size ressource allocation support Yinghai Lu <yinghai@kernel.org> - 2016-04-08 08:00 +0200
Re: [PATCH v11 44/60] PCI: Add alt_size ressource allocation support Benjamin Herrenschmidt <benh@kernel.crashing.org> - 2016-04-08 08:40 +0200
[PATCH v11 13/60] PCI: Only treat non-pref mmio64 as pref if all bridges have MEM_64 Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
[PATCH v11 19/60] PCI: Set resource to FIXED for LSI devices Yinghai Lu <yinghai@kernel.org> - 2016-04-08 02:40 +0200
Re: [PATCH v11 00/60] PCI: Resource allocation cleanup for v4.7 Linus Torvalds <torvalds@linux-foundation.org> - 2016-04-08 03:00 +0200
Re: [PATCH v11 00/60] PCI: Resource allocation cleanup for v4.7 Yinghai Lu <yinghai@kernel.org> - 2016-04-09 07:40 +0200
[PATCH v11 50/60] PCI: Unify calculate_size() for io port and MMIO Yinghai Lu <yinghai@kernel.org> - 2016-04-08 03:20 +0200
csiph-web