[PATCH] powerpc/pci: check the bus address instead of resource address in pcibios_fixup_resources

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE4849d

3 messages, 3 authors, 2013-06-05 · open the first message on its own page

[PATCH] powerpc/pci: check the bus address instead of resource address in pcibios_fixup_resources

From: Kevin Hao <hidden>
Date: 2013-06-05 12:27:13

If a BAR has the value of 0, we would assume that it is unset yet and
then mark the resource as unset and would reassign it later. But after
commit 6c5705fe (powerpc/PCI: get rid of device resource fixups)
the pcibios_fixup_resources is invoked after the bus address was
translated to linux resource. So the value of res->start is resource
address. And since the resource and bus address may be different, we
should translate it to the bus address before doing the check.

Signed-off-by: Kevin Hao <redacted>
---
 arch/powerpc/kernel/pci-common.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index 7f2273c..eabeec9 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -827,6 +827,7 @@ static void pcibios_fixup_resources(struct pci_dev *dev)
 	}
 	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
 		struct resource *res = dev->resource + i;
+		struct pci_bus_region reg;
 		if (!res->flags)
 			continue;
 
@@ -835,8 +836,9 @@ static void pcibios_fixup_resources(struct pci_dev *dev)
 		 * at 0 as unset as well, except if PCI_PROBE_ONLY is also set
 		 * since in that case, we don't want to re-assign anything
 		 */
+		pcibios_resource_to_bus(dev, &reg, res);
 		if (pci_has_flag(PCI_REASSIGN_ALL_RSRC) ||
-		    (res->start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) {
+		    (reg.start == 0 && !pci_has_flag(PCI_PROBE_ONLY))) {
 			/* Only print message if not re-assigning */
 			if (!pci_has_flag(PCI_REASSIGN_ALL_RSRC))
 				pr_debug("PCI:%s Resource %d %016llx-%016llx [%x] "
-- 
1.8.1.4

RE: [PATCH] powerpc/pci: check the bus address instead of resource address in pcibios_fixup_resources

From: David Laight <hidden>
Date: 2013-06-05 13:11:15

If a BAR has the value of 0, we would assume that it is unset yet and
then mark the resource as unset and would reassign it later.
IIRC the PCI spec allows a BAR address of zero.
Certainly some sparc systems have assigned 0 to a BAR.
So assuming a BAR of 0 means it is unset may not be
true for all systems.

	David

Re: [PATCH] powerpc/pci: check the bus address instead of resource address in pcibios_fixup_resources

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2013-06-05 22:38:25

On Wed, 2013-06-05 at 14:10 +0100, David Laight wrote:
quoted
If a BAR has the value of 0, we would assume that it is unset yet and
then mark the resource as unset and would reassign it later.
IIRC the PCI spec allows a BAR address of zero.
Certainly some sparc systems have assigned 0 to a BAR.
So assuming a BAR of 0 means it is unset may not be
true for all systems.
Yes, look at the code and the comment above :-) It tries to make a
guess... which so far has worked well for us.

Note that people assigning 0 to BARs are asking for trouble anyway.

Cheers,
Ben.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help