All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] Support for Marvell AHCI interface on Armada 38x
@ 2014-04-07 14:57 ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth
  Cc: Ezequiel Garcia, Lior Amsalem, Tawfik Bayouk, linux-arm-kernel,
	linux-ide

Hello,

The Marvell Armada 38x ARM processors use an AHCI compatible interface
for SATA (in replacement of the Marvell-specific SATA interface,
handled by the sata_mv driver). However, like all DMA-capable Marvell
interfaces, some specific MBus window configuration must be done, so a
small specific glue layer is needed, which relies on the recently
introduced libahci_platform.c.

The first patch of this series contains the driver itself, which is
fairly straight-forward. It should be taken by Tejun Heo as the ATA
maintainer.

The last three patches add the Device Tree and defconfig changes. They
should be taken by the respective ARM maintainers (mvebu maintainers
for the DT and mvebu_v7_defconfig, and arm-soc maintainers for the
multi_v7_defconfig change).

This series is currently based on linux-next. If this is a problem for
merging, I'll resend a new version once 3.15-rc1 lands.

Thanks!

Thomas

Thomas Petazzoni (4):
  ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  ARM: mvebu: add Device Tree description of AHCI interfaces on Armada
    38x
  ARM: configs: add ahci_mvebu to mvebu_v7_defconfig
  ARM: configs: add ahci_mvebu to multi_v7_defconfig

 .../devicetree/bindings/ata/ahci-platform.txt      |   3 +-
 arch/arm/boot/dts/armada-385-db.dts                |   8 ++
 arch/arm/boot/dts/armada-38x.dtsi                  |  16 ++++
 arch/arm/configs/multi_v7_defconfig                |   1 +
 arch/arm/configs/mvebu_v7_defconfig                |   1 +
 drivers/ata/Kconfig                                |   9 ++
 drivers/ata/Makefile                               |   1 +
 drivers/ata/ahci_mvebu.c                           | 105 +++++++++++++++++++++
 8 files changed, 143 insertions(+), 1 deletion(-)
 create mode 100644 drivers/ata/ahci_mvebu.c

-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 0/4] Support for Marvell AHCI interface on Armada 38x
@ 2014-04-07 14:57 ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

The Marvell Armada 38x ARM processors use an AHCI compatible interface
for SATA (in replacement of the Marvell-specific SATA interface,
handled by the sata_mv driver). However, like all DMA-capable Marvell
interfaces, some specific MBus window configuration must be done, so a
small specific glue layer is needed, which relies on the recently
introduced libahci_platform.c.

The first patch of this series contains the driver itself, which is
fairly straight-forward. It should be taken by Tejun Heo as the ATA
maintainer.

The last three patches add the Device Tree and defconfig changes. They
should be taken by the respective ARM maintainers (mvebu maintainers
for the DT and mvebu_v7_defconfig, and arm-soc maintainers for the
multi_v7_defconfig change).

This series is currently based on linux-next. If this is a problem for
merging, I'll resend a new version once 3.15-rc1 lands.

Thanks!

Thomas

Thomas Petazzoni (4):
  ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  ARM: mvebu: add Device Tree description of AHCI interfaces on Armada
    38x
  ARM: configs: add ahci_mvebu to mvebu_v7_defconfig
  ARM: configs: add ahci_mvebu to multi_v7_defconfig

 .../devicetree/bindings/ata/ahci-platform.txt      |   3 +-
 arch/arm/boot/dts/armada-385-db.dts                |   8 ++
 arch/arm/boot/dts/armada-38x.dtsi                  |  16 ++++
 arch/arm/configs/multi_v7_defconfig                |   1 +
 arch/arm/configs/mvebu_v7_defconfig                |   1 +
 drivers/ata/Kconfig                                |   9 ++
 drivers/ata/Makefile                               |   1 +
 drivers/ata/ahci_mvebu.c                           | 105 +++++++++++++++++++++
 8 files changed, 143 insertions(+), 1 deletion(-)
 create mode 100644 drivers/ata/ahci_mvebu.c

