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:
		| @@ -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); | ||||
		Reference in New Issue
	
	Block a user
	 Gabor Juhos
					Gabor Juhos