diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2016-01-19 20:58:48 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2016-01-19 20:58:48 +0000 |
commit | 1dfa369c98075302400f46cd2b410d32a5ef68d6 (patch) | |
tree | 30bb288628a36c2469bfedec94161e0e63258b27 /target/linux/bcm53xx/patches-4.1/033-0001-PCI-iproc-enable-arm64-support-for-iProc-PCIe.patch | |
parent | 82939c3f52acd089370de17a4f8e07d453b0bf13 (diff) | |
download | mtk-20170518-1dfa369c98075302400f46cd2b410d32a5ef68d6.zip mtk-20170518-1dfa369c98075302400f46cd2b410d32a5ef68d6.tar.gz mtk-20170518-1dfa369c98075302400f46cd2b410d32a5ef68d6.tar.bz2 |
bcm53xx: group iProc patches into patchsets they were sent in
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
SVN-Revision: 48368
Diffstat (limited to 'target/linux/bcm53xx/patches-4.1/033-0001-PCI-iproc-enable-arm64-support-for-iProc-PCIe.patch')
-rw-r--r-- | target/linux/bcm53xx/patches-4.1/033-0001-PCI-iproc-enable-arm64-support-for-iProc-PCIe.patch | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/target/linux/bcm53xx/patches-4.1/033-0001-PCI-iproc-enable-arm64-support-for-iProc-PCIe.patch b/target/linux/bcm53xx/patches-4.1/033-0001-PCI-iproc-enable-arm64-support-for-iProc-PCIe.patch new file mode 100644 index 0000000..78160f0 --- /dev/null +++ b/target/linux/bcm53xx/patches-4.1/033-0001-PCI-iproc-enable-arm64-support-for-iProc-PCIe.patch @@ -0,0 +1,116 @@ +From db9d6d790968fd6df9faa7fa1f51967e05afd492 Mon Sep 17 00:00:00 2001 +From: Ray Jui <rjui@broadcom.com> +Date: Mon, 27 Jul 2015 15:42:18 -0700 +Subject: [PATCH 1/4] PCI: iproc: enable arm64 support for iProc PCIe + +PCI: iproc: Add arm64 support + +Add arm64 support to the iProc PCIe driver. + +Note that on arm32, bus->sysdata points to the arm32-specific +pci_sys_data struct, and pci_sys_data.private_data contains the +iproc_pcie pointer. For arm64, there's nothing corresponding to +pci_sys_data, so we keep the iproc_pcie pointer directly in +bus->sysdata. + +In addition, arm64 does IRQ mapping in pcibios_add_device(), so it +doesn't need pci_fixup_irqs() as arm32 does. + +Signed-off-by: Ray Jui <rjui@broadcom.com> +Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> +Reviewed-by: Scott Branden <sbranden@broadcom.com> +Acked-by: Bjorn Helgaas <bhelgaas@google.com> +Signed-off-by: Olof Johansson <olof@lixom.net> +--- + drivers/pci/host/pcie-iproc.c | 27 ++++++++++++++++++++------- + drivers/pci/host/pcie-iproc.h | 4 +++- + 2 files changed, 23 insertions(+), 8 deletions(-) + +--- a/drivers/pci/host/pcie-iproc.c ++++ b/drivers/pci/host/pcie-iproc.c +@@ -58,9 +58,17 @@ + #define SYS_RC_INTX_EN 0x330 + #define SYS_RC_INTX_MASK 0xf + +-static inline struct iproc_pcie *sys_to_pcie(struct pci_sys_data *sys) ++static inline struct iproc_pcie *iproc_data(struct pci_bus *bus) + { +- return sys->private_data; ++ struct iproc_pcie *pcie; ++#ifdef CONFIG_ARM ++ struct pci_sys_data *sys = bus->sysdata; ++ ++ pcie = sys->private_data; ++#else ++ pcie = bus->sysdata; ++#endif ++ return pcie; + } + + /** +@@ -71,8 +79,7 @@ static void __iomem *iproc_pcie_map_cfg_ + unsigned int devfn, + int where) + { +- struct pci_sys_data *sys = bus->sysdata; +- struct iproc_pcie *pcie = sys_to_pcie(sys); ++ struct iproc_pcie *pcie = iproc_data(bus); + unsigned slot = PCI_SLOT(devfn); + unsigned fn = PCI_FUNC(devfn); + unsigned busno = bus->number; +@@ -186,6 +193,7 @@ static void iproc_pcie_enable(struct ipr + int iproc_pcie_setup(struct iproc_pcie *pcie, struct list_head *res) + { + int ret; ++ void *sysdata; + struct pci_bus *bus; + + if (!pcie || !pcie->dev || !pcie->base) +@@ -205,10 +213,13 @@ int iproc_pcie_setup(struct iproc_pcie * + + iproc_pcie_reset(pcie); + ++#ifdef CONFIG_ARM + pcie->sysdata.private_data = pcie; +- +- bus = pci_create_root_bus(pcie->dev, 0, &iproc_pcie_ops, +- &pcie->sysdata, res); ++ sysdata = &pcie->sysdata; ++#else ++ sysdata = pcie; ++#endif ++ bus = pci_create_root_bus(pcie->dev, 0, &iproc_pcie_ops, sysdata, res); + if (!bus) { + dev_err(pcie->dev, "unable to create PCI root bus\n"); + ret = -ENOMEM; +@@ -226,7 +237,9 @@ int iproc_pcie_setup(struct iproc_pcie * + + pci_scan_child_bus(bus); + pci_assign_unassigned_bus_resources(bus); ++#ifdef CONFIG_ARM + pci_fixup_irqs(pci_common_swizzle, pcie->map_irq); ++#endif + pci_bus_add_devices(bus); + + return 0; +--- a/drivers/pci/host/pcie-iproc.h ++++ b/drivers/pci/host/pcie-iproc.h +@@ -21,7 +21,7 @@ + * @dev: pointer to device data structure + * @base: PCIe host controller I/O register base + * @resources: linked list of all PCI resources +- * @sysdata: Per PCI controller data ++ * @sysdata: Per PCI controller data (ARM-specific) + * @root_bus: pointer to root bus + * @phy: optional PHY device that controls the Serdes + * @irqs: interrupt IDs +@@ -29,7 +29,9 @@ + struct iproc_pcie { + struct device *dev; + void __iomem *base; ++#ifdef CONFIG_ARM + struct pci_sys_data sysdata; ++#endif + struct pci_bus *root_bus; + struct phy *phy; + int irqs[IPROC_PCIE_MAX_NUM_IRQS]; |