-- 
1.8.3.2

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  2014-04-07 14:57 ` Thomas Petazzoni
@ 2014-04-07 14:57   ` Thomas Petazzoni
  -1 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth
  Cc: Ezequiel Garcia, Lior Amsalem, Tawfik Bayouk, linux-arm-kernel,
	linux-ide

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,
+	},
+};
+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


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
@ 2014-04-07 14:57   ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

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,
+	},
+};
+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

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 2/4] ARM: mvebu: add Device Tree description of AHCI interfaces on Armada 38x
  2014-04-07 14:57 ` Thomas Petazzoni
@ 2014-04-07 14:57   ` Thomas Petazzoni
  -1 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth
  Cc: Ezequiel Garcia, Lior Amsalem, Tawfik Bayouk, linux-arm-kernel,
	linux-ide

The Marvell Armada 38x processors contain two AHCI compatible
interfaces. This commit adds the Device Tree description of those
interfaces at the SoC level, and also enables them on the Armada 385
DB platform, which allows access to both interfaces through SATA
ports.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/boot/dts/armada-385-db.dts |  8 ++++++++
 arch/arm/boot/dts/armada-38x.dtsi   | 16 ++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/arch/arm/boot/dts/armada-385-db.dts b/arch/arm/boot/dts/armada-385-db.dts
index 6828d77..bdde8ff 100644
--- a/arch/arm/boot/dts/armada-385-db.dts
+++ b/arch/arm/boot/dts/armada-385-db.dts
@@ -81,6 +81,14 @@
 				};
 			};
 
+			sata@a8000 {
+				status = "okay";
+			};
+
+			sata@e0000 {
+				status = "okay";
+			};
+
 			flash@d0000 {
 				status = "okay";
 				num-cs = <1>;
diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi
index a064f59..634a020 100644
--- a/arch/arm/boot/dts/armada-38x.dtsi
+++ b/arch/arm/boot/dts/armada-38x.dtsi
@@ -338,6 +338,22 @@
 				reg = <0x72004 0x4>;
 			};
 
+			sata@a8000 {
+				compatible = "marvell,armada-380-ahci";
+				reg = <0xa8000 0x2000>;
+				interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&gateclk 15>;
+				status = "disabled";
+			};
+
+			sata@e0000 {
+				compatible = "marvell,armada-380-ahci";
+				reg = <0xe0000 0x2000>;
+				interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&gateclk 30>;
+				status = "disabled";
+			};
+
 			coredivclk: clock@e4250 {
 				compatible = "marvell,armada-380-corediv-clock";
 				reg = <0xe4250 0xc>;
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 2/4] ARM: mvebu: add Device Tree description of AHCI interfaces on Armada 38x
@ 2014-04-07 14:57   ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

The Marvell Armada 38x processors contain two AHCI compatible
interfaces. This commit adds the Device Tree description of those
interfaces at the SoC level, and also enables them on the Armada 385
DB platform, which allows access to both interfaces through SATA
ports.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/boot/dts/armada-385-db.dts |  8 ++++++++
 arch/arm/boot/dts/armada-38x.dtsi   | 16 ++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/arch/arm/boot/dts/armada-385-db.dts b/arch/arm/boot/dts/armada-385-db.dts
index 6828d77..bdde8ff 100644
--- a/arch/arm/boot/dts/armada-385-db.dts
+++ b/arch/arm/boot/dts/armada-385-db.dts
@@ -81,6 +81,14 @@
 				};
 			};
 
+			sata at a8000 {
+				status = "okay";
+			};
+
+			sata at e0000 {
+				status = "okay";
+			};
+
 			flash at d0000 {
 				status = "okay";
 				num-cs = <1>;
diff --git a/arch/arm/boot/dts/armada-38x.dtsi b/arch/arm/boot/dts/armada-38x.dtsi
index a064f59..634a020 100644
--- a/arch/arm/boot/dts/armada-38x.dtsi
+++ b/arch/arm/boot/dts/armada-38x.dtsi
@@ -338,6 +338,22 @@
 				reg = <0x72004 0x4>;
 			};
 
