Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[PATCH 1/2] mmc: arasan: Add driver for Arasan SDHCI

28 views
Skip to first unread message

Soren Brinkmann

unread,
Oct 15, 2013, 3:10:02 PM10/15/13
to
Add a driver for Arasan's SDHCI controller core.

Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
---
.../devicetree/bindings/mmc/arasan,sdhci.txt | 23 +++
MAINTAINERS | 1 +
drivers/mmc/host/Kconfig | 12 ++
drivers/mmc/host/Makefile | 1 +
drivers/mmc/host/sdhci-of-arasan.c | 224 +++++++++++++++++++++
5 files changed, 261 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
create mode 100644 drivers/mmc/host/sdhci-of-arasan.c

diff --git a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
new file mode 100644
index 000000000000..20f0fc25e270
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
@@ -0,0 +1,23 @@
+Device Tree Bindings for the Arasan SDCHI Controller
+
+ The bindings follow the mmc[1] and the clock bindings[2]. Only deviations are
+ documented here.
+
+ [1] Documentation/devicetree/bindings/mmc/mmc.txt
+ [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
+
+Required Properties:
+ - compatible: Compatibility string. Must be 'arasan,sdhci'
+ - reg: From mmc bindings: Register location and length.
+ - clocks: From clock bindings: Handles to clock inputs.
+ - clock-names: From clock bindings: Tuple including "clk_xin" and "clk_ahb"
+
+Example:
+ sdhci@e0100000 {
+ compatible = "arasan,sdhci";
+ reg = <0xe0100000 0x1000>;
+ clock-names = "clk_xin", "clk_ahb";
+ clocks = <&clkc 21>, <&clkc 32>;
+ interrupt-parent = <&gic>;
+ interrupts = <0 24 4>;
+ } ;
diff --git a/MAINTAINERS b/MAINTAINERS
index 72b1e5c2378a..e2c99b377f8f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1348,6 +1348,7 @@ T: git git://git.xilinx.com/linux-xlnx.git
S: Supported
F: arch/arm/mach-zynq/
F: drivers/cpuidle/cpuidle-zynq.c
+F: drivers/mmc/host/sdhci-of-arasan.c

ARM SMMU DRIVER
M: Will Deacon <will....@arm.com>
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 7fc5099e44b2..1eb090c187bb 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -104,6 +104,18 @@ config MMC_SDHCI_PLTFM

If unsure, say N.

+config MMC_SDHCI_OF_ARASAN
+ tristate "SDHCI OF support for the Arasan SDHCI controllers"
+ depends on MMC_SDHCI_PLTFM
+ depends on OF
+ help
+ This selects the Arasan Secure Digital Host Controller Interface
+ (SDHCI). This hardware is found e.g. in Xilinx' Zynq SoC.
+
+ If you have a controller with this interface, say Y or M here.
+
+ If unsure, say N.
+
config MMC_SDHCI_OF_ESDHC
tristate "SDHCI OF support for the Freescale eSDHC controller"
depends on MMC_SDHCI_PLTFM
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
index c41d0c364509..f93617ec6548 100644
--- a/drivers/mmc/host/Makefile
+++ b/drivers/mmc/host/Makefile
@@ -57,6 +57,7 @@ obj-$(CONFIG_MMC_SDHCI_CNS3XXX) += sdhci-cns3xxx.o
obj-$(CONFIG_MMC_SDHCI_ESDHC_IMX) += sdhci-esdhc-imx.o
obj-$(CONFIG_MMC_SDHCI_DOVE) += sdhci-dove.o
obj-$(CONFIG_MMC_SDHCI_TEGRA) += sdhci-tegra.o
+obj-$(CONFIG_MMC_SDHCI_OF_ARASAN) += sdhci-of-arasan.o
obj-$(CONFIG_MMC_SDHCI_OF_ESDHC) += sdhci-of-esdhc.o
obj-$(CONFIG_MMC_SDHCI_OF_HLWD) += sdhci-of-hlwd.o
obj-$(CONFIG_MMC_SDHCI_BCM_KONA) += sdhci-bcm-kona.o
diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c
new file mode 100644
index 000000000000..6ac93c4c2cf5
--- /dev/null
+++ b/drivers/mmc/host/sdhci-of-arasan.c
@@ -0,0 +1,224 @@
+/*
+ * Arasan Secure Digital Host Controller Interface.
+ * Copyright (C) 2011 - 2012 Michal Simek <mon...@monstr.eu>
+ * Copyright (c) 2012 Wind River Systems, Inc.
+ * Copyright (C) 2013 Pengutronix e.K.
+ * Copyright (C) 2013 Xilinx Inc.
+ *
+ * Based on sdhci-of-esdhc.c
+ *
+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
+ * Copyright (c) 2009 MontaVista Software, Inc.
+ *
+ * Authors: Xiaobo Xie <X....@freescale.com>
+ * Anton Vorontsov <avoro...@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ */
+
+#include <linux/module.h>
+#include "sdhci-pltfm.h"
+
+#define SDHCI_ARASAN_CLK_CTRL_OFFSET 0x2c
+
+#define CLK_CTRL_TIMEOUT_SHIFT 16
+#define CLK_CTRL_TIMEOUT_MASK (0xf << CLK_CTRL_TIMEOUT_SHIFT)
+#define CLK_CTRL_TIMEOUT_MIN_EXP 13
+
+/**
+ * struct sdhci_arasan_data
+ * @clk_ahb: Pointer to the AHB clock
+ */
+struct sdhci_arasan_data {
+ struct clk *clk_ahb;
+};
+
+static unsigned int sdhci_arasan_get_timeout_clock(struct sdhci_host *host)
+{
+ u32 div;
+ unsigned long freq;
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+
+ div = readl(host->ioaddr + SDHCI_ARASAN_CLK_CTRL_OFFSET);
+ div = (div & CLK_CTRL_TIMEOUT_MASK) >> CLK_CTRL_TIMEOUT_SHIFT;
+
+ freq = clk_get_rate(pltfm_host->clk);
+ freq /= 1 << (CLK_CTRL_TIMEOUT_MIN_EXP + div);
+
+ return freq;
+}
+
+static struct sdhci_ops sdhci_arasan_ops = {
+ .get_max_clock = sdhci_pltfm_clk_get_max_clock,
+ .get_timeout_clock = sdhci_arasan_get_timeout_clock,
+};
+
+static struct sdhci_pltfm_data sdhci_arasan_pdata = {
+ .ops = &sdhci_arasan_ops,
+};
+
+#ifdef CONFIG_PM_SLEEP
+/**
+ * sdhci_arasan_suspend - Suspend method for the driver
+ * @dev: Address of the device structure
+ * Returns 0 on success and error value on error
+ *
+ * Put the device in a low power state.
+ */
+static int sdhci_arasan_suspend(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct sdhci_host *host = platform_get_drvdata(pdev);
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+ struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv;
+ int ret;
+
+ ret = sdhci_suspend_host(host);
+ if (ret)
+ return ret;
+
+ clk_disable(pltfm_host->clk);
+ clk_disable(sdhci_arasan->clk_ahb);
+
+ return 0;
+}
+
+/**
+ * sdhci_arasan_resume - Resume method for the driver
+ * @dev: Address of the device structure
+ * Returns 0 on success and error value on error
+ *
+ * Resume operation after suspend
+ */
+static int sdhci_arasan_resume(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct sdhci_host *host = platform_get_drvdata(pdev);
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+ struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv;
+ int ret;
+
+ ret = clk_enable(sdhci_arasan->clk_ahb);
+ if (ret) {
+ dev_err(dev, "Cannot enable AHB clock.\n");
+ return ret;
+ }
+
+ ret = clk_enable(pltfm_host->clk);
+ if (ret) {
+ dev_err(dev, "Cannot enable SD clock.\n");
+ clk_disable(sdhci_arasan->clk_ahb);
+ return ret;
+ }
+
+ return sdhci_resume_host(host);
+}
+#endif /* ! CONFIG_PM_SLEEP */
+
+static SIMPLE_DEV_PM_OPS(sdhci_arasan_dev_pm_ops, sdhci_arasan_suspend,
+ sdhci_arasan_resume);
+
+static int sdhci_arasan_probe(struct platform_device *pdev)
+{
+ int ret;
+ struct clk *clk_xin;
+ struct sdhci_host *host;
+ struct sdhci_pltfm_host *pltfm_host;
+ struct sdhci_arasan_data *sdhci_arasan;
+
+ sdhci_arasan = devm_kzalloc(&pdev->dev, sizeof(*sdhci_arasan),
+ GFP_KERNEL);
+ if (!sdhci_arasan)
+ return -ENOMEM;
+
+ sdhci_arasan->clk_ahb = devm_clk_get(&pdev->dev, "clk_ahb");
+ if (IS_ERR(sdhci_arasan->clk_ahb)) {
+ dev_err(&pdev->dev, "clk_ahb clock not found.\n");
+ return PTR_ERR(sdhci_arasan->clk_ahb);
+ }
+
+ clk_xin = devm_clk_get(&pdev->dev, "clk_xin");
+ if (IS_ERR(clk_xin)) {
+ dev_err(&pdev->dev, "clk_xin clock not found.\n");
+ return PTR_ERR(clk_xin);
+ }
+
+ ret = clk_prepare_enable(sdhci_arasan->clk_ahb);
+ if (ret) {
+ dev_err(&pdev->dev, "Unable to enable AHB clock.\n");
+ return ret;
+ }
+
+ ret = clk_prepare_enable(clk_xin);
+ if (ret) {
+ dev_err(&pdev->dev, "Unable to enable SD clock.\n");
+ goto clk_dis_ahb;
+ }
+
+ host = sdhci_pltfm_init(pdev, &sdhci_arasan_pdata, 0);
+ if (IS_ERR(host)) {
+ ret = PTR_ERR(host);
+ dev_err(&pdev->dev, "platform init failed (%u)\n", ret);
+ goto clk_disable_all;
+ }
+
+ sdhci_get_of_property(pdev);
+ pltfm_host = sdhci_priv(host);
+ pltfm_host->priv = sdhci_arasan;
+ pltfm_host->clk = clk_xin;
+
+ ret = sdhci_add_host(host);
+ if (ret) {
+ dev_err(&pdev->dev, "platform register failed (%u)\n", ret);
+ goto err_pltfm_free;
+ }
+
+ return 0;
+
+err_pltfm_free:
+ sdhci_pltfm_free(pdev);
+clk_disable_all:
+ clk_disable_unprepare(clk_xin);
+clk_dis_ahb:
+ clk_disable_unprepare(sdhci_arasan->clk_ahb);
+
+ return ret;
+}
+
+static int sdhci_arasan_remove(struct platform_device *pdev)
+{
+ struct sdhci_host *host = platform_get_drvdata(pdev);
+ struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+ struct sdhci_arasan_data *sdhci_arasan = pltfm_host->priv;
+
+ clk_disable_unprepare(pltfm_host->clk);
+ clk_disable_unprepare(sdhci_arasan->clk_ahb);
+
+ return sdhci_pltfm_unregister(pdev);
+}
+
+static const struct of_device_id sdhci_arasan_of_match[] = {
+ { .compatible = "arasan,sdhci" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, sdhci_arasan_of_match);
+
+static struct platform_driver sdhci_arasan_driver = {
+ .driver = {
+ .name = "sdhci-arasan",
+ .owner = THIS_MODULE,
+ .of_match_table = sdhci_arasan_of_match,
+ .pm = &sdhci_arasan_dev_pm_ops,
+ },
+ .probe = sdhci_arasan_probe,
+ .remove = sdhci_arasan_remove,
+};
+
+module_platform_driver(sdhci_arasan_driver);
+
+MODULE_DESCRIPTION("Driver for the Arasan SDHCI Controller");
+MODULE_AUTHOR("Soeren Brinkmann <soren.b...@xilinx.com");
+MODULE_LICENSE("GPL");
--
1.8.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Soren Brinkmann

unread,
Oct 15, 2013, 3:10:02 PM10/15/13
to
Add nodes for the Arasan SDHCI controller to Zynq dts files.

Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
---
arch/arm/boot/dts/zynq-7000.dtsi | 20 ++++++++++++++++++++
arch/arm/boot/dts/zynq-zc702.dts | 4 ++++
arch/arm/boot/dts/zynq-zc706.dts | 4 ++++
arch/arm/boot/dts/zynq-zed.dts | 4 ++++
4 files changed, 32 insertions(+)

diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi
index e32b92b949d2..75a549f6cbf7 100644
--- a/arch/arm/boot/dts/zynq-7000.dtsi
+++ b/arch/arm/boot/dts/zynq-7000.dtsi
@@ -65,6 +65,26 @@
interrupts = <0 50 4>;
};

+ sdhci0: ps7-sdhci@e0100000 {
+ compatible = "arasan,sdhci";
+ status = "disabled";
+ clock-names = "clk_xin", "clk_ahb";
+ clocks = <&clkc 21>, <&clkc 32>;
+ interrupt-parent = <&intc>;
+ interrupts = <0 24 4>;
+ reg = <0xe0100000 0x1000>;
+ } ;
+
+ sdhci1: ps7-sdhci@e0101000 {
+ compatible = "arasan,sdhci";
+ status = "disabled";
+ clock-names = "clk_xin", "clk_ahb";
+ clocks = <&clkc 22>, <&clkc 33>;
+ interrupt-parent = <&intc>;
+ interrupts = <0 47 4>;
+ reg = <0xe0101000 0x1000>;
+ } ;
+
slcr: slcr@f8000000 {
compatible = "xlnx,zynq-slcr";
reg = <0xF8000000 0x1000>;
diff --git a/arch/arm/boot/dts/zynq-zc702.dts b/arch/arm/boot/dts/zynq-zc702.dts
index 21aea99a067b..454394453e9c 100644
--- a/arch/arm/boot/dts/zynq-zc702.dts
+++ b/arch/arm/boot/dts/zynq-zc702.dts
@@ -29,6 +29,10 @@

};

+&sdhci0 {
+ status = "okay";
+};
+
&uart1 {
status = "okay";
};
diff --git a/arch/arm/boot/dts/zynq-zc706.dts b/arch/arm/boot/dts/zynq-zc706.dts
index 79009e0b74b9..d734d5411760 100644
--- a/arch/arm/boot/dts/zynq-zc706.dts
+++ b/arch/arm/boot/dts/zynq-zc706.dts
@@ -30,6 +30,10 @@

};

