Message ID | 1396882664-19297-2-git-send-email-thomas.petazzoni@free-electrons.com |
---|---|
State | Not Applicable |
Delegated to: | David Miller |
Headers | show |
On Mon, Apr 07, 2014 at 04:57:41PM +0200, Thomas Petazzoni wrote: > The Marvell Armada 380 SoC includes two AHCI compatible > interfaces. However, like all DMA-capable Marvell interface, they > require special handling to configure MBus windows. Therefore, this > commit adds a new ahci_mvebu driver, which relies on the > libahci_platform.c code recently introduced. > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > --- > .../devicetree/bindings/ata/ahci-platform.txt | 3 +- > drivers/ata/Kconfig | 9 ++ > drivers/ata/Makefile | 1 + > drivers/ata/ahci_mvebu.c | 105 +++++++++++++++++++++ > 4 files changed, 117 insertions(+), 1 deletion(-) > create mode 100644 drivers/ata/ahci_mvebu.c > > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt > index 48b285f..271746d 100644 > --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt > @@ -7,7 +7,8 @@ Required properties: > - compatible : compatible list, one of "snps,spear-ahci", > "snps,exynos5440-ahci", "ibm,476gtr-ahci", > "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" > - "fsl,imx6q-ahci" or "snps,dwc-ahci" > + "fsl,imx6q-ahci", "snps,dwc-ahci" or > + "marvell,armada-380-ahci" Hi Thomas Since this list is growing, maybe now would be a good time to sort it alphabetically? > - interrupts : <interrupt mapping for SATA IRQ> > - reg : <registers mapping> > > diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig > index 2e4da3b..cb987e9 100644 > --- a/drivers/ata/Kconfig > +++ b/drivers/ata/Kconfig > @@ -123,6 +123,15 @@ config AHCI_IMX > > If unsure, say N. > > +config AHCI_MVEBU > + tristate "Marvell EBU AHCI SATA support" > + depends on ARCH_MVEBU > + help > + This option enables support for the Marvebu EBU SoC's > + onboard AHCI SATA. > + > + If unsure, say N. > + > config AHCI_SUNXI > tristate "Allwinner sunxi AHCI SATA support" > depends on ARCH_SUNXI > diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile > index 44c8016..5a02aee 100644 > --- a/drivers/ata/Makefile > +++ b/drivers/ata/Makefile > @@ -12,6 +12,7 @@ obj-$(CONFIG_SATA_DWC) += sata_dwc_460ex.o > obj-$(CONFIG_SATA_HIGHBANK) += sata_highbank.o libahci.o > obj-$(CONFIG_AHCI_DA850) += ahci_da850.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_IMX) += ahci_imx.o libahci.o libahci_platform.o > +obj-$(CONFIG_AHCI_MVEBU) += ahci_mvebu.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_SUNXI) += ahci_sunxi.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_ST) += ahci_st.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_XGENE) += ahci_xgene.o libahci.o libahci_platform.o > diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c > new file mode 100644 > index 0000000..ca90b18 > --- /dev/null > +++ b/drivers/ata/ahci_mvebu.c > @@ -0,0 +1,105 @@ > +/* > + * AHCI glue platform driver for Marvell EBU SOCs > + * > + * Copyright (C) 2014 Marvell > + * > + * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > + * Marcin Wojtas <mw@semihalf.com> > + * > + * This file is licensed under the terms of the GNU General Public > + * License version 2. This program is licensed "as is" without any > + * warranty of any kind, whether express or implied. > + */ > + > +#include <linux/ahci_platform.h> > +#include <linux/kernel.h> > +#include <linux/mbus.h> > +#include <linux/module.h> > +#include <linux/of_device.h> > +#include <linux/platform_device.h> > +#include "ahci.h" > + > +#define AHCI_WINDOW_CTRL(win) (0x60 + ((win) << 4)) > +#define AHCI_WINDOW_BASE(win) (0x64 + ((win) << 4)) > +#define AHCI_WINDOW_SIZE(win) (0x68 + ((win) << 4)) > + > +static void ahci_mvebu_mbus_config(struct ahci_host_priv *hpriv, > + const struct mbus_dram_target_info *dram) > +{ > + int i; > + > + for (i = 0; i < 4; i++) { > + writel(0, hpriv->mmio + AHCI_WINDOW_CTRL(i)); > + writel(0, hpriv->mmio + AHCI_WINDOW_BASE(i)); > + writel(0, hpriv->mmio + AHCI_WINDOW_SIZE(i)); > + } > + > + for (i = 0; i < dram->num_cs; i++) { > + const struct mbus_dram_window *cs = dram->cs + i; > + > + writel((cs->mbus_attr << 8) | > + (dram->mbus_dram_target_id << 4) | 1, > + hpriv->mmio + AHCI_WINDOW_CTRL(i)); > + writel(cs->base, hpriv->mmio + AHCI_WINDOW_BASE(i)); > + writel(((cs->size - 1) & 0xffff0000), > + hpriv->mmio + AHCI_WINDOW_SIZE(i)); > + } > +} > + > +static const struct ata_port_info ahci_mvebu_port_info = { > + .flags = AHCI_FLAG_COMMON, > + .pio_mask = ATA_PIO4, > + .udma_mask = ATA_UDMA6, > + .port_ops = &ahci_platform_ops, > +}; > + > +static int ahci_mvebu_probe(struct platform_device *pdev) > +{ > + struct ahci_host_priv *hpriv; > + const struct mbus_dram_target_info *dram; > + int rc; > + > + hpriv = ahci_platform_get_resources(pdev); > + if (IS_ERR(hpriv)) > + return PTR_ERR(hpriv); > + > + rc = ahci_platform_enable_resources(hpriv); > + if (rc) > + return rc; > + > + dram = mv_mbus_dram_info(); > + if (dram) > + ahci_mvebu_mbus_config(hpriv, dram); I know this is a common model for mv_sata, which has to deal with devices without dram, but can 38x also work without dram? Or should missing dram be considered fatal to the probe? > + > + rc = ahci_platform_init_host(pdev, hpriv, &ahci_mvebu_port_info, 0, 0); > + if (rc) > + goto disable_resources; > + > + return 0; > + > +disable_resources: > + ahci_platform_disable_resources(hpriv); > + return rc; > +} > + > +static const struct of_device_id ahci_mvebu_of_match[] = { > + { .compatible = "marvell,armada-380-ahci", }, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, ahci_mvebu_of_match); > + > +static struct platform_driver ahci_mvebu_driver = { > + .probe = ahci_mvebu_probe, > + .remove = ata_platform_remove_one, > + .driver = { > + .name = "ahci-mvebu", > + .owner = THIS_MODULE, > + .of_match_table = ahci_mvebu_of_match, > + }, > +}; > +module_platform_driver(ahci_mvebu_driver); > + > +MODULE_DESCRIPTION("Marvell EBU AHCI SATA driver"); > +MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>, Marcin Wojtas <mw@semihalf.com>"); > +MODULE_LICENSE("GPL"); > +MODULE_ALIAS("platform:ahci_mv"); > -- > 1.8.3.2 > -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Dear Andrew Lunn, On Mon, 7 Apr 2014 17:18:23 +0200, Andrew Lunn wrote: > > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt > > index 48b285f..271746d 100644 > > --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt > > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt > > @@ -7,7 +7,8 @@ Required properties: > > - compatible : compatible list, one of "snps,spear-ahci", > > "snps,exynos5440-ahci", "ibm,476gtr-ahci", > > "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" > > - "fsl,imx6q-ahci" or "snps,dwc-ahci" > > + "fsl,imx6q-ahci", "snps,dwc-ahci" or > > + "marvell,armada-380-ahci" > > Hi Thomas > > Since this list is growing, maybe now would be a good time to sort it > alphabetically? Ok. I guess this would have to be a separate patch, preliminary to the introduction of the ahci_mvebu driver. > > + dram = mv_mbus_dram_info(); > > + if (dram) > > + ahci_mvebu_mbus_config(hpriv, dram); > > I know this is a common model for mv_sata, which has to deal with > devices without dram, but can 38x also work without dram? Or should > missing dram be considered fatal to the probe? Indeed in the current situation, dram should never be NULL, so the code could even be: ahci_mvebu_mbus_config(hpriv, mv_mbus_dram_info()); Will fix for v2. Thomas
Hi, On Monday, April 07, 2014 04:57:41 PM Thomas Petazzoni wrote: > The Marvell Armada 380 SoC includes two AHCI compatible > interfaces. However, like all DMA-capable Marvell interface, they > require special handling to configure MBus windows. Therefore, this > commit adds a new ahci_mvebu driver, which relies on the > libahci_platform.c code recently introduced. > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > --- > .../devicetree/bindings/ata/ahci-platform.txt | 3 +- > drivers/ata/Kconfig | 9 ++ > drivers/ata/Makefile | 1 + > drivers/ata/ahci_mvebu.c | 105 +++++++++++++++++++++ > 4 files changed, 117 insertions(+), 1 deletion(-) > create mode 100644 drivers/ata/ahci_mvebu.c > > diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt > index 48b285f..271746d 100644 > --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt > +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt > @@ -7,7 +7,8 @@ Required properties: > - compatible : compatible list, one of "snps,spear-ahci", > "snps,exynos5440-ahci", "ibm,476gtr-ahci", > "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" > - "fsl,imx6q-ahci" or "snps,dwc-ahci" > + "fsl,imx6q-ahci", "snps,dwc-ahci" or > + "marvell,armada-380-ahci" > - interrupts : <interrupt mapping for SATA IRQ> > - reg : <registers mapping> > > diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig > index 2e4da3b..cb987e9 100644 > --- a/drivers/ata/Kconfig > +++ b/drivers/ata/Kconfig > @@ -123,6 +123,15 @@ config AHCI_IMX > > If unsure, say N. > > +config AHCI_MVEBU > + tristate "Marvell EBU AHCI SATA support" > + depends on ARCH_MVEBU > + help > + This option enables support for the Marvebu EBU SoC's > + onboard AHCI SATA. > + > + If unsure, say N. > + > config AHCI_SUNXI > tristate "Allwinner sunxi AHCI SATA support" > depends on ARCH_SUNXI > diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile > index 44c8016..5a02aee 100644 > --- a/drivers/ata/Makefile > +++ b/drivers/ata/Makefile > @@ -12,6 +12,7 @@ obj-$(CONFIG_SATA_DWC) += sata_dwc_460ex.o > obj-$(CONFIG_SATA_HIGHBANK) += sata_highbank.o libahci.o > obj-$(CONFIG_AHCI_DA850) += ahci_da850.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_IMX) += ahci_imx.o libahci.o libahci_platform.o > +obj-$(CONFIG_AHCI_MVEBU) += ahci_mvebu.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_SUNXI) += ahci_sunxi.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_ST) += ahci_st.o libahci.o libahci_platform.o > obj-$(CONFIG_AHCI_XGENE) += ahci_xgene.o libahci.o libahci_platform.o > diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c > new file mode 100644 > index 0000000..ca90b18 > --- /dev/null > +++ b/drivers/ata/ahci_mvebu.c > @@ -0,0 +1,105 @@ > +/* > + * AHCI glue platform driver for Marvell EBU SOCs > + * > + * Copyright (C) 2014 Marvell > + * > + * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > + * Marcin Wojtas <mw@semihalf.com> > + * > + * This file is licensed under the terms of the GNU General Public > + * License version 2. This program is licensed "as is" without any > + * warranty of any kind, whether express or implied. > + */ > + > +#include <linux/ahci_platform.h> > +#include <linux/kernel.h> > +#include <linux/mbus.h> > +#include <linux/module.h> > +#include <linux/of_device.h> > +#include <linux/platform_device.h> > +#include "ahci.h" > + > +#define AHCI_WINDOW_CTRL(win) (0x60 + ((win) << 4)) > +#define AHCI_WINDOW_BASE(win) (0x64 + ((win) << 4)) > +#define AHCI_WINDOW_SIZE(win) (0x68 + ((win) << 4)) > + > +static void ahci_mvebu_mbus_config(struct ahci_host_priv *hpriv, > + const struct mbus_dram_target_info *dram) > +{ > + int i; > + > + for (i = 0; i < 4; i++) { > + writel(0, hpriv->mmio + AHCI_WINDOW_CTRL(i)); > + writel(0, hpriv->mmio + AHCI_WINDOW_BASE(i)); > + writel(0, hpriv->mmio + AHCI_WINDOW_SIZE(i)); > + } > + > + for (i = 0; i < dram->num_cs; i++) { > + const struct mbus_dram_window *cs = dram->cs + i; > + > + writel((cs->mbus_attr << 8) | > + (dram->mbus_dram_target_id << 4) | 1, > + hpriv->mmio + AHCI_WINDOW_CTRL(i)); > + writel(cs->base, hpriv->mmio + AHCI_WINDOW_BASE(i)); > + writel(((cs->size - 1) & 0xffff0000), > + hpriv->mmio + AHCI_WINDOW_SIZE(i)); > + } > +} > + > +static const struct ata_port_info ahci_mvebu_port_info = { > + .flags = AHCI_FLAG_COMMON, > + .pio_mask = ATA_PIO4, > + .udma_mask = ATA_UDMA6, > + .port_ops = &ahci_platform_ops, > +}; > + > +static int ahci_mvebu_probe(struct platform_device *pdev) > +{ > + struct ahci_host_priv *hpriv; > + const struct mbus_dram_target_info *dram; > + int rc; > + > + hpriv = ahci_platform_get_resources(pdev); > + if (IS_ERR(hpriv)) > + return PTR_ERR(hpriv); > + > + rc = ahci_platform_enable_resources(hpriv); > + if (rc) > + return rc; > + > + dram = mv_mbus_dram_info(); > + if (dram) > + ahci_mvebu_mbus_config(hpriv, dram); > + > + rc = ahci_platform_init_host(pdev, hpriv, &ahci_mvebu_port_info, 0, 0); > + if (rc) > + goto disable_resources; > + > + return 0; > + > +disable_resources: > + ahci_platform_disable_resources(hpriv); > + return rc; > +} > + > +static const struct of_device_id ahci_mvebu_of_match[] = { > + { .compatible = "marvell,armada-380-ahci", }, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, ahci_mvebu_of_match); > + > +static struct platform_driver ahci_mvebu_driver = { > + .probe = ahci_mvebu_probe, > + .remove = ata_platform_remove_one, > + .driver = { > + .name = "ahci-mvebu", > + .owner = THIS_MODULE, > + .of_match_table = ahci_mvebu_of_match, Why is the Power Management support missing from this driver? > + }, > +}; > +module_platform_driver(ahci_mvebu_driver); > + > +MODULE_DESCRIPTION("Marvell EBU AHCI SATA driver"); > +MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>, Marcin Wojtas <mw@semihalf.com>"); > +MODULE_LICENSE("GPL"); > +MODULE_ALIAS("platform:ahci_mv"); platform:ahci_mvebu ? Otherwise it looks good. Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Dear Bartlomiej Zolnierkiewicz, On Mon, 07 Apr 2014 19:50:06 +0200, Bartlomiej Zolnierkiewicz wrote: > > +static struct platform_driver ahci_mvebu_driver = { > > + .probe = ahci_mvebu_probe, > > + .remove = ata_platform_remove_one, > > + .driver = { > > + .name = "ahci-mvebu", > > + .owner = THIS_MODULE, > > + .of_match_table = ahci_mvebu_of_match, > > Why is the Power Management support missing from this driver? Because as of today, the only platform that can use this driver is the Armada 38x, and we don't yet have suspend/resume support for this platform: we haven't written yet the suspend to RAM code for it. And I wanted to avoid adding suspend/resume code that I'm not able to test. So my plan is to get back to PM support once we have working suspend to RAM support on Armada 38x. > > +MODULE_DESCRIPTION("Marvell EBU AHCI SATA driver"); > > +MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>, Marcin Wojtas <mw@semihalf.com>"); > > +MODULE_LICENSE("GPL"); > > +MODULE_ALIAS("platform:ahci_mv"); > > platform:ahci_mvebu ? Indeed, thanks for spotting. > Otherwise it looks good. Thanks for the review! Thomas
diff --git a/Documentation/devicetree/bindings/ata/ahci-platform.txt b/Documentation/devicetree/bindings/ata/ahci-platform.txt index 48b285f..271746d 100644 --- a/Documentation/devicetree/bindings/ata/ahci-platform.txt +++ b/Documentation/devicetree/bindings/ata/ahci-platform.txt @@ -7,7 +7,8 @@ Required properties: - compatible : compatible list, one of "snps,spear-ahci", "snps,exynos5440-ahci", "ibm,476gtr-ahci", "allwinner,sun4i-a10-ahci", "fsl,imx53-ahci" - "fsl,imx6q-ahci" or "snps,dwc-ahci" + "fsl,imx6q-ahci", "snps,dwc-ahci" or + "marvell,armada-380-ahci" - interrupts : <interrupt mapping for SATA IRQ> - reg : <registers mapping> diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig index 2e4da3b..cb987e9 100644 --- a/drivers/ata/Kconfig +++ b/drivers/ata/Kconfig @@ -123,6 +123,15 @@ config AHCI_IMX If unsure, say N. +config AHCI_MVEBU + tristate "Marvell EBU AHCI SATA support" + depends on ARCH_MVEBU + help + This option enables support for the Marvebu EBU SoC's + onboard AHCI SATA. + + If unsure, say N. + config AHCI_SUNXI tristate "Allwinner sunxi AHCI SATA support" depends on ARCH_SUNXI diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile index 44c8016..5a02aee 100644 --- a/drivers/ata/Makefile +++ b/drivers/ata/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_SATA_DWC) += sata_dwc_460ex.o obj-$(CONFIG_SATA_HIGHBANK) += sata_highbank.o libahci.o obj-$(CONFIG_AHCI_DA850) += ahci_da850.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_IMX) += ahci_imx.o libahci.o libahci_platform.o +obj-$(CONFIG_AHCI_MVEBU) += ahci_mvebu.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_SUNXI) += ahci_sunxi.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_ST) += ahci_st.o libahci.o libahci_platform.o obj-$(CONFIG_AHCI_XGENE) += ahci_xgene.o libahci.o libahci_platform.o diff --git a/drivers/ata/ahci_mvebu.c b/drivers/ata/ahci_mvebu.c new file mode 100644 index 0000000..ca90b18 --- /dev/null +++ b/drivers/ata/ahci_mvebu.c @@ -0,0 +1,105 @@ +/* + * AHCI glue platform driver for Marvell EBU SOCs + * + * Copyright (C) 2014 Marvell + * + * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> + * Marcin Wojtas <mw@semihalf.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <linux/ahci_platform.h> +#include <linux/kernel.h> +#include <linux/mbus.h> +#include <linux/module.h> +#include <linux/of_device.h> +#include <linux/platform_device.h> +#include "ahci.h" + +#define AHCI_WINDOW_CTRL(win) (0x60 + ((win) << 4)) +#define AHCI_WINDOW_BASE(win) (0x64 + ((win) << 4)) +#define AHCI_WINDOW_SIZE(win) (0x68 + ((win) << 4)) + +static void ahci_mvebu_mbus_config(struct ahci_host_priv *hpriv, + const struct mbus_dram_target_info *dram) +{ + int i; + + for (i = 0; i < 4; i++) { + writel(0, hpriv->mmio + AHCI_WINDOW_CTRL(i)); + writel(0, hpriv->mmio + AHCI_WINDOW_BASE(i)); + writel(0, hpriv->mmio + AHCI_WINDOW_SIZE(i)); + } + + for (i = 0; i < dram->num_cs; i++) { + const struct mbus_dram_window *cs = dram->cs + i; + + writel((cs->mbus_attr << 8) | + (dram->mbus_dram_target_id << 4) | 1, + hpriv->mmio + AHCI_WINDOW_CTRL(i)); + writel(cs->base, hpriv->mmio + AHCI_WINDOW_BASE(i)); + writel(((cs->size - 1) & 0xffff0000), + hpriv->mmio + AHCI_WINDOW_SIZE(i)); + } +} + +static const struct ata_port_info ahci_mvebu_port_info = { + .flags = AHCI_FLAG_COMMON, + .pio_mask = ATA_PIO4, + .udma_mask = ATA_UDMA6, + .port_ops = &ahci_platform_ops, +}; + +static int ahci_mvebu_probe(struct platform_device *pdev) +{ + struct ahci_host_priv *hpriv; + const struct mbus_dram_target_info *dram; + int rc; + + hpriv = ahci_platform_get_resources(pdev); + if (IS_ERR(hpriv)) + return PTR_ERR(hpriv); + + rc = ahci_platform_enable_resources(hpriv); + if (rc) + return rc; + + dram = mv_mbus_dram_info(); + if (dram) + ahci_mvebu_mbus_config(hpriv, dram); + + rc = ahci_platform_init_host(pdev, hpriv, &ahci_mvebu_port_info, 0, 0); + if (rc) + goto disable_resources; + + return 0; + +disable_resources: + ahci_platform_disable_resources(hpriv); + return rc; +} + +static const struct of_device_id ahci_mvebu_of_match[] = { + { .compatible = "marvell,armada-380-ahci", }, + { }, +}; +MODULE_DEVICE_TABLE(of, ahci_mvebu_of_match); + +static struct platform_driver ahci_mvebu_driver = { + .probe = ahci_mvebu_probe, + .remove = ata_platform_remove_one, + .driver = { + .name = "ahci-mvebu", + .owner = THIS_MODULE, + .of_match_table = ahci_mvebu_of_match, + }, +}; +module_platform_driver(ahci_mvebu_driver); + +MODULE_DESCRIPTION("Marvell EBU AHCI SATA driver"); +MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>, Marcin Wojtas <mw@semihalf.com>"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:ahci_mv");
The Marvell Armada 380 SoC includes two AHCI compatible interfaces. However, like all DMA-capable Marvell interface, they require special handling to configure MBus windows. Therefore, this commit adds a new ahci_mvebu driver, which relies on the libahci_platform.c code recently introduced. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> --- .../devicetree/bindings/ata/ahci-platform.txt | 3 +- drivers/ata/Kconfig | 9 ++ drivers/ata/Makefile | 1 + drivers/ata/ahci_mvebu.c | 105 +++++++++++++++++++++ 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 drivers/ata/ahci_mvebu.c