summaryrefslogtreecommitdiff
path: root/target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch
diff options
context:
space:
mode:
authorLuka Perkov <luka@openwrt.org>2014-02-11 02:07:41 +0000
committerLuka Perkov <luka@openwrt.org>2014-02-11 02:07:41 +0000
commit3af779eb172b0438f77e8a01a97dd0eb9a146076 (patch)
tree23838dbde109e79f4c4763dbf78a983aeeefafe1 /target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch
parent69d323f23119ce6986c2803f34d95869144a00e6 (diff)
downloadmtk-20170518-3af779eb172b0438f77e8a01a97dd0eb9a146076.zip
mtk-20170518-3af779eb172b0438f77e8a01a97dd0eb9a146076.tar.gz
mtk-20170518-3af779eb172b0438f77e8a01a97dd0eb9a146076.tar.bz2
mvebu: backport mainline patches from kernel 3.12
This is a backport of the patches accepted to the Linux mainline related to mvebu SoC (Armada XP and Armada 370) between Linux v3.11, and Linux v3.12. This work mainly covers: * Ground work for sharing the pxa nand driver(drivers/mtd/nand/pxa3xx_nand.c) between the PXA family,and the Armada family. * Further updates to the mvebu MBus. * Work and ground work for enabling MSI on the Armada family. * some phy / mdio bus initialization related work. * Device tree binding documentation update. Signed-off-by: Seif Mazareeb <seif.mazareeb@gmail.com> CC: Luka Perkov <luka@openwrt.org> SVN-Revision: 39565
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch')
-rw-r--r--target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch80
1 files changed, 80 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch b/target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch
new file mode 100644
index 0000000..adae314
--- /dev/null
+++ b/target/linux/mvebu/patches-3.10/0076-ARM-pci-add-add_bus-and-remove_bus-hooks-to-hw_pci.patch
@@ -0,0 +1,80 @@
+From ea6a42a34462ea382209ff4f083b8b17260eb409 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Wed, 19 Jun 2013 18:27:20 +0200
+Subject: [PATCH 076/203] ARM: pci: add ->add_bus() and ->remove_bus() hooks to
+ hw_pci
+
+Some PCI drivers may need to adjust the pci_bus structure after it has
+been allocated by the Linux PCI core. The PCI core allows
+architectures to implement the pcibios_add_bus() and
+pcibios_remove_bus() for this purpose. This commit therefore extends
+the hw_pci and pci_sys_data structures of the ARM PCI core to allow
+PCI drivers to register ->add_bus() and ->remove_bus() in hw_pci,
+which will get called when a bus is added or removed from the system.
+
+This will be used for example by the Marvell PCIe driver to connect a
+particular PCI bus with its corresponding MSI chip to handle Message
+Signaled Interrupts.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Reviewed-by: Thierry Reding <thierry.reding@gmail.com>
+Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Tested-by: Daniel Price <daniel.price@gmail.com>
+Tested-by: Thierry Reding <thierry.reding@gmail.com>
+---
+ arch/arm/include/asm/mach/pci.h | 4 ++++
+ arch/arm/kernel/bios32.c | 16 ++++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+--- a/arch/arm/include/asm/mach/pci.h
++++ b/arch/arm/include/asm/mach/pci.h
+@@ -35,6 +35,8 @@ struct hw_pci {
+ resource_size_t start,
+ resource_size_t size,
+ resource_size_t align);
++ void (*add_bus)(struct pci_bus *bus);
++ void (*remove_bus)(struct pci_bus *bus);
+ };
+
+ /*
+@@ -62,6 +64,8 @@ struct pci_sys_data {
+ resource_size_t start,
+ resource_size_t size,
+ resource_size_t align);
++ void (*add_bus)(struct pci_bus *bus);
++ void (*remove_bus)(struct pci_bus *bus);
+ void *private_data; /* platform controller private data */
+ };
+
+--- a/arch/arm/kernel/bios32.c
++++ b/arch/arm/kernel/bios32.c
+@@ -363,6 +363,20 @@ void pcibios_fixup_bus(struct pci_bus *b
+ }
+ EXPORT_SYMBOL(pcibios_fixup_bus);
+
++void pcibios_add_bus(struct pci_bus *bus)
++{
++ struct pci_sys_data *sys = bus->sysdata;
++ if (sys->add_bus)
++ sys->add_bus(bus);
++}
++
++void pcibios_remove_bus(struct pci_bus *bus)
++{
++ struct pci_sys_data *sys = bus->sysdata;
++ if (sys->remove_bus)
++ sys->remove_bus(bus);
++}
++
+ /*
+ * Swizzle the device pin each time we cross a bridge. If a platform does
+ * not provide a swizzle function, we perform the standard PCI swizzling.
+@@ -463,6 +477,8 @@ static void pcibios_init_hw(struct hw_pc
+ sys->swizzle = hw->swizzle;
+ sys->map_irq = hw->map_irq;
+ sys->align_resource = hw->align_resource;
++ sys->add_bus = hw->add_bus;
++ sys->remove_bus = hw->remove_bus;
+ INIT_LIST_HEAD(&sys->resources);
+
+ if (hw->private_data)