bcm53xx: update patches adding bcma support
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 21 Sep 2014 21:57:17 +0000 (21:57 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 21 Sep 2014 21:57:17 +0000 (21:57 +0000)
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
SVN-Revision: 42640

target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch
target/linux/bcm53xx/patches-3.14/121-bcma-get-irqs-from-dt.patch
target/linux/bcm53xx/patches-3.14/130-ARM-BCM5301X-register-bcma-bus.patch
target/linux/bcm53xx/patches-3.14/131-ARM-BCM5301X-add-restart-support.patch

index 9027f48678e339fb0a14c9bacca4a5ad8f0d8b19..0af4bf66aa748022fda6a8b4880a406cde68ce82 100644 (file)
@@ -1,7 +1,7 @@
-From 04b91da96d7c163fd39c0849d2034e2928103f4d Mon Sep 17 00:00:00 2001
+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 04/17] bcma: register bcma as device tree driver
+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
@@ -9,61 +9,79 @@ search for all the other cores.
 
 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 ---
- Documentation/devicetree/bindings/bus/bcma.txt | 46 +++++++++++++++++
- drivers/bcma/host_soc.c                        | 70 ++++++++++++++++++++++++++
+ 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 +
3 files changed, 118 insertions(+)
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,46 @@
-+Broadcom AIX bcma bus driver
-+
+@@ -0,0 +1,39 @@
++Driver for ARM AXI Bus with Broadcom Plugins (bcma)
 +
 +Required properties:
 +
-+- compatible : brcm,bus-aix
++- compatible : brcm,bus-axi
 +
 +- reg : iomem address range of chipcommon core
 +
-+Optional properties:
-+
-+- sprom: reference to a sprom driver. This is needed for sprom less devices.
-+       Use bcm47xx_sprom for example.
-+
-+
-+The cores on the AIX bus are auto detected by bcma. Detection of the
-+IRQ number is not supported on BCM47xx/BCM53xx ARM SoCs, so it is
-+possible to provide the IRQ number over device tree. The IRQ number and
-+the device tree child entry will be added to the core with the matching
-+reg address.
++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:
 +