+			sata at a8000 {
+				compatible = "marvell,armada-380-ahci";
+				reg = <0xa8000 0x2000>;
+				interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&gateclk 15>;
+				status = "disabled";
+			};
+
+			sata at e0000 {
+				compatible = "marvell,armada-380-ahci";
+				reg = <0xe0000 0x2000>;
+				interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&gateclk 30>;
+				status = "disabled";
+			};
+
 			coredivclk: clock at e4250 {
 				compatible = "marvell,armada-380-corediv-clock";
 				reg = <0xe4250 0xc>;
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 3/4] ARM: configs: add ahci_mvebu to mvebu_v7_defconfig
  2014-04-07 14:57 ` Thomas Petazzoni
@ 2014-04-07 14:57   ` Thomas Petazzoni
  -1 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth
  Cc: Lior Amsalem, linux-ide, Tawfik Bayouk, Ezequiel Garcia,
	linux-arm-kernel

The Marvell Armada 38x platform needs the ahci_mvebu driver enabled
for the AHCI interfaces, so this commit enables the corresponding
Kconfig option in mvebu_v7_defconfig.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/configs/mvebu_v7_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig
index a34713d..aaa625a 100644
--- a/arch/arm/configs/mvebu_v7_defconfig
+++ b/arch/arm/configs/mvebu_v7_defconfig
@@ -36,6 +36,7 @@ CONFIG_CFG80211=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_BLK_DEV_SD=y
 CONFIG_ATA=y
+CONFIG_AHCI_MVEBU=y
 CONFIG_SATA_MV=y
 CONFIG_NETDEVICES=y
 CONFIG_MVNETA=y
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 3/4] ARM: configs: add ahci_mvebu to mvebu_v7_defconfig
@ 2014-04-07 14:57   ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

The Marvell Armada 38x platform needs the ahci_mvebu driver enabled
for the AHCI interfaces, so this commit enables the corresponding
Kconfig option in mvebu_v7_defconfig.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/configs/mvebu_v7_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/mvebu_v7_defconfig b/arch/arm/configs/mvebu_v7_defconfig
index a34713d..aaa625a 100644
--- a/arch/arm/configs/mvebu_v7_defconfig
+++ b/arch/arm/configs/mvebu_v7_defconfig
@@ -36,6 +36,7 @@ CONFIG_CFG80211=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_BLK_DEV_SD=y
 CONFIG_ATA=y
+CONFIG_AHCI_MVEBU=y
 CONFIG_SATA_MV=y
 CONFIG_NETDEVICES=y
 CONFIG_MVNETA=y
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 4/4] ARM: configs: add ahci_mvebu to multi_v7_defconfig
  2014-04-07 14:57 ` Thomas Petazzoni
@ 2014-04-07 14:57   ` Thomas Petazzoni
  -1 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth
  Cc: Ezequiel Garcia, Lior Amsalem, Tawfik Bayouk, linux-arm-kernel,
	linux-ide

The Marvell Armada 38x platform needs the ahci_mvebu driver enabled
for the AHCI interfaces, so this commit enables the corresponding
Kconfig option in multi_v7_defconfig.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/configs/multi_v7_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index de52231..2a46e4b 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -115,6 +115,7 @@ CONFIG_BLK_DEV_SD=y
 CONFIG_BLK_DEV_SR=y
 CONFIG_SCSI_MULTI_LUN=y
 CONFIG_ATA=y
+CONFIG_AHCI_MVEBU=y
 CONFIG_SATA_AHCI_PLATFORM=y
 CONFIG_SATA_HIGHBANK=y
 CONFIG_SATA_MV=y
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH 4/4] ARM: configs: add ahci_mvebu to multi_v7_defconfig
@ 2014-04-07 14:57   ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 14:57 UTC (permalink / raw)
  To: linux-arm-kernel

The Marvell Armada 38x platform needs the ahci_mvebu driver enabled
for the AHCI interfaces, so this commit enables the corresponding
Kconfig option in multi_v7_defconfig.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 arch/arm/configs/multi_v7_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index de52231..2a46e4b 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -115,6 +115,7 @@ CONFIG_BLK_DEV_SD=y
 CONFIG_BLK_DEV_SR=y
 CONFIG_SCSI_MULTI_LUN=y
 CONFIG_ATA=y
