From cdc7ea333719e9896da1440f6bf0f0178023797e Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Thu, 29 May 2014 19:25:40 +0000 Subject: bcm53xx: add support for the PCIe controller This patch adds support for the PCIe controller In addition to the PCIe controller a sprom is now provided by a device tree driver to bcma from some nvram. Signed-off-by: Hauke Mehrtens SVN-Revision: 40880 --- ...-bcma-register-bcma-as-device-tree-driver.patch | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch (limited to 'target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch') 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 new file mode 100644 index 0000000000..d885c5c4e8 --- /dev/null +++ b/target/linux/bcm53xx/patches-3.14/120-bcma-register-bcma-as-device-tree-driver.patch @@ -0,0 +1,115 @@ +From bb5d497aeceb8d9f36a1d990538389b54748dfcd Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens +Date: Mon, 6 Jan 2014 23:29:15 +0100 +Subject: [PATCH 05/15] 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. + +Signed-off-by: Hauke Mehrtens +--- + drivers/bcma/host_soc.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++ + include/linux/bcma/bcma.h | 2 ++ + 2 files changed, 72 insertions(+) + +--- a/drivers/bcma/host_soc.c ++++ b/drivers/bcma/host_soc.c +@@ -7,6 +7,9 @@ + + #include "bcma_private.h" + #include "scan.h" ++#include ++#include ++#include + #include + #include + +@@ -173,6 +176,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; + + /* Register */ + err = bcma_bus_early_register(bus, &soc->core_cc, &soc->core_mips); +@@ -181,3 +185,69 @@ int __init bcma_host_soc_register(struct + + 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; ++ ++ /* 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-aix", }, ++ {}, ++}; ++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, ++}; ++module_platform_driver(bcma_host_soc_driver); ++#endif /* CONFIG_OF */ +--- a/include/linux/bcma/bcma.h ++++ b/include/linux/bcma/bcma.h +@@ -319,6 +319,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; -- cgit v1.2.3