-+      aix@18000000 {
-+              compatible = "brcm,bus-aix";
++      axi@18000000 {
++              compatible = "brcm,bus-axi";
 +              reg = <0x18000000 0x1000>;
 +              ranges = <0x00000000 0x18000000 0x00100000>;
 +              #address-cells = <1>;
 +              #size-cells = <1>;
-+              sprom = <&sprom0>;
 +
-+              gmac@0 {
-+                      reg = <0x18024000 0x1000>;
-+                      interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
++              pcie@12000 {
++                      reg = <0x00012000 0x1000>;
++                      interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              gmac@1 {
-+                      reg = <0x18025000 0x1000>;
-+                      interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
++              ethernet@24000 {
++                      reg = <0x00024000 0x1000>;
++                      interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              pcie@0 {
-+                      reg = <0x18012000 0x1000>;
-+                      interrupts = <GIC_SPI 131 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 @@
@@ -84,7 +102,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
  
        /* Initialize struct, detect chip */
        bcma_init_bus(bus);
-@@ -195,3 +199,72 @@ int __init bcma_host_soc_init(struct bcm
+@@ -195,3 +199,81 @@ int __init bcma_host_soc_init(struct bcm
  
        return err;
  }
@@ -141,7 +159,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 +}
 +
 +static const struct of_device_id bcma_host_soc_of_match[] = {
-+      { .compatible = "brcm,bus-aix", },
++      { .compatible = "brcm,bus-axi", },
 +      {},
 +};
 +MODULE_DEVICE_TABLE(of, bcma_host_soc_of_match);
@@ -155,8 +173,39 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 +      .probe          = bcma_host_soc_probe,
 +      .remove         = bcma_host_soc_remove,
 +};
-+module_platform_driver(bcma_host_soc_driver);
++
++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 {
index 02cf1ea9b561742c0ead4aaa469c1224153091e9..53e4d91fa6a21bf3ecd7e4f2b45a8d4a0f2d1c81 100644 (file)
@@ -1,7 +1,7 @@
-From eaf1943a2c49cbc6eb0ffafa7b6ced45f2d328da Mon Sep 17 00:00:00 2001
+From 6611afa6c49434780096cdf2c1028f0ac277f9bc Mon Sep 17 00:00:00 2001
 From: Hauke Mehrtens <hauke@hauke-m.de>
 Date: Thu, 9 Jan 2014 19:40:14 +0100
-Subject: [PATCH 05/17] bcma: get IRQ numbers from dt
+Subject: [PATCH v3 2/2] bcma: get IRQ numbers from dt
 
 It is not possible to auto detect the irq numbers used by the cores on
 an arm SoC. If bcma was registered with device tree it will search for
@@ -10,9 +10,9 @@ configuration.
 
 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 ---
- drivers/bcma/main.c | 4+++++++++++++++++++++++++++++++++++++++++-
- 1 file changed, 41 insertions(+), 1 deletion(-)
-
+ drivers/bcma/main.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 48 insertions(+), 1 deletion(-)
 --- a/drivers/bcma/main.c
 +++ b/drivers/bcma/main.c
 @@ -10,6 +10,8 @@
@@ -24,10 +24,11 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
  
  MODULE_DESCRIPTION("Broadcom's specific AMBA driver");
  MODULE_LICENSE("GPL");
-@@ -131,6 +133,38 @@ static bool bcma_is_core_needed_early(u1
+@@ -131,6 +133,45 @@ static bool bcma_is_core_needed_early(u1
        return false;
  }
  
++#ifdef CONFIG_OF
 +static struct device_node *bcma_of_find_child_device(struct platform_device *parent,
 +                                                   struct bcma_device *core)
 +{
@@ -42,7 +43,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 +              reg = of_get_address(node, 0, &size, NULL);
 +              if (!reg)
 +                      continue;
-+              if (be32_to_cpup(reg) == core->addr)
++              if (of_translate_address(node, reg) == core->addr)
 +                      return node;
 +      }
 +      return NULL;
@@ -59,11 +60,17 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
 +      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 +181,13 @@ static void bcma_register_core(struct bc
+@@ -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;
index 3b8c7f460d3a9038b8fcb451467160336fb452a8..0e576c68f27c23eb4709ecc73bcf8b91a1fc98c8 100644 (file)
@@ -7,13 +7,14 @@ Subject: [PATCH 07/17] ARM: BCM5301X: register bcma bus
  arch/arm/boot/dts/bcm4708.dtsi | 58 ++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 58 insertions(+)
 
---- a/arch/arm/boot/dts/bcm4708.dtsi
-+++ b/arch/arm/boot/dts/bcm4708.dtsi
-@@ -31,4 +31,62 @@
+--- a/arch/arm/boot/dts/bcm5301x.dtsi
++++ b/arch/arm/boot/dts/bcm5301x.dtsi
+@@ -92,4 +92,100 @@
+                       clock-frequency = <400000000>;
                };
        };
-+      nvram0: nvram@0 {
++
++      nvram0: nvram@1c000000 {
 +              compatible = "brcm,bcm47xx-nvram";
 +              reg = <0x1c000000 0x01000000>;
 +      };
@@ -23,52 +24,89 @@ Subject: [PATCH 07/17] ARM: BCM5301X: register bcma bus
 +              nvram = <&nvram0>;
 +      };
 +
-+      aix@18000000 {
-+              compatible = "brcm,bus-aix";
++      axi@18000000 {
++              compatible = "brcm,bus-axi";
 +              reg = <0x18000000 0x1000>;
 +              ranges = <0x00000000 0x18000000 0x00100000>;
 +              #address-cells = <1>;
 +              #size-cells = <1>;
 +              sprom = <&sprom0>;
 +
-+              usb2@0 {
-+                      reg = <0x18021000 0x1000>;
++              chipcommon@0 {
++                      reg = <0x00000000 0x1000>;
++                      interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
++              };
++
++              pcie@12000 {
++                      reg = <0x00012000 0x1000>;
++                      interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 127 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 130 IRQ_TYPE_LEVEL_HIGH>;
++              };
++
++              pcie@13000 {
++                      reg = <0x00013000 0x1000>;
++                      interrupts = <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>;
++              };
++
++              pcie@14000 {
++                      reg = <0x00014000 0x1000>;
++                      interrupts = <GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 142 IRQ_TYPE_LEVEL_HIGH>;
++              };
++
++              usb2@21000 {
++                      reg = <0x00021000 0x1000>;
 +                      interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              usb3@0 {
-+                      reg = <0x18023000 0x1000>;
++              usb3@23000 {
++                      reg = <0x00023000 0x1000>;
 +                      interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              gmac@0 {
-+                      reg = <0x18024000 0x1000>;
++              ethernet@24000 {
++                      reg = <0x00024000 0x1000>;
 +                      interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              gmac@1 {
-+                      reg = <0x18025000 0x1000>;
++              ethernet@25000 {
++                      reg = <0x00025000 0x1000>;
 +                      interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              gmac@2 {
-+                      reg = <0x18026000 0x1000>;
++              ethernet@26000 {
++                      reg = <0x00026000 0x1000>;
 +                      interrupts = <GIC_SPI 149 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              gmac@3 {
-+                      reg = <0x18027000 0x1000>;
++              ethernet@27000 {
++                      reg = <0x00027000 0x1000>;
 +                      interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +
-+              pcie@0 {
-+                      reg = <0x18012000 0x1000>;
-+                      interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>;
-+              };
-+
-+              pcie@1 {
-+                      reg = <0x18013000 0x1000>;
-+                      interrupts = <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>;
++              nand@28000 {
++                      reg = <0x00028000 0x1000>;
++                      interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
++                                   <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
 +              };
 +      };
  };
index 46464dc04261af690b804add6e386c86a86cdf0d..792d4b93eaf1a04c17d87845a30c84c7eab81cb9 100644 (file)
@@ -26,7 +26,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
 +      struct device_node *np;
 +      struct platform_device *pdev;
 +
-+      np = of_find_compatible_node(NULL, NULL, "brcm,bus-aix");
++      np = of_find_compatible_node(NULL, NULL, "brcm,bus-axi");
 +      if (!np)
 +              return NULL;
 +