+&sdhci0 {
+ status = "okay";
+};
+
&uart1 {
status = "okay";
};
diff --git a/arch/arm/boot/dts/zynq-zed.dts b/arch/arm/boot/dts/zynq-zed.dts
index d6acf2b1cdf4..cd259dd13cdc 100644
--- a/arch/arm/boot/dts/zynq-zed.dts
+++ b/arch/arm/boot/dts/zynq-zed.dts
@@ -30,6 +30,10 @@

};

+&sdhci0 {
+ status = "okay";
+};
+
&uart1 {
status = "okay";

Sören Brinkmann

unread,
Oct 28, 2013, 5:00:02 PM10/28/13
to
ping?

Tomasz Figa

unread,
Oct 28, 2013, 5:20:02 PM10/28/13
to
Hi Soren,
According to the example below, the list of required properties lacks
interrupt-related properties.

Except this minor issue, the binding is trivial and looks fine to me.

Best regards,
Tomasz

Sören Brinkmann

unread,
Oct 28, 2013, 5:50:02 PM10/28/13
to
Well, the interrupt bindings seem to differ between platforms and
architecture and looking at documentation for other sdhci bindings it
seemed to be okay to avoid documenting them in this place.

Sören

Tomasz Figa

unread,
Oct 28, 2013, 6:20:02 PM10/28/13
to
Sure, but I believe that this controller always has an interrupt signal,
so at least it should be marked that interrupts need to be specified.

Best regards,
Tomasz

Sören Brinkmann

unread,
Oct 28, 2013, 7:00:03 PM10/28/13
to
Okay, I'll add these lines:
- interrupts: Interrupt specifier
- interrupt-parent: Phandle for the interrupt controller that services
interrupts for this device.

Sören

Rob Herring

unread,
Oct 28, 2013, 7:30:02 PM10/28/13
to
This string is a bit non-specific. Vendor IP typically has configurable
options, different revs of IP with fixes/differences, and the
possibility of integration wierdness or bugs. So it is better to be as
specific as possible in case the kernel needs to know exactly what
version of h/w this is.

Rob

Sören Brinkmann

unread,
Oct 28, 2013, 8:20:02 PM10/28/13
to
Okay. The Zynq TRM specifies the version as '8.9A_apr02nd_2010', which seems
a little overly specific to me. How does 'arasan,sdhci-8.9a' sound to
you?

Thanks,
Sören

Soren Brinkmann

unread,
Oct 30, 2013, 12:40:02 PM10/30/13
to
Add a driver for Arasan's SDHCI controller core.

Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
---
v2:
- document 'interrupts' and 'interrupt-parent' properties in the driver
bindings
- append '-8.9a' IP version specifier to comaptibility string
---
.../devicetree/bindings/mmc/arasan,sdhci.txt | 27 +++
MAINTAINERS | 1 +
drivers/mmc/host/Kconfig | 12 ++
drivers/mmc/host/Makefile | 1 +
drivers/mmc/host/sdhci-of-arasan.c | 224 +++++++++++++++++++++
5 files changed, 265 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
create mode 100644 drivers/mmc/host/sdhci-of-arasan.c

diff --git a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
new file mode 100644
index 000000000000..ef4c5ac753e8
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
@@ -0,0 +1,27 @@
+Device Tree Bindings for the Arasan SDCHI Controller
+
+ The bindings follow the mmc[1], clock[2] and interrupt[3] bindings. Only
+ deviations are documented here.
+
+ [1] Documentation/devicetree/bindings/mmc/mmc.txt
+ [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
+ [3] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
+
+Required Properties:
+ - compatible: Compatibility string. Must be 'arasan,sdhci-8.9a'
+ - reg: From mmc bindings: Register location and length.
+ - clocks: From clock bindings: Handles to clock inputs.
+ - clock-names: From clock bindings: Tuple including "clk_xin" and "clk_ahb"
+ - interrupts: Interrupt specifier
+ - interrupt-parent: Phandle for the interrupt controller that services
+ interrupts for this device.
+
+Example:
+ sdhci@e0100000 {
+ compatible = "arasan,sdhci-8.9a";
+ reg = <0xe0100000 0x1000>;
+ clock-names = "clk_xin", "clk_ahb";
+ clocks = <&clkc 21>, <&clkc 32>;
+ interrupt-parent = <&gic>;
+ interrupts = <0 24 4>;
+ } ;
diff --git a/MAINTAINERS b/MAINTAINERS
index 3438384d270c..5ede7f722025 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1357,6 +1357,7 @@ T: git git://git.xilinx.com/linux-xlnx.git
new file mode 100644
index 000000000000..98464bc732f6
+ { .compatible = "arasan,sdhci-8.9a" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, sdhci_arasan_of_match);
+
+static struct platform_driver sdhci_arasan_driver = {
+ .driver = {
+ .name = "sdhci-arasan",
+ .owner = THIS_MODULE,
+ .of_match_table = sdhci_arasan_of_match,
+ .pm = &sdhci_arasan_dev_pm_ops,
+ },
+ .probe = sdhci_arasan_probe,
+ .remove = sdhci_arasan_remove,
+};
+
+module_platform_driver(sdhci_arasan_driver);
+
+MODULE_DESCRIPTION("Driver for the Arasan SDHCI Controller");
+MODULE_AUTHOR("Soeren Brinkmann <soren.b...@xilinx.com");
+MODULE_LICENSE("GPL");
--
1.8.4.1

Rob Herring

unread,
Oct 30, 2013, 7:50:02 PM10/30/13
to
On Wed, Oct 30, 2013 at 11:38 AM, Soren Brinkmann
<soren.b...@xilinx.com> wrote:
> Add a driver for Arasan's SDHCI controller core.
>
> Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>

For the binding:

Acked-by: Rob Herring <rob.h...@calxeda.com>
> To unsubscribe from this list: send the line "unsubscribe devicetree" in

Sören Brinkmann

unread,
Nov 6, 2013, 4:50:01 PM11/6/13
to
Hi Chris,

any comments from your side? Could you consider applying it to your
tree, please?

Thanks,
Sören

Michal Simek

unread,
Nov 12, 2013, 4:00:01 AM11/12/13
to
Hi Chris,

On 11/06/2013 10:41 PM, Sören Brinkmann wrote:
> Hi Chris,
>
> any comments from your side? Could you consider applying it to your
> tree, please?

any update on this one?

What's the naming convention we should follow?

Is sdhci-of-arasan.c OK? Or should we use sdhci-arasan.c instead?

Thanks,
Michal

--
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/
Maintainer of Linux kernel - Xilinx Zynq ARM architecture
Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform


signature.asc

Chris Ball

unread,
Nov 26, 2013, 6:30:02 PM11/26/13
to
Hi Soren, sorry for the late review, just trivial changes:

On Wed, Oct 30 2013, Soren Brinkmann wrote:
> diff --git a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
> new file mode 100644
> index 000000000000..ef4c5ac753e8
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
> @@ -0,0 +1,27 @@
> +Device Tree Bindings for the Arasan SDCHI Controller

SDHCI

> +
> + The bindings follow the mmc[1], clock[2] and interrupt[3] bindings. Only
> + deviations are documented here.
> +
> + [1] Documentation/devicetree/bindings/mmc/mmc.txt
> + [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
> + [3] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
> +
> +Required Properties:
> + - compatible: Compatibility string. Must be 'arasan,sdhci-8.9a'
> + - reg: From mmc bindings: Register location and length.

Actually, reg/interrupts are from the OF core. There's no need to
mention them here.
The kernel is licensed under GPLv2, not GPLv2 or later. In fact,
GPLv2 is incompatible with GPLv3. Can we stick to GPLv2 only here?
Missing a closing ">" here.

> +MODULE_LICENSE("GPL");

Thanks,

- Chris.
--
Chris Ball <c...@laptop.org> <http://printf.net/>

Sören Brinkmann

unread,
Nov 26, 2013, 6:50:02 PM11/26/13
to
Hi Chris,

On Tue, Nov 26, 2013 at 06:22:46PM -0500, Chris Ball wrote:
> Hi Soren, sorry for the late review, just trivial changes:
No problem. Thanks for looking at it.

>
> On Wed, Oct 30 2013, Soren Brinkmann wrote:
> > diff --git a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
> > new file mode 100644
> > index 000000000000..ef4c5ac753e8
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
> > @@ -0,0 +1,27 @@
> > +Device Tree Bindings for the Arasan SDCHI Controller
>
> SDHCI
Oops. Will be fixed.

>
> > +
> > + The bindings follow the mmc[1], clock[2] and interrupt[3] bindings. Only
> > + deviations are documented here.
> > +
> > + [1] Documentation/devicetree/bindings/mmc/mmc.txt
> > + [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
> > + [3] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
> > +
> > +Required Properties:
> > + - compatible: Compatibility string. Must be 'arasan,sdhci-8.9a'
> > + - reg: From mmc bindings: Register location and length.
>
> Actually, reg/interrupts are from the OF core. There's no need to
> mention them here.
Tomasz complained when I left those parts out so I added them in v2.
Since it's there now, I don't mind either way. Let's just agree on one
way or the other.
Well, this header allows you to use this source under GPLv2 -
which the kernel obviously does - but also to rip this file out and use
it under newer GPL licenses. This is fully compliant to GPLv2 licensing
in the kernel and commonly used across other drivers as well.
If you look at include/linux/module.h, several valid license strings are
documented to be used in the MODULE_LICENSE macro.
Let me know if you have any concerns and need this to be changed, but I
think this should be perfectly fine.
Right, I'll add it.

Thanks,
Sören

Michal Simek

unread,
Nov 27, 2013, 12:30:02 AM11/27/13
to
Hi Chris,
Binding was Acked-by Rob and that's why I believe this should be fine.
signature.asc

Soren Brinkmann

unread,
Dec 2, 2013, 1:10:01 PM12/2/13
to
Add a driver for Arasan's SDHCI controller core.

Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
Acked-by: Rob Herring <rob.h...@calxeda.com> [binding]
---
As discussed, I left binding and license header as is and fixed the typos.

v3:
- fix typo in binding documentation
- add missing '>' in MODULE_AUTHOR string
v2:
- document 'interrupts' and 'interrupt-parent' properties in the driver
bindings
- append '-8.9a' IP version specifier to comaptibility string

Thanks,
Sören

.../devicetree/bindings/mmc/arasan,sdhci.txt | 27 +++
MAINTAINERS | 1 +
drivers/mmc/host/Kconfig | 12 ++
drivers/mmc/host/Makefile | 1 +
drivers/mmc/host/sdhci-of-arasan.c | 224 +++++++++++++++++++++
5 files changed, 265 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
create mode 100644 drivers/mmc/host/sdhci-of-arasan.c

diff --git a/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
new file mode 100644
index 000000000000..98ee2abbe138
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
@@ -0,0 +1,27 @@
+Device Tree Bindings for the Arasan SDHCI Controller
+
+ The bindings follow the mmc[1], clock[2] and interrupt[3] bindings. Only
+ deviations are documented here.
+
+ [1] Documentation/devicetree/bindings/mmc/mmc.txt
+ [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
+ [3] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
+
+Required Properties:
+ - compatible: Compatibility string. Must be 'arasan,sdhci-8.9a'
+ - reg: From mmc bindings: Register location and length.
+ - clocks: From clock bindings: Handles to clock inputs.
+ - clock-names: From clock bindings: Tuple including "clk_xin" and "clk_ahb"
+ - interrupts: Interrupt specifier
+ - interrupt-parent: Phandle for the interrupt controller that services
+ interrupts for this device.
+
+Example:
+ sdhci@e0100000 {
+ compatible = "arasan,sdhci-8.9a";
+ reg = <0xe0100000 0x1000>;
+ clock-names = "clk_xin", "clk_ahb";
+ clocks = <&clkc 21>, <&clkc 32>;
+ interrupt-parent = <&gic>;
+ interrupts = <0 24 4>;
+ } ;
diff --git a/MAINTAINERS b/MAINTAINERS
index f216db847022..9c98792335d9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1371,6 +1371,7 @@ T: git git://git.xilinx.com/linux-xlnx.git
new file mode 100644
index 000000000000..f7c7cf62437d
--- /dev/null
+++ b/drivers/mmc/host/sdhci-of-arasan.c
@@ -0,0 +1,224 @@
+/*
+ * Arasan Secure Digital Host Controller Interface.
+ * Copyright (C) 2011 - 2012 Michal Simek <mon...@monstr.eu>
+ * Copyright (c) 2012 Wind River Systems, Inc.
+ * Copyright (C) 2013 Pengutronix e.K.
+ * Copyright (C) 2013 Xilinx Inc.
+ *
+ * Based on sdhci-of-esdhc.c
+ *
+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
+ * Copyright (c) 2009 MontaVista Software, Inc.
+ *
+ * Authors: Xiaobo Xie <X....@freescale.com>
+ * Anton Vorontsov <avoro...@ru.mvista.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ */
+MODULE_LICENSE("GPL");
--
1.8.4.4

Soren Brinkmann

unread,
Dec 2, 2013, 1:10:03 PM12/2/13
to
Add nodes for the Arasan SDHCI controller to Zynq dts files.

Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
---
v2:
- update compatibilty string according to changes in 1/2 (append
'-8.9a' IP version string)
---
arch/arm/boot/dts/zynq-7000.dtsi | 20 ++++++++++++++++++++
arch/arm/boot/dts/zynq-zc702.dts | 4 ++++
arch/arm/boot/dts/zynq-zc706.dts | 4 ++++
arch/arm/boot/dts/zynq-zed.dts | 4 ++++
4 files changed, 32 insertions(+)

diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi
index e7f73b2e4550..4aecd1baf435 100644
--- a/arch/arm/boot/dts/zynq-7000.dtsi
+++ b/arch/arm/boot/dts/zynq-7000.dtsi
@@ -65,6 +65,26 @@
interrupts = <0 50 4>;
};

+ sdhci0: ps7-sdhci@e0100000 {
+ compatible = "arasan,sdhci-8.9a";
+ status = "disabled";
+ clock-names = "clk_xin", "clk_ahb";
+ clocks = <&clkc 21>, <&clkc 32>;
+ interrupt-parent = <&intc>;
+ interrupts = <0 24 4>;
+ reg = <0xe0100000 0x1000>;
+ } ;
+
+ sdhci1: ps7-sdhci@e0101000 {
+ compatible = "arasan,sdhci-8.9a";
+ status = "disabled";
+ clock-names = "clk_xin", "clk_ahb";

Michal Simek

unread,
Dec 2, 2013, 2:50:02 PM12/2/13
to
On 12/02/2013 07:02 PM, Soren Brinkmann wrote:
> Add nodes for the Arasan SDHCI controller to Zynq dts files.
>
> Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
> ---
> v2:
> - update compatibilty string according to changes in 1/2 (append
> '-8.9a' IP version string)
> ---
> arch/arm/boot/dts/zynq-7000.dtsi | 20 ++++++++++++++++++++
> arch/arm/boot/dts/zynq-zc702.dts | 4 ++++
> arch/arm/boot/dts/zynq-zc706.dts | 4 ++++
> arch/arm/boot/dts/zynq-zed.dts | 4 ++++
> 4 files changed, 32 insertions(+)

Chris: It is up to you if you want to take this through your tree
or just let me to take it through my tree. It is adding new nodes
to DTS file that's why it shouldn't be any problem to apply it
separately.

Anyway please let me know what you think.
If you want to add it to your tree here is my

Acked-by: Michal Simek <mon...@monstr.eu>
signature.asc

Michal Simek

unread,
Dec 2, 2013, 2:50:05 PM12/2/13
to
On 12/02/2013 07:02 PM, Soren Brinkmann wrote:
> Add a driver for Arasan's SDHCI controller core.
>
> Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
> Acked-by: Rob Herring <rob.h...@calxeda.com> [binding]
> ---
> As discussed, I left binding and license header as is and fixed the typos.
>
> v3:
> - fix typo in binding documentation
> - add missing '>' in MODULE_AUTHOR string
> v2:
> - document 'interrupts' and 'interrupt-parent' properties in the driver
> bindings
> - append '-8.9a' IP version specifier to comaptibility string
>
> Thanks,
> Sören
>
> .../devicetree/bindings/mmc/arasan,sdhci.txt | 27 +++
> MAINTAINERS | 1 +
> drivers/mmc/host/Kconfig | 12 ++
> drivers/mmc/host/Makefile | 1 +
> drivers/mmc/host/sdhci-of-arasan.c | 224 +++++++++++++++++++++
> 5 files changed, 265 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/mmc/arasan,sdhci.txt
> create mode 100644 drivers/mmc/host/sdhci-of-arasan.c

signature.asc

Sören Brinkmann

unread,
Dec 13, 2013, 12:10:01 PM12/13/13
to
ping?

Michal Simek

unread,
Jan 6, 2014, 6:20:02 AM1/6/14
to
On 12/02/2013 08:45 PM, Michal Simek wrote:
> On 12/02/2013 07:02 PM, Soren Brinkmann wrote:
>> Add nodes for the Arasan SDHCI controller to Zynq dts files.
>>
>> Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
>> ---
>> v2:
>> - update compatibilty string according to changes in 1/2 (append
>> '-8.9a' IP version string)
>> ---
>> arch/arm/boot/dts/zynq-7000.dtsi | 20 ++++++++++++++++++++
>> arch/arm/boot/dts/zynq-zc702.dts | 4 ++++
>> arch/arm/boot/dts/zynq-zc706.dts | 4 ++++
>> arch/arm/boot/dts/zynq-zed.dts | 4 ++++
>> 4 files changed, 32 insertions(+)
>
> Chris: It is up to you if you want to take this through your tree
> or just let me to take it through my tree. It is adding new nodes
> to DTS file that's why it shouldn't be any problem to apply it
> separately.
>
> Anyway please let me know what you think.
> If you want to add it to your tree here is my
>
> Acked-by: Michal Simek <mon...@monstr.eu>

I have added this patch to my zynq/dt branch.
We discussed this in other patch and these dt changes should go through
arm-soc tree.
signature.asc

Chris Ball

unread,
Jan 12, 2014, 1:10:02 PM1/12/14
to
Hi Soren,

On Mon, Dec 02 2013, Soren Brinkmann wrote:
> Add a driver for Arasan's SDHCI controller core.
>
> Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
> Acked-by: Rob Herring <rob.h...@calxeda.com> [binding]

Thanks, pushed patch 1/2 to mmc-next for 3.14.

- Chris.
--
Chris Ball <ch...@printf.net> <http://printf.net/>

Sören Brinkmann

unread,
Jan 13, 2014, 12:20:04 PM1/13/14
to
On Sun, Jan 12, 2014 at 06:06:32PM +0000, Chris Ball wrote:
> Hi Soren,
>
> On Mon, Dec 02 2013, Soren Brinkmann wrote:
> > Add a driver for Arasan's SDHCI controller core.
> >
> > Signed-off-by: Soren Brinkmann <soren.b...@xilinx.com>
> > Acked-by: Rob Herring <rob.h...@calxeda.com> [binding]
>
> Thanks, pushed patch 1/2 to mmc-next for 3.14.

Thank you.

Sören
0 new messages