mirror of
https://github.com/openwrt/openwrt.git
synced 2025-02-04 10:10:47 +00:00
bcm53xx: update patches adding bcma support
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 42640
This commit is contained in:
parent
c977fad4fd
commit
2c6e0e0ae0
@ -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>;
|
||||
+ 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>;
|
||||
+ };
|
||||
+
|
||||
+ gmac@1 {
|
||||
+ reg = <0x18025000 0x1000>;
|
||||
+ ethernet@25000 {
|
||||
+ reg = <0x00025000 0x1000>;
|
||||
+ interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ pcie@0 {
|
||||
+ reg = <0x18012000 0x1000>;
|
||||
+ interrupts = <GIC_SPI 131 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 {
|
||||
|
@ -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 | 42 +++++++++++++++++++++++++++++++++++++++++-
|
||||
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;
|
||||
|
@ -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>;
|
||||
+ };
|
||||
+ };
|
||||
};
|
||||
|
@ -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;
|
||||
+
|
||||
|
Loading…
x
Reference in New Issue
Block a user