linux/3.9: implement pcibios_get_phb_of_node for MIPS
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 36495
This commit is contained in:
parent
41445b41cc
commit
0fa71ca3e5
2 changed files with 88 additions and 0 deletions
|
@ -0,0 +1,40 @@
|
|||
From 10629d711ed780470937ecda50d9ffa0e925a4ee Mon Sep 17 00:00:00 2001
|
||||
From: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Date: Wed, 10 Apr 2013 09:56:54 -0600
|
||||
Subject: [PATCH 1/2] PCI: Remove __weak annotation from
|
||||
pcibios_get_phb_of_node decl
|
||||
|
||||
The __weak annotation on the pcibios_get_phb_of_node() declaration
|
||||
causes *every* definition to be marked "weak." The linker then
|
||||
selects one based on link order, which may be the wrong one.
|
||||
|
||||
Gabor found that on MIPS, the linker selected the generic implementation
|
||||
from drivers/pci even though arch/mips supplied a definition without the
|
||||
__weak annotation:
|
||||
|
||||
$ mipsel-openwrt-linux-readelf -s arch/mips/pci/built-in.o \
|
||||
drivers/pci/built-in.o vmlinux.o | grep pcibios_get_phb_of_node
|
||||
86: 0000046c 12 FUNC WEAK DEFAULT 2 pcibios_get_phb_of_node
|
||||
1430: 00012e2c 104 FUNC WEAK DEFAULT 2 pcibios_get_phb_of_node
|
||||
31898: 0017e4ec 104 FUNC WEAK DEFAULT 2 pcibios_get_phb_of_node
|
||||
|
||||
This removes the __weak annotation from the pcibios_get_phb_of_node()
|
||||
declaration so arch-specific non-weak implementations work reliably.
|
||||
|
||||
Suggested-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
---
|
||||
include/linux/pci.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/include/linux/pci.h
|
||||
+++ b/include/linux/pci.h
|
||||
@@ -1824,7 +1824,7 @@ extern void pci_set_bus_of_node(struct p
|
||||
extern void pci_release_bus_of_node(struct pci_bus *bus);
|
||||
|
||||
/* Arch may override this (weak) */
|
||||
-extern struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus);
|
||||
+extern struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus);
|
||||
|
||||
static inline struct device_node *
|
||||
pci_device_to_OF_node(const struct pci_dev *pdev)
|
|
@ -0,0 +1,48 @@
|
|||
From 9a97cd43f4ef62520a852b5a2348233b0f37455b Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <juhosg@openwrt.org>
|
||||
Date: Thu, 4 Apr 2013 20:01:23 +0200
|
||||
Subject: [PATCH 2/2] MIPS/PCI: Implement pcibios_get_phb_of_node
|
||||
|
||||
The of_node field of the device assigned to a
|
||||
PCI bus is used during scanning of the PCI bus.
|
||||
However on MIPS, the of_node field is assigned
|
||||
only after the bus has been scanned.
|
||||
|
||||
Implement the architecture specific version of
|
||||
'pcibios_get_phb_of_node'. Which ensures that the
|
||||
PCI driver core will initialize the of_node field
|
||||
before starting the scan.
|
||||
|
||||
Also remove the local assignment of bus->dev.of_node,
|
||||
it is not needed after the patch.
|
||||
|
||||
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
---
|
||||
arch/mips/pci/pci.c | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/mips/pci/pci.c
|
||||
+++ b/arch/mips/pci/pci.c
|
||||
@@ -115,7 +115,6 @@ static void pcibios_scanbus(struct pci_c
|
||||
pci_bus_assign_resources(bus);
|
||||
pci_enable_bridges(bus);
|
||||
}
|
||||
- bus->dev.of_node = hose->of_node;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,6 +168,13 @@ void pci_load_of_ranges(struct pci_contr
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus)
|
||||
+{
|
||||
+ struct pci_controller *hose = bus->sysdata;
|
||||
+
|
||||
+ return of_node_get(hose->of_node);
|
||||
+}
|
||||
#endif
|
||||
|
||||
static DEFINE_MUTEX(pci_scan_mutex);
|
Loading…
Reference in a new issue