+CONFIG_AHCI_MVEBU=y
 CONFIG_SATA_AHCI_PLATFORM=y
 CONFIG_SATA_HIGHBANK=y
 CONFIG_SATA_MV=y
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  2014-04-07 14:57   ` Thomas Petazzoni
@ 2014-04-07 15:18     ` Andrew Lunn
  -1 siblings, 0 replies; 18+ messages in thread
From: Andrew Lunn @ 2014-04-07 15:18 UTC (permalink / raw)
  To: Thomas Petazzoni
  Cc: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Ezequiel Garcia, Lior Amsalem,
	Tawfik Bayouk, linux-arm-kernel, linux-ide

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
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
@ 2014-04-07 15:18     ` Andrew Lunn
  0 siblings, 0 replies; 18+ messages in thread
From: Andrew Lunn @ 2014-04-07 15:18 UTC (permalink / raw)
  To: linux-arm-kernel

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
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  2014-04-07 15:18     ` Andrew Lunn
@ 2014-04-07 15:50       ` Thomas Petazzoni
  -1 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 15:50 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Tejun Heo, Jason Cooper, Gregory Clement, Sebastian Hesselbarth,
	Ezequiel Garcia, Lior Amsalem, Tawfik Bayouk, linux-arm-kernel,
	linux-ide

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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
@ 2014-04-07 15:50       ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 15:50 UTC (permalink / raw)
  To: linux-arm-kernel

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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  2014-04-07 14:57   ` Thomas Petazzoni
@ 2014-04-07 17:50     ` Bartlomiej Zolnierkiewicz
  -1 siblings, 0 replies; 18+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2014-04-07 17:50 UTC (permalink / raw)
  To: Thomas Petazzoni
  Cc: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Ezequiel Garcia, Lior Amsalem,
	Tawfik Bayouk, linux-arm-kernel, linux-ide


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


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
@ 2014-04-07 17:50     ` Bartlomiej Zolnierkiewicz
  0 siblings, 0 replies; 18+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2014-04-07 17:50 UTC (permalink / raw)
  To: linux-arm-kernel


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

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
  2014-04-07 17:50     ` Bartlomiej Zolnierkiewicz
@ 2014-04-07 21:43       ` Thomas Petazzoni
  -1 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 21:43 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Tejun Heo, Jason Cooper, Andrew Lunn, Gregory Clement,
	Sebastian Hesselbarth, Ezequiel Garcia, Lior Amsalem,
	Tawfik Bayouk, linux-arm-kernel, linux-ide

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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces
@ 2014-04-07 21:43       ` Thomas Petazzoni
  0 siblings, 0 replies; 18+ messages in thread
From: Thomas Petazzoni @ 2014-04-07 21:43 UTC (permalink / raw)
  To: linux-arm-kernel

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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2014-04-07 21:43 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-07 14:57 [PATCH 0/4] Support for Marvell AHCI interface on Armada 38x Thomas Petazzoni
2014-04-07 14:57 ` Thomas Petazzoni
2014-04-07 14:57 ` [PATCH 1/4] ata: ahci_mvebu: new driver for Marvell Armada 380 AHCI interfaces Thomas Petazzoni
2014-04-07 14:57   ` Thomas Petazzoni
2014-04-07 15:18   ` Andrew Lunn
2014-04-07 15:18     ` Andrew Lunn
2014-04-07 15:50     ` Thomas Petazzoni
2014-04-07 15:50       ` Thomas Petazzoni
2014-04-07 17:50   ` Bartlomiej Zolnierkiewicz
2014-04-07 17:50     ` Bartlomiej Zolnierkiewicz
2014-04-07 21:43     ` Thomas Petazzoni
2014-04-07 21:43       ` Thomas Petazzoni
2014-04-07 14:57 ` [PATCH 2/4] ARM: mvebu: add Device Tree description of AHCI interfaces on Armada 38x Thomas Petazzoni
2014-04-07 14:57   ` Thomas Petazzoni
2014-04-07 14:57 ` [PATCH 3/4] ARM: configs: add ahci_mvebu to mvebu_v7_defconfig Thomas Petazzoni
2014-04-07 14:57   ` Thomas Petazzoni
2014-04-07 14:57 ` [PATCH 4/4] ARM: configs: add ahci_mvebu to multi_v7_defconfig Thomas Petazzoni
2014-04-07 14:57   ` Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.