diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2014-10-01 13:37:36 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2014-10-01 13:37:36 +0000 |
commit | 6eaf246e8fa03c956635042d9cb86b4437b0cfdc (patch) | |
tree | 8ed40673e0a1f3c2b0471df090d4c920f9d3f93c /target/linux/bcm53xx | |
parent | 3da328a3c41e48053ea9330c318c2daa86ec1749 (diff) | |
download | master-187ad058-6eaf246e8fa03c956635042d9cb86b4437b0cfdc.tar.gz master-187ad058-6eaf246e8fa03c956635042d9cb86b4437b0cfdc.tar.bz2 master-187ad058-6eaf246e8fa03c956635042d9cb86b4437b0cfdc.zip |
kernel: update bcma to the tag master-2014-09-30 (wireless-next)
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@42710 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/bcm53xx')
3 files changed, 11 insertions, 279 deletions
diff --git a/target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch b/target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch deleted file mode 100644 index 0af4bf66aa..0000000000 --- a/target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch +++ /dev/null @@ -1,219 +0,0 @@ -From ef8bdd6f383d3b43a96cdaa990b5412e40dbf238 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Mon, 6 Jan 2014 23:29:15 +0100 -Subject: [PATCH v3 1/2] bcma: register bcma as device tree driver - -This driver is used by the bcm53xx ARM SoC code. Now it is possible to -give the address of the chipcommon core in device tree and bcma will -search for all the other cores. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ---- - Documentation/devicetree/bindings/bus/bcma.txt | 39 ++++++++++++ - drivers/bcma/bcma_private.h | 14 +++++ - drivers/bcma/host_soc.c | 82 ++++++++++++++++++++++++++ - drivers/bcma/main.c | 6 ++ - include/linux/bcma/bcma.h | 2 + - 5 files changed, 143 insertions(+) - create mode 100644 Documentation/devicetree/bindings/bus/bcma.txt - ---- /dev/null -+++ b/Documentation/devicetree/bindings/bus/bcma.txt -@@ -0,0 +1,39 @@ -+Driver for ARM AXI Bus with Broadcom Plugins (bcma) -+ -+Required properties: -+ -+- compatible : brcm,bus-axi -+ -+- reg : iomem address range of chipcommon core -+ -+The cores on the AXI bus are automatically detected by bcma with the -+memory ranges they are using and they get registered afterwards. -+Automatic detection of the IRQ number is not reliable on -+BCM47xx/BCM53xx ARM SoCs. To assign IRQ numbers to the cores, provide -+them manually through device tree. The IRQ number and the device tree -+child entry will get assigned to the core with the matching reg address. -+ -+Example: -+ -+ axi@18000000 { -+ compatible = "brcm,bus-axi"; -+ reg = <0x18000000 0x1000>; -+ ranges = <0x00000000 0x18000000 0x00100000>; -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ pcie@12000 { -+ reg = <0x00012000 0x1000>; -+ interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>; -+ }; -+ -+ ethernet@24000 { -+ reg = <0x00024000 0x1000>; -+ interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>; -+ }; -+ -+ ethernet@25000 { -+ reg = <0x00025000 0x1000>; -+ interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>; -+ }; -+ }; ---- a/drivers/bcma/bcma_private.h -+++ b/drivers/bcma/bcma_private.h -@@ -88,6 +88,20 @@ extern int __init bcma_host_pci_init(voi - extern void __exit bcma_host_pci_exit(void); - #endif /* CONFIG_BCMA_HOST_PCI */ - -+/* host_soc.c */ -+#if defined(CONFIG_BCMA_HOST_SOC) && defined(CONFIG_OF) -+extern int __init bcma_host_soc_register_driver(void); -+extern void __exit bcma_host_soc_unregister_driver(void); -+#else -+static inline int __init bcma_host_soc_register_driver(void) -+{ -+ return 0; -+} -+static inline void __exit bcma_host_soc_unregister_driver(void) -+{ -+} -+#endif /* CONFIG_BCMA_HOST_SOC && CONFIG_OF */ -+ - /* driver_pci.c */ - u32 bcma_pcie_read(struct bcma_drv_pci *pc, u32 address); - ---- a/drivers/bcma/host_soc.c -+++ b/drivers/bcma/host_soc.c -@@ -7,6 +7,9 @@ - - #include "bcma_private.h" - #include "scan.h" -+#include <linux/slab.h> -+#include <linux/module.h> -+#include <linux/of_address.h> - #include <linux/bcma/bcma.h> - #include <linux/bcma/bcma_soc.h> - -@@ -176,6 +179,7 @@ int __init bcma_host_soc_register(struct - /* Host specific */ - bus->hosttype = BCMA_HOSTTYPE_SOC; - bus->ops = &bcma_host_soc_ops; -+ bus->host_pdev = NULL; - - /* Initialize struct, detect chip */ - bcma_init_bus(bus); -@@ -195,3 +199,81 @@ int __init bcma_host_soc_init(struct bcm - - return err; - } -+ -+#ifdef CONFIG_OF -+static int bcma_host_soc_probe(struct platform_device *pdev) -+{ -+ struct device *dev = &pdev->dev; -+ struct device_node *np = dev->of_node; -+ struct bcma_bus *bus; -+ int err; -+ -+ /* Alloc */ -+ bus = devm_kzalloc(dev, sizeof(*bus), GFP_KERNEL); -+ if (!bus) -+ return -ENOMEM; -+ -+ /* Map MMIO */ -+ bus->mmio = of_iomap(np, 0); -+ if (!bus->mmio) -+ return -ENOMEM; -+ -+ /* Host specific */ -+ bus->hosttype = BCMA_HOSTTYPE_SOC; -+ bus->ops = &bcma_host_soc_ops; -+ bus->host_pdev = pdev; -+ -+ /* Initialize struct, detect chip */ -+ bcma_init_bus(bus); -+ -+ /* Register */ -+ err = bcma_bus_register(bus); -+ if (err) -+ goto err_unmap_mmio; -+ -+ platform_set_drvdata(pdev, bus); -+ -+ return err; -+ -+err_unmap_mmio: -+ iounmap(bus->mmio); -+ return err; -+} -+ -+static int bcma_host_soc_remove(struct platform_device *pdev) -+{ -+ struct bcma_bus *bus = platform_get_drvdata(pdev); -+ -+ bcma_bus_unregister(bus); -+ iounmap(bus->mmio); -+ platform_set_drvdata(pdev, NULL); -+ -+ return 0; -+} -+ -+static const struct of_device_id bcma_host_soc_of_match[] = { -+ { .compatible = "brcm,bus-axi", }, -+ {}, -+}; -+MODULE_DEVICE_TABLE(of, bcma_host_soc_of_match); -+ -+static struct platform_driver bcma_host_soc_driver = { -+ .driver = { -+ .name = "bcma-host-soc", -+ .owner = THIS_MODULE, -+ .of_match_table = bcma_host_soc_of_match, -+ }, -+ .probe = bcma_host_soc_probe, -+ .remove = bcma_host_soc_remove, -+}; -+ -+int __init bcma_host_soc_register_driver(void) -+{ -+ return platform_driver_register(&bcma_host_soc_driver); -+} -+ -+void __exit bcma_host_soc_unregister_driver(void) -+{ -+ platform_driver_unregister(&bcma_host_soc_driver); -+} -+#endif /* CONFIG_OF */ ---- a/drivers/bcma/main.c -+++ b/drivers/bcma/main.c -@@ -528,6 +528,11 @@ static int __init bcma_modinit(void) - if (err) - return err; - -+ err = bcma_host_soc_register_driver(); -+ if (err) { -+ pr_err("SoC host initialization failed\n"); -+ err = 0; -+ } - #ifdef CONFIG_BCMA_HOST_PCI - err = bcma_host_pci_init(); - if (err) { -@@ -545,6 +550,7 @@ static void __exit bcma_modexit(void) - #ifdef CONFIG_BCMA_HOST_PCI - bcma_host_pci_exit(); - #endif -+ bcma_host_soc_unregister_driver(); - bus_unregister(&bcma_bus_type); - } - module_exit(bcma_modexit) ---- a/include/linux/bcma/bcma.h -+++ b/include/linux/bcma/bcma.h -@@ -323,6 +323,8 @@ struct bcma_bus { - struct pci_dev *host_pci; - /* Pointer to the SDIO device (only for BCMA_HOSTTYPE_SDIO) */ - struct sdio_func *host_sdio; -+ /* Pointer to platform device (only for BCMA_HOSTTYPE_SOC) */ -+ struct platform_device *host_pdev; - }; - - struct bcma_chipinfo chipinfo; diff --git a/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch b/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch index 53e4d91fa6..e38b5bc1c6 100644 --- a/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch +++ b/target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch @@ -15,73 +15,24 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- a/drivers/bcma/main.c +++ b/drivers/bcma/main.c -@@ -10,6 +10,8 @@ +@@ -10,6 +10,7 @@ #include <linux/platform_device.h> #include <linux/bcma/bcma.h> #include <linux/slab.h> +#include <linux/of_irq.h> -+#include <linux/of_address.h> + #include <linux/of_address.h> MODULE_DESCRIPTION("Broadcom's specific AMBA driver"); - MODULE_LICENSE("GPL"); -@@ -131,6 +133,45 @@ static bool bcma_is_core_needed_early(u1 - return false; - } +@@ -159,8 +160,10 @@ static void bcma_of_fill_device(struct p + struct device_node *node; -+#ifdef CONFIG_OF -+static struct device_node *bcma_of_find_child_device(struct platform_device *parent, -+ struct bcma_device *core) -+{ -+ struct device_node *node; -+ u64 size; -+ const __be32 *reg; -+ -+ if (!parent || !parent->dev.of_node) -+ return NULL; -+ -+ for_each_child_of_node(parent->dev.of_node, node) { -+ reg = of_get_address(node, 0, &size, NULL); -+ if (!reg) -+ continue; -+ if (of_translate_address(node, reg) == core->addr) -+ return node; -+ } -+ return NULL; -+} -+ -+static void bcma_of_fill_device(struct platform_device *parent, -+ struct bcma_device *core) -+{ -+ struct device_node *node; -+ -+ node = bcma_of_find_child_device(parent, core); + node = bcma_of_find_child_device(parent, core); +- if (node) +- core->dev.of_node = node; + if (!node) + return; + core->dev.of_node = node; + core->irq = irq_of_parse_and_map(node, 0); -+} -+#else -+static void bcma_of_fill_device(struct platform_device *parent, -+ struct bcma_device *core) -+{ -+} -+#endif /* CONFIG_OF */ -+ - static void bcma_register_core(struct bcma_bus *bus, struct bcma_device *core) - { - int err; -@@ -147,7 +188,13 @@ static void bcma_register_core(struct bc - break; - case BCMA_HOSTTYPE_SOC: - core->dev.dma_mask = &core->dev.coherent_dma_mask; -- core->dma_dev = &core->dev; -+ if (bus->host_pdev) { -+ core->dma_dev = &bus->host_pdev->dev; -+ core->dev.parent = &bus->host_pdev->dev; -+ bcma_of_fill_device(bus->host_pdev, core); -+ } else { -+ core->dma_dev = &core->dev; -+ } - break; - case BCMA_HOSTTYPE_SDIO: - break; + } + #else + static void bcma_of_fill_device(struct platform_device *parent, diff --git a/target/linux/bcm53xx/patches-3.14/170-pcie2-bcma-add-new-PCIe2-driver-for-bcma.patch b/target/linux/bcm53xx/patches-3.14/170-pcie2-bcma-add-new-PCIe2-driver-for-bcma.patch index 2cdfebf983..11d4148ccd 100644 --- a/target/linux/bcm53xx/patches-3.14/170-pcie2-bcma-add-new-PCIe2-driver-for-bcma.patch +++ b/target/linux/bcm53xx/patches-3.14/170-pcie2-bcma-add-new-PCIe2-driver-for-bcma.patch @@ -17,7 +17,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- a/arch/arm/mach-bcm/Kconfig +++ b/arch/arm/mach-bcm/Kconfig -@@ -45,6 +45,7 @@ config ARCH_BCM_5301X +@@ -46,6 +46,7 @@ config ARCH_BCM_5301X select ARM_GLOBAL_TIMER select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK select MIGHT_HAVE_PCI |