* [PATCH v3 0/6] ARM: imx6q{dl}: add the WEIM driver
@ 2013-05-24 9:59 Huang Shijie
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
0 siblings, 1 reply; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
This patch set adds a new driver for WEIM in the imx6q{dl}-sabreauto boards.
The WEIM(Wireless External Interface Module) works like a bus.
You can attach many different devices on it, such as NOR, onenand.
In the case of i.MX6q-sabreauto, only the NOR is connected to WEIM.
v2 --> v3:
[0] split the NOR pinctrl.
[1] make the driver unloaded. change to bool type in Kconfig.
[2] use the of_platform_populate().
[3] remove the unused "interrupt" property from the Doc.
v1 --> v2:
[0] remove used PADs.
[1] fix the wrong pad values, (thanks Alison Chaiken)
[2] remove the weim-cs-index.
[3] add "fsl" for the weim-cs-timing.
[4] remove the partitions info in the document.
[5] rewrite the drivers(follow Sascha and Shawn's comments)
Huang Shijie (6):
drivers: bus: add a new driver for WEIM
ARM: dts: imx6q{dl}: fix the pin conflict between SPI and WEIM
ARM: dts: imx6qdl: add more information for WEIM
ARM: dts: imx6q: add pinctrls for WEIM NOR
ARM: dts: imx6dl: add pinctrls for WEIM NOR
ARM: dts: imx6qdl: enable the WEIM NOR
Documentation/devicetree/bindings/bus/imx-weim.txt | 50 +++++++
arch/arm/boot/dts/imx6dl-sabreauto.dts | 9 +-
arch/arm/boot/dts/imx6dl.dtsi | 60 +++++++++
arch/arm/boot/dts/imx6q-sabreauto.dts | 9 +-
arch/arm/boot/dts/imx6q.dtsi | 61 +++++++++
arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 22 +++-
arch/arm/boot/dts/imx6qdl.dtsi | 4 +-
drivers/bus/Kconfig | 9 ++
drivers/bus/Makefile | 1 +
drivers/bus/imx-weim.c | 139 ++++++++++++++++++++
10 files changed, 360 insertions(+), 4 deletions(-)
create mode 100644 Documentation/devicetree/bindings/bus/imx-weim.txt
create mode 100644 drivers/bus/imx-weim.c
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v3 1/6] drivers: bus: add a new driver for WEIM
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2013-05-24 9:59 ` Huang Shijie
[not found] ` <1369389564-13181-2-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 9:59 ` [PATCH v3 2/6] ARM: dts: imx6q{dl}: fix the pin conflict between SPI and WEIM Huang Shijie
` (4 subsequent siblings)
5 siblings, 1 reply; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
The WEIM(Wireless External Interface Module) works like a bus.
You can attach many different devices on it, such as NOR, onenand.
In the case of i.MX6q-sabreauto, the NOR is connected to WEIM.
This patch also adds the devicetree binding document.
The driver only works when the devicetree is enabled.
Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
Documentation/devicetree/bindings/bus/imx-weim.txt | 50 +++++++
drivers/bus/Kconfig | 9 ++
drivers/bus/Makefile | 1 +
drivers/bus/imx-weim.c | 139 ++++++++++++++++++++
4 files changed, 199 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/bus/imx-weim.txt
create mode 100644 drivers/bus/imx-weim.c
diff --git a/Documentation/devicetree/bindings/bus/imx-weim.txt b/Documentation/devicetree/bindings/bus/imx-weim.txt
new file mode 100644
index 0000000..e7a2950
--- /dev/null
+++ b/Documentation/devicetree/bindings/bus/imx-weim.txt
@@ -0,0 +1,50 @@
+Device tree bindings for i.MX Wireless External Interface Module (WEIM)
+
+The term "wireless" does not imply that the WEIM is literally an interface
+without wires. It simply means that this module was originally designed for
+wireless and mobile applications that use low-power technology.
+
+The actual devices are instantiated from the child nodes of a WEIM node.
+
+Required properties:
+
+ - compatible: Should be set to "fsl,imx6q-weim"
+ - reg: A resource specifier for the register space
+ (see the example below)
+ - clocks: the clock, see the example below.
+ - #address-cells: Must be set to 2 to allow memory address translation
+ - #size-cells: Must be set to 1 to allow CS address passing
+ - ranges: Must be set up to reflect the memory layout with four
+ integer values for each chip-select line in use:
+
+ <cs-number> 0 <physical address of mapping> <size>
+
+Timing property for child nodes. It is mandatory, not optional.
+
+ - fsl,weim-cs-timing: The timing array, contains 6 timing values for the
+ child node. We can get the CS index from the child
+ node's "reg" property. This property contains the values
+ for the registers EIM_CSnGCR1, EIM_CSnGCR2, EIM_CSnRCR1,
+ EIM_CSnRCR2, EIM_CSnWCR1, EIM_CSnWCR2 in this order.
+
+Example for an imx6q-sabreauto board, the NOR flash connected to the WEIM:
+
+ weim: weim@021b8000 {
+ compatible = "fsl,imx6q-weim";
+ reg = <0x021b8000 0x4000>;
+ clocks = <&clks 196>;
+ #address-cells = <2>;
+ #size-cells = <1>;
+ ranges = <0 0 0x08000000 0x08000000>;
+
+ nor@0,0 {
+ compatible = "cfi-flash";
+ reg = <0 0 0x02000000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ bank-width = <2>;
+
+ fsl,weim-cs-timing = <0x00620081 0x00000001 0x1C022000
+ 0x0000C000 0x1404a38e 0x00000000>;
+ };
+ };
diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig
index b05ecab..46cd5bb 100644
--- a/drivers/bus/Kconfig
+++ b/drivers/bus/Kconfig
@@ -4,6 +4,15 @@
menu "Bus devices"
+config IMX_WEIM
+ bool "Freescale EIM DRIVER"
+ depends on ARCH_MXC
+ help
+ Driver for i.MX6 WEIM controller.
+ The WEIM(Wireless External Interface Module) works like a bus.
+ You can attach many different devices on it, such as NOR, onenand.
+ But now, we only support the Parallel NOR.
+
config MVEBU_MBUS
bool
depends on PLAT_ORION
diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile
index 3c7b53c..436bbcc 100644
--- a/drivers/bus/Makefile
+++ b/drivers/bus/Makefile
@@ -2,6 +2,7 @@
# Makefile for the bus drivers.
#
+obj-$(CONFIG_IMX_WEIM) += imx-weim.o
obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o
obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o
diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c
new file mode 100644
index 0000000..aef865d
--- /dev/null
+++ b/drivers/bus/imx-weim.c
@@ -0,0 +1,139 @@
+/*
+ * EIM driver for Freescale's i.MX chips
+ *
+ * Copyright (C) 2013 Freescale Semiconductor, Inc.
+ *
+ * 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/module.h>
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/of_device.h>
+
+struct imx_weim {
+ void __iomem *base;
+ struct clk *clk;
+};
+
+static const struct of_device_id weim_id_table[] = {
+ { .compatible = "fsl,imx6q-weim", },
+ {}
+};
+MODULE_DEVICE_TABLE(of, weim_id_table);
+
+#define CS_TIMING_LEN 6
+#define CS_REG_RANGE 0x18
+
+/* Parse and set the timing for this device. */
+static int
+weim_timing_setup(struct platform_device *pdev, struct device_node *np)
+{
+ struct imx_weim *weim = platform_get_drvdata(pdev);
+ u32 value[CS_TIMING_LEN];
+ u32 cs_idx;
+ int ret;
+ int i;
+
+ /* get the CS index from this child node's "reg" property. */
+ ret = of_property_read_u32(np, "reg", &cs_idx);
+ if (ret)
+ return ret;
+
+ /* The weim has four chip selects. */
+ if (cs_idx > 3)
+ return -EINVAL;
+
+ ret = of_property_read_u32_array(np, "fsl,weim-cs-timing",
+ value, CS_TIMING_LEN);
+ if (ret)
+ return ret;
+
+ /* set the timing for WEIM */
+ for (i = 0; i < CS_TIMING_LEN; i++)
+ writel(value[i], weim->base + cs_idx * CS_REG_RANGE + i * 4);
+ return 0;
+}
+
+static void weim_parse_dt(struct platform_device *pdev)
+{
+ struct device_node *child;
+
+ for_each_child_of_node(pdev->dev.of_node, child) {
+ if (!child->name)
+ continue;
+
+ if (weim_timing_setup(pdev, child)) {
+ dev_err(&pdev->dev, "%s set timing failed.\n",
+ child->full_name);
+ continue;
+ }
+ }
+
+ if (of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev) < 0)
+ dev_err(&pdev->dev, "%s fail to create devices.\n",
+ pdev->dev.of_node->full_name);
+}
+
+static int weim_probe(struct platform_device *pdev)
+{
+ struct imx_weim *weim;
+ struct resource *res;
+ int ret = -EINVAL;
+
+ weim = devm_kzalloc(&pdev->dev, sizeof(*weim), GFP_KERNEL);
+ if (!weim) {
+ ret = -ENOMEM;
+ goto weim_err;
+ }
+ platform_set_drvdata(pdev, weim);
+
+ /* get the resource */
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ weim->base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(weim->base)) {
+ ret = PTR_ERR(weim->base);
+ goto weim_err;
+ }
+
+ /* get the clock */
+ weim->clk = devm_clk_get(&pdev->dev, NULL);
+ if (IS_ERR(weim->clk))
+ goto weim_err;
+
+ ret = clk_prepare_enable(weim->clk);
+ if (ret)
+ goto weim_err;
+
+ /* parse the device node */
+ weim_parse_dt(pdev);
+
+ dev_info(&pdev->dev, "WEIM driver registered.\n");
+ return 0;
+
+weim_err:
+ return ret;
+}
+
+static int weim_remove(struct platform_device *pdev)
+{
+ struct imx_weim *weim = platform_get_drvdata(pdev);
+
+ clk_disable_unprepare(weim->clk);
+ return 0;
+}
+
+static struct platform_driver weim_driver = {
+ .driver = {
+ .name = "imx-weim",
+ .of_match_table = weim_id_table,
+ },
+ .probe = weim_probe,
+ .remove = weim_remove,
+};
+
+module_platform_driver(weim_driver);
+MODULE_AUTHOR("Freescale Semiconductor Inc.");
+MODULE_DESCRIPTION("i.MX EIM Controller Driver");
+MODULE_LICENSE("GPL");
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 2/6] ARM: dts: imx6q{dl}: fix the pin conflict between SPI and WEIM
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 9:59 ` [PATCH v3 1/6] drivers: bus: add a new driver for WEIM Huang Shijie
@ 2013-05-24 9:59 ` Huang Shijie
2013-05-24 9:59 ` [PATCH v3 3/6] ARM: dts: imx6qdl: add more information for WEIM Huang Shijie
` (3 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
In the imx6q-sabreauto and imx6dl-sabreauto boards,
the pin MX6Q{DL}_PAD_EIM_D19 is used as a GPIO for SPI NOR, but
it is used as a data pin for the WEIM NOR.
In order to fix the conflict, this patch removes the pin from the hog,
and adds a new board-level pinctrl: pinctrl_ecspi1_sabreauto.
The SPI NOR selects this pinctrl_ecspi1_sabreauto when it is enabled.
Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
arch/arm/boot/dts/imx6dl-sabreauto.dts | 9 ++++++++-
arch/arm/boot/dts/imx6q-sabreauto.dts | 9 ++++++++-
arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 2 +-
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/arch/arm/boot/dts/imx6dl-sabreauto.dts b/arch/arm/boot/dts/imx6dl-sabreauto.dts
index 60f3038..95da711 100644
--- a/arch/arm/boot/dts/imx6dl-sabreauto.dts
+++ b/arch/arm/boot/dts/imx6dl-sabreauto.dts
@@ -25,7 +25,14 @@
fsl,pins = <
MX6DL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
MX6DL_PAD_SD2_DAT2__GPIO1_IO13 0x80000000
- MX6DL_PAD_EIM_D19__GPIO3_IO19 0x80000000
+ >;
+ };
+ };
+
+ ecspi1 {
+ pinctrl_ecspi1_sabreauto: ecspi1-sabreauto {
+ fsl,pins = <
+ MX6DL_PAD_EIM_D19__GPIO3_IO19 0x80000000
>;
};
};
diff --git a/arch/arm/boot/dts/imx6q-sabreauto.dts b/arch/arm/boot/dts/imx6q-sabreauto.dts
index 9fb3e99..09a7580 100644
--- a/arch/arm/boot/dts/imx6q-sabreauto.dts
+++ b/arch/arm/boot/dts/imx6q-sabreauto.dts
@@ -29,7 +29,14 @@
fsl,pins = <
MX6Q_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
MX6Q_PAD_SD2_DAT2__GPIO1_IO13 0x80000000
- MX6Q_PAD_EIM_D19__GPIO3_IO19 0x80000000
+ >;
+ };
+ };
+
+ ecspi1 {
+ pinctrl_ecspi1_sabreauto: ecspi1-sabreauto {
+ fsl,pins = <
+ MX6Q_PAD_EIM_D19__GPIO3_IO19 0x80000000
>;
};
};
diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
index d6baa51..a4466e6 100644
--- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
@@ -20,7 +20,7 @@
fsl,spi-num-chipselects = <1>;
cs-gpios = <&gpio3 19 0>;
pinctrl-names = "default";
- pinctrl-0 = <&pinctrl_ecspi1_1>;
+ pinctrl-0 = <&pinctrl_ecspi1_1 &pinctrl_ecspi1_sabreauto>;
status = "disabled"; /* pin conflict with WEIM NOR */
flash: m25p80@0 {
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 3/6] ARM: dts: imx6qdl: add more information for WEIM
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 9:59 ` [PATCH v3 1/6] drivers: bus: add a new driver for WEIM Huang Shijie
2013-05-24 9:59 ` [PATCH v3 2/6] ARM: dts: imx6q{dl}: fix the pin conflict between SPI and WEIM Huang Shijie
@ 2013-05-24 9:59 ` Huang Shijie
2013-05-24 9:59 ` [PATCH v3 4/6] ARM: dts: imx6q: add pinctrls for WEIM NOR Huang Shijie
` (2 subsequent siblings)
5 siblings, 0 replies; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Add the clock and compatible information for the weim.
Also adds the weim label.
Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
arch/arm/boot/dts/imx6qdl.dtsi | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
index 42e461c..f21d259 100644
--- a/arch/arm/boot/dts/imx6qdl.dtsi
+++ b/arch/arm/boot/dts/imx6qdl.dtsi
@@ -744,9 +744,11 @@
reg = <0x021b4000 0x4000>;
};
- weim@021b8000 {
+ weim: weim@021b8000 {
+ compatible = "fsl,imx6q-weim";
reg = <0x021b8000 0x4000>;
interrupts = <0 14 0x04>;
+ clocks = <&clks 196>;
};
ocotp@021bc000 {
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 4/6] ARM: dts: imx6q: add pinctrls for WEIM NOR
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (2 preceding siblings ...)
2013-05-24 9:59 ` [PATCH v3 3/6] ARM: dts: imx6qdl: add more information for WEIM Huang Shijie
@ 2013-05-24 9:59 ` Huang Shijie
[not found] ` <1369389564-13181-5-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 9:59 ` [PATCH v3 5/6] ARM: dts: imx6dl: " Huang Shijie
2013-05-24 9:59 ` [PATCH v3 6/6] ARM: dts: imx6qdl: enable the " Huang Shijie
5 siblings, 1 reply; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Add two pinctrls for WEIM:
one for the weim nor, another for the chipselect.
Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
arch/arm/boot/dts/imx6q.dtsi | 61 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
index ed11bcf..7c5bcf4 100644
--- a/arch/arm/boot/dts/imx6q.dtsi
+++ b/arch/arm/boot/dts/imx6q.dtsi
@@ -323,6 +323,67 @@
>;
};
};
+
+ weim {
+ pinctrl_weim_cs_0: weim_norgrp-1 {
+ fsl,pins = <
+ MX6Q_PAD_EIM_CS0__EIM_CS0_B 0xb0b1
+ >;
+ };
+
+ pinctrl_weim_nor_1: weim_norgrp-2 {
+ fsl,pins = <
+ MX6Q_PAD_EIM_OE__EIM_OE_B 0xb0b1
+ MX6Q_PAD_EIM_RW__EIM_RW 0xb0b1
+ MX6Q_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
+
+ /* data */
+ MX6Q_PAD_EIM_D16__EIM_DATA16 0xb0b1
+ MX6Q_PAD_EIM_D17__EIM_DATA17 0xb0b1
+ MX6Q_PAD_EIM_D18__EIM_DATA18 0xb0b1
+ MX6Q_PAD_EIM_D19__EIM_DATA19 0xb0b1
+ MX6Q_PAD_EIM_D20__EIM_DATA20 0xb0b1
+ MX6Q_PAD_EIM_D21__EIM_DATA21 0xb0b1
+ MX6Q_PAD_EIM_D22__EIM_DATA22 0xb0b1
+ MX6Q_PAD_EIM_D23__EIM_DATA23 0xb0b1
+ MX6Q_PAD_EIM_D24__EIM_DATA24 0xb0b1
+ MX6Q_PAD_EIM_D25__EIM_DATA25 0xb0b1
+ MX6Q_PAD_EIM_D26__EIM_DATA26 0xb0b1
+ MX6Q_PAD_EIM_D27__EIM_DATA27 0xb0b1
+ MX6Q_PAD_EIM_D28__EIM_DATA28 0xb0b1
+ MX6Q_PAD_EIM_D29__EIM_DATA29 0xb0b1
+ MX6Q_PAD_EIM_D30__EIM_DATA30 0xb0b1
+ MX6Q_PAD_EIM_D31__EIM_DATA31 0xb0b1
+
+ /* address */
+ MX6Q_PAD_EIM_A23__EIM_ADDR23 0xb0b1
+ MX6Q_PAD_EIM_A22__EIM_ADDR22 0xb0b1
+ MX6Q_PAD_EIM_A21__EIM_ADDR21 0xb0b1
+ MX6Q_PAD_EIM_A20__EIM_ADDR20 0xb0b1
+ MX6Q_PAD_EIM_A19__EIM_ADDR19 0xb0b1
+ MX6Q_PAD_EIM_A18__EIM_ADDR18 0xb0b1
+ MX6Q_PAD_EIM_A17__EIM_ADDR17 0xb0b1
+ MX6Q_PAD_EIM_A16__EIM_ADDR16 0xb0b1
+ MX6Q_PAD_EIM_DA15__EIM_AD15 0xb0b1
+ MX6Q_PAD_EIM_DA14__EIM_AD14 0xb0b1
+ MX6Q_PAD_EIM_DA13__EIM_AD13 0xb0b1
+ MX6Q_PAD_EIM_DA12__EIM_AD12 0xb0b1
+ MX6Q_PAD_EIM_DA11__EIM_AD11 0xb0b1
+ MX6Q_PAD_EIM_DA10__EIM_AD10 0xb0b1
+ MX6Q_PAD_EIM_DA9__EIM_AD09 0xb0b1
+ MX6Q_PAD_EIM_DA8__EIM_AD08 0xb0b1
+ MX6Q_PAD_EIM_DA7__EIM_AD07 0xb0b1
+ MX6Q_PAD_EIM_DA6__EIM_AD06 0xb0b1
+ MX6Q_PAD_EIM_DA5__EIM_AD05 0xb0b1
+ MX6Q_PAD_EIM_DA4__EIM_AD04 0xb0b1
+ MX6Q_PAD_EIM_DA3__EIM_AD03 0xb0b1
+ MX6Q_PAD_EIM_DA2__EIM_AD02 0xb0b1
+ MX6Q_PAD_EIM_DA1__EIM_AD01 0xb0b1
+ MX6Q_PAD_EIM_DA0__EIM_AD00 0xb0b1
+ >;
+ };
+
+ };
};
};
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 5/6] ARM: dts: imx6dl: add pinctrls for WEIM NOR
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (3 preceding siblings ...)
2013-05-24 9:59 ` [PATCH v3 4/6] ARM: dts: imx6q: add pinctrls for WEIM NOR Huang Shijie
@ 2013-05-24 9:59 ` Huang Shijie
[not found] ` <1369389564-13181-6-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 9:59 ` [PATCH v3 6/6] ARM: dts: imx6qdl: enable the " Huang Shijie
5 siblings, 1 reply; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Add two pinctrls for WEIM:
one for the weim nor, another for the chipselect.
Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
arch/arm/boot/dts/imx6dl.dtsi | 60 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/arch/arm/boot/dts/imx6dl.dtsi b/arch/arm/boot/dts/imx6dl.dtsi
index 4b13454..ddc8d61 100644
--- a/arch/arm/boot/dts/imx6dl.dtsi
+++ b/arch/arm/boot/dts/imx6dl.dtsi
@@ -183,6 +183,66 @@
};
};
+ weim {
+ pinctrl_weim_cs_0: weim_norgrp-1 {
+ fsl,pins = <
+ MX6DL_PAD_EIM_CS0__EIM_CS0_B 0xb0b1
+ >;
+ };
+
+ pinctrl_weim_nor_1: weim_norgrp-2 {
+ fsl,pins = <
+ MX6DL_PAD_EIM_OE__EIM_OE_B 0xb0b1
+ MX6DL_PAD_EIM_RW__EIM_RW 0xb0b1
+ MX6DL_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
+
+ /* data */
+ MX6DL_PAD_EIM_D16__EIM_DATA16 0xb0b1
+ MX6DL_PAD_EIM_D17__EIM_DATA17 0xb0b1
+ MX6DL_PAD_EIM_D18__EIM_DATA18 0xb0b1
+ MX6DL_PAD_EIM_D19__EIM_DATA19 0xb0b1
+ MX6DL_PAD_EIM_D20__EIM_DATA20 0xb0b1
+ MX6DL_PAD_EIM_D21__EIM_DATA21 0xb0b1
+ MX6DL_PAD_EIM_D22__EIM_DATA22 0xb0b1
+ MX6DL_PAD_EIM_D23__EIM_DATA23 0xb0b1
+ MX6DL_PAD_EIM_D24__EIM_DATA24 0xb0b1
+ MX6DL_PAD_EIM_D25__EIM_DATA25 0xb0b1
+ MX6DL_PAD_EIM_D26__EIM_DATA26 0xb0b1
+ MX6DL_PAD_EIM_D27__EIM_DATA27 0xb0b1
+ MX6DL_PAD_EIM_D28__EIM_DATA28 0xb0b1
+ MX6DL_PAD_EIM_D29__EIM_DATA29 0xb0b1
+ MX6DL_PAD_EIM_D30__EIM_DATA30 0xb0b1
+ MX6DL_PAD_EIM_D31__EIM_DATA31 0xb0b1
+
+ /* address */
+ MX6DL_PAD_EIM_A23__EIM_ADDR23 0xb0b1
+ MX6DL_PAD_EIM_A22__EIM_ADDR22 0xb0b1
+ MX6DL_PAD_EIM_A21__EIM_ADDR21 0xb0b1
+ MX6DL_PAD_EIM_A20__EIM_ADDR20 0xb0b1
+ MX6DL_PAD_EIM_A19__EIM_ADDR19 0xb0b1
+ MX6DL_PAD_EIM_A18__EIM_ADDR18 0xb0b1
+ MX6DL_PAD_EIM_A17__EIM_ADDR17 0xb0b1
+ MX6DL_PAD_EIM_A16__EIM_ADDR16 0xb0b1
+ MX6DL_PAD_EIM_DA15__EIM_AD15 0xb0b1
+ MX6DL_PAD_EIM_DA14__EIM_AD14 0xb0b1
+ MX6DL_PAD_EIM_DA13__EIM_AD13 0xb0b1
+ MX6DL_PAD_EIM_DA12__EIM_AD12 0xb0b1
+ MX6DL_PAD_EIM_DA11__EIM_AD11 0xb0b1
+ MX6DL_PAD_EIM_DA10__EIM_AD10 0xb0b1
+ MX6DL_PAD_EIM_DA9__EIM_AD09 0xb0b1
+ MX6DL_PAD_EIM_DA8__EIM_AD08 0xb0b1
+ MX6DL_PAD_EIM_DA7__EIM_AD07 0xb0b1
+ MX6DL_PAD_EIM_DA6__EIM_AD06 0xb0b1
+ MX6DL_PAD_EIM_DA5__EIM_AD05 0xb0b1
+ MX6DL_PAD_EIM_DA4__EIM_AD04 0xb0b1
+ MX6DL_PAD_EIM_DA3__EIM_AD03 0xb0b1
+ MX6DL_PAD_EIM_DA2__EIM_AD02 0xb0b1
+ MX6DL_PAD_EIM_DA1__EIM_AD01 0xb0b1
+ MX6DL_PAD_EIM_DA0__EIM_AD00 0xb0b1
+ >;
+ };
+
+ };
};
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v3 6/6] ARM: dts: imx6qdl: enable the WEIM NOR
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
` (4 preceding siblings ...)
2013-05-24 9:59 ` [PATCH v3 5/6] ARM: dts: imx6dl: " Huang Shijie
@ 2013-05-24 9:59 ` Huang Shijie
[not found] ` <1369389564-13181-7-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
5 siblings, 1 reply; 14+ messages in thread
From: Huang Shijie @ 2013-05-24 9:59 UTC (permalink / raw)
To: grant.likely-QSEj5FYQhm4dnm+yROfE0A
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA, Huang Shijie,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Enable the WEIM NOR for imx6q{dl} boards.
For the pin conflict with SPI NOR, its status is set to "disabled".
Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
---
arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
index a4466e6..bb0f185 100644
--- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
@@ -58,3 +58,23 @@
wp-gpios = <&gpio1 13 0>;
status = "okay";
};
+
+&weim {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_weim_nor_1 &pinctrl_weim_cs_0>;
+ #address-cells = <2>;
+ #size-cells = <1>;
+ ranges = <0 0 0x08000000 0x08000000>;
+ status = "disabled"; /* pin conflict with SPI NOR */
+
+ nor@0,0 {
+ compatible = "cfi-flash";
+ reg = <0 0 0x02000000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ bank-width = <2>;
+
+ fsl,weim-cs-timing = <0x00620081 0x00000001 0x1C022000
+ 0x0000C000 0x1404a38e 0x00000000>;
+ };
+};
--
1.7.1
^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: [PATCH v3 5/6] ARM: dts: imx6dl: add pinctrls for WEIM NOR
[not found] ` <1369389564-13181-6-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2013-05-24 17:51 ` Chaiken, Alison
[not found] ` <60BA5429A0E1584BA3633194F6F993B5025754D1-0dz9ie/QGrnnlEkxMdpx1dQH9K4/4qFeAL8bYrjMMd8@public.gmane.org>
0 siblings, 1 reply; 14+ messages in thread
From: Chaiken, Alison @ 2013-05-24 17:51 UTC (permalink / raw)
To: Huang Shijie,
grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Cc: shc_work-JGs/UdohzUI@public.gmane.org,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Huang Shijie, sorry for not catching this earlier, but based on my reading of Table 4-1 of Rev. 1 of IMX6DQRM, I would use the following:
pinctrl_weim_nor_1: weim_norgrp-2 {
fsl,pins = <
[ . . . ]
/* data */
MX6DL_PAD_EIM_D16__EIM_DATA16 0x1b0b0
MX6DL_PAD_EIM_D17__EIM_DATA17 0x1b0b0
MX6DL_PAD_EIM_D18__EIM_DATA18 0x1b0b0
MX6DL_PAD_EIM_D19__EIM_DATA19 0x1b0b0
MX6DL_PAD_EIM_D20__EIM_DATA20 0x1b0b0
MX6DL_PAD_EIM_D21__EIM_DATA21 0x1b0b0
MX6DL_PAD_EIM_D22__EIM_DATA22 0x1b0b0
MX6DL_PAD_EIM_D23__EIM_DATA23 0x1b0b0
MX6DL_PAD_EIM_D24__EIM_DATA24 0x1b0b0
MX6DL_PAD_EIM_D25__EIM_DATA25 0x1b0b0
MX6DL_PAD_EIM_D26__EIM_DATA26 0x1b0b0
MX6DL_PAD_EIM_D27__EIM_DATA27 0x1b0b0
MX6DL_PAD_EIM_D28__EIM_DATA28 0x1b0b0
MX6DL_PAD_EIM_D29__EIM_DATA29 0x1b0b0
MX6DL_PAD_EIM_D30__EIM_DATA30 0x1b0b0
MX6DL_PAD_EIM_D31__EIM_DATA31 0x1b0b0
[ . . . ]
>;
};
In your patch, the address lines are set to 0xb0b1, which is correct, as hysteresis is disabled and SRE is fast for those lines. However, for data lines, hysteresis is enabled and SRE is slow, so the 0x1b0b0 setting is more appropriate.
--
Alison Chaiken
Mentor Embedded Software Division
alison_chaiken-nmGgyN9QBj3QT0dZR+AlfA@public.gmane.org
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 1/6] drivers: bus: add a new driver for WEIM
[not found] ` <1369389564-13181-2-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2013-05-27 6:34 ` Shawn Guo
2013-05-27 7:44 ` Sascha Hauer
1 sibling, 0 replies; 14+ messages in thread
From: Shawn Guo @ 2013-05-27 6:34 UTC (permalink / raw)
To: Huang Shijie
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
On Fri, May 24, 2013 at 05:59:19PM +0800, Huang Shijie wrote:
> +Example for an imx6q-sabreauto board, the NOR flash connected to the WEIM:
> +
> + weim: weim@021b8000 {
> + compatible = "fsl,imx6q-weim";
> + reg = <0x021b8000 0x4000>;
> + clocks = <&clks 196>;
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges = <0 0 0x08000000 0x08000000>;
> +
> + nor@0,0 {
> + compatible = "cfi-flash";
> + reg = <0 0 0x02000000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + bank-width = <2>;
> +
Nit: remove this unneeded blank line.
> + fsl,weim-cs-timing = <0x00620081 0x00000001 0x1C022000
> + 0x0000C000 0x1404a38e 0x00000000>;
Nit: please consistently use lower case for hex value.
Please update patch #6 as well.
Other than that,
Reviewed-by: Shawn Guo <shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> + };
> + };
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 4/6] ARM: dts: imx6q: add pinctrls for WEIM NOR
[not found] ` <1369389564-13181-5-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2013-05-27 6:48 ` Shawn Guo
0 siblings, 0 replies; 14+ messages in thread
From: Shawn Guo @ 2013-05-27 6:48 UTC (permalink / raw)
To: Huang Shijie
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
On Fri, May 24, 2013 at 05:59:22PM +0800, Huang Shijie wrote:
> Add two pinctrls for WEIM:
> one for the weim nor, another for the chipselect.
>
> Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
> arch/arm/boot/dts/imx6q.dtsi | 61 ++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 61 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
> index ed11bcf..7c5bcf4 100644
> --- a/arch/arm/boot/dts/imx6q.dtsi
> +++ b/arch/arm/boot/dts/imx6q.dtsi
> @@ -323,6 +323,67 @@
> >;
> };
> };
> +
> + weim {
> + pinctrl_weim_cs_0: weim_norgrp-1 {
To follow the naming pattern, the ones below are probably better.
pinctrl_weim_cs0_1: weimcs0grp-1
> + fsl,pins = <
> + MX6Q_PAD_EIM_CS0__EIM_CS0_B 0xb0b1
> + >;
Nit: fix the indention please.
> + };
> +
> + pinctrl_weim_nor_1: weim_norgrp-2 {
s/weim_norgrp-2/weimnorgrp-1
> + fsl,pins = <
> + MX6Q_PAD_EIM_OE__EIM_OE_B 0xb0b1
> + MX6Q_PAD_EIM_RW__EIM_RW 0xb0b1
> + MX6Q_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
> +
Nit: Remove this blank line.
> + /* data */
> + MX6Q_PAD_EIM_D16__EIM_DATA16 0xb0b1
> + MX6Q_PAD_EIM_D17__EIM_DATA17 0xb0b1
> + MX6Q_PAD_EIM_D18__EIM_DATA18 0xb0b1
> + MX6Q_PAD_EIM_D19__EIM_DATA19 0xb0b1
> + MX6Q_PAD_EIM_D20__EIM_DATA20 0xb0b1
> + MX6Q_PAD_EIM_D21__EIM_DATA21 0xb0b1
> + MX6Q_PAD_EIM_D22__EIM_DATA22 0xb0b1
> + MX6Q_PAD_EIM_D23__EIM_DATA23 0xb0b1
> + MX6Q_PAD_EIM_D24__EIM_DATA24 0xb0b1
> + MX6Q_PAD_EIM_D25__EIM_DATA25 0xb0b1
> + MX6Q_PAD_EIM_D26__EIM_DATA26 0xb0b1
> + MX6Q_PAD_EIM_D27__EIM_DATA27 0xb0b1
> + MX6Q_PAD_EIM_D28__EIM_DATA28 0xb0b1
> + MX6Q_PAD_EIM_D29__EIM_DATA29 0xb0b1
> + MX6Q_PAD_EIM_D30__EIM_DATA30 0xb0b1
> + MX6Q_PAD_EIM_D31__EIM_DATA31 0xb0b1
> +
Ditto
Above comments apply on the next patch as well.
Shawn
> + /* address */
> + MX6Q_PAD_EIM_A23__EIM_ADDR23 0xb0b1
> + MX6Q_PAD_EIM_A22__EIM_ADDR22 0xb0b1
> + MX6Q_PAD_EIM_A21__EIM_ADDR21 0xb0b1
> + MX6Q_PAD_EIM_A20__EIM_ADDR20 0xb0b1
> + MX6Q_PAD_EIM_A19__EIM_ADDR19 0xb0b1
> + MX6Q_PAD_EIM_A18__EIM_ADDR18 0xb0b1
> + MX6Q_PAD_EIM_A17__EIM_ADDR17 0xb0b1
> + MX6Q_PAD_EIM_A16__EIM_ADDR16 0xb0b1
> + MX6Q_PAD_EIM_DA15__EIM_AD15 0xb0b1
> + MX6Q_PAD_EIM_DA14__EIM_AD14 0xb0b1
> + MX6Q_PAD_EIM_DA13__EIM_AD13 0xb0b1
> + MX6Q_PAD_EIM_DA12__EIM_AD12 0xb0b1
> + MX6Q_PAD_EIM_DA11__EIM_AD11 0xb0b1
> + MX6Q_PAD_EIM_DA10__EIM_AD10 0xb0b1
> + MX6Q_PAD_EIM_DA9__EIM_AD09 0xb0b1
> + MX6Q_PAD_EIM_DA8__EIM_AD08 0xb0b1
> + MX6Q_PAD_EIM_DA7__EIM_AD07 0xb0b1
> + MX6Q_PAD_EIM_DA6__EIM_AD06 0xb0b1
> + MX6Q_PAD_EIM_DA5__EIM_AD05 0xb0b1
> + MX6Q_PAD_EIM_DA4__EIM_AD04 0xb0b1
> + MX6Q_PAD_EIM_DA3__EIM_AD03 0xb0b1
> + MX6Q_PAD_EIM_DA2__EIM_AD02 0xb0b1
> + MX6Q_PAD_EIM_DA1__EIM_AD01 0xb0b1
> + MX6Q_PAD_EIM_DA0__EIM_AD00 0xb0b1
> + >;
> + };
> +
> + };
> };
> };
>
> --
> 1.7.1
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 1/6] drivers: bus: add a new driver for WEIM
[not found] ` <1369389564-13181-2-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-27 6:34 ` Shawn Guo
@ 2013-05-27 7:44 ` Sascha Hauer
[not found] ` <20130527074400.GD32299-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
1 sibling, 1 reply; 14+ messages in thread
From: Sascha Hauer @ 2013-05-27 7:44 UTC (permalink / raw)
To: Huang Shijie
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
On Fri, May 24, 2013 at 05:59:19PM +0800, Huang Shijie wrote:
> The WEIM(Wireless External Interface Module) works like a bus.
> You can attach many different devices on it, such as NOR, onenand.
>
> In the case of i.MX6q-sabreauto, the NOR is connected to WEIM.
>
> This patch also adds the devicetree binding document.
> The driver only works when the devicetree is enabled.
>
> Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
> Documentation/devicetree/bindings/bus/imx-weim.txt | 50 +++++++
> drivers/bus/Kconfig | 9 ++
> drivers/bus/Makefile | 1 +
> drivers/bus/imx-weim.c | 139 ++++++++++++++++++++
> 4 files changed, 199 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/bus/imx-weim.txt
> create mode 100644 drivers/bus/imx-weim.c
>
> diff --git a/Documentation/devicetree/bindings/bus/imx-weim.txt b/Documentation/devicetree/bindings/bus/imx-weim.txt
> new file mode 100644
> index 0000000..e7a2950
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/bus/imx-weim.txt
> @@ -0,0 +1,50 @@
> +Device tree bindings for i.MX Wireless External Interface Module (WEIM)
> +
> +The term "wireless" does not imply that the WEIM is literally an interface
> +without wires. It simply means that this module was originally designed for
> +wireless and mobile applications that use low-power technology.
> +
> +The actual devices are instantiated from the child nodes of a WEIM node.
> +
> +Required properties:
> +
> + - compatible: Should be set to "fsl,imx6q-weim"
> + - reg: A resource specifier for the register space
> + (see the example below)
> + - clocks: the clock, see the example below.
> + - #address-cells: Must be set to 2 to allow memory address translation
> + - #size-cells: Must be set to 1 to allow CS address passing
> + - ranges: Must be set up to reflect the memory layout with four
> + integer values for each chip-select line in use:
> +
> + <cs-number> 0 <physical address of mapping> <size>
> +
> +Timing property for child nodes. It is mandatory, not optional.
> +
> + - fsl,weim-cs-timing: The timing array, contains 6 timing values for the
> + child node. We can get the CS index from the child
> + node's "reg" property. This property contains the values
> + for the registers EIM_CSnGCR1, EIM_CSnGCR2, EIM_CSnRCR1,
> + EIM_CSnRCR2, EIM_CSnWCR1, EIM_CSnWCR2 in this order.
> +
> +Example for an imx6q-sabreauto board, the NOR flash connected to the WEIM:
> +
> + weim: weim@021b8000 {
> + compatible = "fsl,imx6q-weim";
> + reg = <0x021b8000 0x4000>;
> + clocks = <&clks 196>;
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges = <0 0 0x08000000 0x08000000>;
> +
> + nor@0,0 {
> + compatible = "cfi-flash";
> + reg = <0 0 0x02000000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + bank-width = <2>;
> +
> + fsl,weim-cs-timing = <0x00620081 0x00000001 0x1C022000
> + 0x0000C000 0x1404a38e 0x00000000>;
> + };
> + };
> diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig
> index b05ecab..46cd5bb 100644
> --- a/drivers/bus/Kconfig
> +++ b/drivers/bus/Kconfig
> @@ -4,6 +4,15 @@
>
> menu "Bus devices"
>
> +config IMX_WEIM
> + bool "Freescale EIM DRIVER"
> + depends on ARCH_MXC
> + help
> + Driver for i.MX6 WEIM controller.
> + The WEIM(Wireless External Interface Module) works like a bus.
> + You can attach many different devices on it, such as NOR, onenand.
> + But now, we only support the Parallel NOR.
> +
> config MVEBU_MBUS
> bool
> depends on PLAT_ORION
> diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile
> index 3c7b53c..436bbcc 100644
> --- a/drivers/bus/Makefile
> +++ b/drivers/bus/Makefile
> @@ -2,6 +2,7 @@
> # Makefile for the bus drivers.
> #
>
> +obj-$(CONFIG_IMX_WEIM) += imx-weim.o
> obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o
> obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o
>
> diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c
> new file mode 100644
> index 0000000..aef865d
> --- /dev/null
> +++ b/drivers/bus/imx-weim.c
> @@ -0,0 +1,139 @@
> +/*
> + * EIM driver for Freescale's i.MX chips
> + *
> + * Copyright (C) 2013 Freescale Semiconductor, Inc.
> + *
> + * 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/module.h>
> +#include <linux/clk.h>
> +#include <linux/io.h>
> +#include <linux/of_device.h>
> +
> +struct imx_weim {
> + void __iomem *base;
> + struct clk *clk;
> +};
> +
> +static const struct of_device_id weim_id_table[] = {
> + { .compatible = "fsl,imx6q-weim", },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, weim_id_table);
> +
> +#define CS_TIMING_LEN 6
> +#define CS_REG_RANGE 0x18
> +
> +/* Parse and set the timing for this device. */
> +static int
> +weim_timing_setup(struct platform_device *pdev, struct device_node *np)
> +{
> + struct imx_weim *weim = platform_get_drvdata(pdev);
> + u32 value[CS_TIMING_LEN];
> + u32 cs_idx;
> + int ret;
> + int i;
> +
> + /* get the CS index from this child node's "reg" property. */
> + ret = of_property_read_u32(np, "reg", &cs_idx);
> + if (ret)
> + return ret;
> +
> + /* The weim has four chip selects. */
> + if (cs_idx > 3)
> + return -EINVAL;
> +
> + ret = of_property_read_u32_array(np, "fsl,weim-cs-timing",
> + value, CS_TIMING_LEN);
> + if (ret)
> + return ret;
> +
> + /* set the timing for WEIM */
> + for (i = 0; i < CS_TIMING_LEN; i++)
> + writel(value[i], weim->base + cs_idx * CS_REG_RANGE + i * 4);
> + return 0;
> +}
> +
> +static void weim_parse_dt(struct platform_device *pdev)
> +{
> + struct device_node *child;
> +
> + for_each_child_of_node(pdev->dev.of_node, child) {
> + if (!child->name)
> + continue;
> +
> + if (weim_timing_setup(pdev, child)) {
> + dev_err(&pdev->dev, "%s set timing failed.\n",
> + child->full_name);
> + continue;
> + }
Since you know use of_platform_populate you can't skip erroneous devices
anymore, so you have to bail out.
> + }
> +
> + if (of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev) < 0)
> + dev_err(&pdev->dev, "%s fail to create devices.\n",
> + pdev->dev.of_node->full_name);
> +}
> +
> +static int weim_probe(struct platform_device *pdev)
> +{
> + struct imx_weim *weim;
> + struct resource *res;
> + int ret = -EINVAL;
> +
> + weim = devm_kzalloc(&pdev->dev, sizeof(*weim), GFP_KERNEL);
> + if (!weim) {
> + ret = -ENOMEM;
> + goto weim_err;
> + }
> + platform_set_drvdata(pdev, weim);
> +
> + /* get the resource */
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + weim->base = devm_ioremap_resource(&pdev->dev, res);
> + if (IS_ERR(weim->base)) {
> + ret = PTR_ERR(weim->base);
> + goto weim_err;
> + }
> +
> + /* get the clock */
> + weim->clk = devm_clk_get(&pdev->dev, NULL);
> + if (IS_ERR(weim->clk))
> + goto weim_err;
> +
> + ret = clk_prepare_enable(weim->clk);
> + if (ret)
> + goto weim_err;
> +
> + /* parse the device node */
> + weim_parse_dt(pdev);
> +
> + dev_info(&pdev->dev, "WEIM driver registered.\n");
> + return 0;
> +
> +weim_err:
> + return ret;
> +}
> +
> +static int weim_remove(struct platform_device *pdev)
> +{
> + struct imx_weim *weim = platform_get_drvdata(pdev);
> +
> + clk_disable_unprepare(weim->clk);
I'm running out of ideas how to explain this. Just drop this remove
function. You do not allow building this as module. If you did, then
your first job here would be to unregister your child devices. Then
afterwards you could disable the clock. If you just disable the clock
without unregistering your children then all you do is to make the
child devices nonfuntional.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 6/6] ARM: dts: imx6qdl: enable the WEIM NOR
[not found] ` <1369389564-13181-7-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
@ 2013-05-27 7:44 ` Sascha Hauer
0 siblings, 0 replies; 14+ messages in thread
From: Sascha Hauer @ 2013-05-27 7:44 UTC (permalink / raw)
To: Huang Shijie
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
In the subject: s/imx6qdl/imx6qdl-sabreauto/
Sascha
On Fri, May 24, 2013 at 05:59:24PM +0800, Huang Shijie wrote:
> Enable the WEIM NOR for imx6q{dl} boards.
>
> For the pin conflict with SPI NOR, its status is set to "disabled".
>
> Signed-off-by: Huang Shijie <b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> ---
> arch/arm/boot/dts/imx6qdl-sabreauto.dtsi | 20 ++++++++++++++++++++
> 1 files changed, 20 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> index a4466e6..bb0f185 100644
> --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
> @@ -58,3 +58,23 @@
> wp-gpios = <&gpio1 13 0>;
> status = "okay";
> };
> +
> +&weim {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pinctrl_weim_nor_1 &pinctrl_weim_cs_0>;
> + #address-cells = <2>;
> + #size-cells = <1>;
> + ranges = <0 0 0x08000000 0x08000000>;
> + status = "disabled"; /* pin conflict with SPI NOR */
> +
> + nor@0,0 {
> + compatible = "cfi-flash";
> + reg = <0 0 0x02000000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> + bank-width = <2>;
> +
> + fsl,weim-cs-timing = <0x00620081 0x00000001 0x1C022000
> + 0x0000C000 0x1404a38e 0x00000000>;
> + };
> +};
> --
> 1.7.1
>
>
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 5/6] ARM: dts: imx6dl: add pinctrls for WEIM NOR
[not found] ` <60BA5429A0E1584BA3633194F6F993B5025754D1-0dz9ie/QGrnnlEkxMdpx1dQH9K4/4qFeAL8bYrjMMd8@public.gmane.org>
@ 2013-05-28 5:51 ` Huang Shijie
0 siblings, 0 replies; 14+ messages in thread
From: Huang Shijie @ 2013-05-28 5:51 UTC (permalink / raw)
To: Chaiken, Alison
Cc: shc_work-JGs/UdohzUI@public.gmane.org,
s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org,
grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
于 2013年05月25日 01:51, Chaiken, Alison 写道:
> n your patch, the address lines are set to 0xb0b1, which is correct, as hysteresis is disabled and SRE is fast for those lines. However, for data lines, hysteresis is enabled and SRE is slow, so the 0x1b0b0 setting is more appropriate.
0xb0b1 is the legacy value from the BSP code. But i agree that 0x1b0b0
is better.
I will use it in next version.
thanks
Huang Shijie
_______________________________________________
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v3 1/6] drivers: bus: add a new driver for WEIM
[not found] ` <20130527074400.GD32299-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
@ 2013-05-28 6:02 ` Huang Shijie
0 siblings, 0 replies; 14+ messages in thread
From: Huang Shijie @ 2013-05-28 6:02 UTC (permalink / raw)
To: Sascha Hauer
Cc: shc_work-JGs/UdohzUI, devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
rob.herring-bsGFqQB8/DxBDgjK7y7TUQ,
grant.likely-QSEj5FYQhm4dnm+yROfE0A,
Alison_Chaiken-nmGgyN9QBj3QT0dZR+AlfA,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
于 2013年05月27日 15:44, Sascha Hauer 写道:
> I'm running out of ideas how to explain this. Just drop this remove
> function. You do not allow building this as module. If you did, then
ok.
thanks
Huang Shijie
_______________________________________________
devicetree-discuss mailing list
devicetree-discuss@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2013-05-28 6:02 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-24 9:59 [PATCH v3 0/6] ARM: imx6q{dl}: add the WEIM driver Huang Shijie
[not found] ` <1369389564-13181-1-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 9:59 ` [PATCH v3 1/6] drivers: bus: add a new driver for WEIM Huang Shijie
[not found] ` <1369389564-13181-2-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-27 6:34 ` Shawn Guo
2013-05-27 7:44 ` Sascha Hauer
[not found] ` <20130527074400.GD32299-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2013-05-28 6:02 ` Huang Shijie
2013-05-24 9:59 ` [PATCH v3 2/6] ARM: dts: imx6q{dl}: fix the pin conflict between SPI and WEIM Huang Shijie
2013-05-24 9:59 ` [PATCH v3 3/6] ARM: dts: imx6qdl: add more information for WEIM Huang Shijie
2013-05-24 9:59 ` [PATCH v3 4/6] ARM: dts: imx6q: add pinctrls for WEIM NOR Huang Shijie
[not found] ` <1369389564-13181-5-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-27 6:48 ` Shawn Guo
2013-05-24 9:59 ` [PATCH v3 5/6] ARM: dts: imx6dl: " Huang Shijie
[not found] ` <1369389564-13181-6-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-24 17:51 ` Chaiken, Alison
[not found] ` <60BA5429A0E1584BA3633194F6F993B5025754D1-0dz9ie/QGrnnlEkxMdpx1dQH9K4/4qFeAL8bYrjMMd8@public.gmane.org>
2013-05-28 5:51 ` Huang Shijie
2013-05-24 9:59 ` [PATCH v3 6/6] ARM: dts: imx6qdl: enable the " Huang Shijie
[not found] ` <1369389564-13181-7-git-send-email-b32955-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2013-05-27 7:44 ` Sascha Hauer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).