kirkwood: add a diag script
[openwrt.git] / target / linux / bcm53xx / patches-3.14 / 121-bcma-get-irqs-from-dt.patch
index 53e4d91..e38b5bc 100644 (file)
@@ -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,