* [PATCH 0/2] mvebu: Openblocks A6 board support
@ 2014-08-23 20:19 Ezequiel Garcia
2014-08-23 20:19 ` [PATCH 1/2] nand: Add Marvell Orion NAND driver Ezequiel Garcia
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-08-23 20:19 UTC (permalink / raw)
To: barebox; +Cc: Thomas Petazzoni
Hello everyone,
This two-piece patchset adds support for Plat'home's Openblocks A6 board [1].
To make it a little more interesting, NAND support (ported from Linux) is
included.
Let's hope we can see USB and SATA soon!
[1] http://openblocks.plathome.com/products/a6/
Ezequiel Garcia (2):
nand: Add Marvell Orion NAND driver
ARM: mvebu: Add Plathome Kirkwood Openblocks A6 board support
arch/arm/boards/Makefile | 1 +
arch/arm/boards/plathome-openblocks-a6/Makefile | 2 +
arch/arm/boards/plathome-openblocks-a6/board.c | 1 +
arch/arm/boards/plathome-openblocks-a6/lowlevel.c | 32 +++++
arch/arm/dts/Makefile | 1 +
arch/arm/dts/kirkwood-openblocks_a6-bb.dts | 13 ++
arch/arm/mach-mvebu/Kconfig | 3 +
drivers/mtd/nand/Kconfig | 7 +
drivers/mtd/nand/Makefile | 1 +
drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++
images/Makefile.mvebu | 11 ++
11 files changed, 234 insertions(+)
create mode 100644 arch/arm/boards/plathome-openblocks-a6/Makefile
create mode 100644 arch/arm/boards/plathome-openblocks-a6/board.c
create mode 100644 arch/arm/boards/plathome-openblocks-a6/lowlevel.c
create mode 100644 arch/arm/dts/kirkwood-openblocks_a6-bb.dts
create mode 100644 drivers/mtd/nand/nand_orion.c
--
2.0.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-23 20:19 [PATCH 0/2] mvebu: Openblocks A6 board support Ezequiel Garcia
@ 2014-08-23 20:19 ` Ezequiel Garcia
2014-08-26 14:09 ` Sebastian Hesselbarth
2014-08-26 14:28 ` Alexander Aring
2014-08-23 20:19 ` [PATCH 2/2] ARM: mvebu: Add Plat'home's Kirkwood Openblocks A6 board support Ezequiel Garcia
` (3 subsequent siblings)
4 siblings, 2 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-08-23 20:19 UTC (permalink / raw)
To: barebox; +Cc: Thomas Petazzoni
This commit adds NAND support for the controller present in Kirkwood SoCs.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/mtd/nand/Kconfig | 7 ++
drivers/mtd/nand/Makefile | 1 +
drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 170 insertions(+)
create mode 100644 drivers/mtd/nand/nand_orion.c
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index 04fe3c8..ccf1f9c 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
Support for NAND flash using GPMC. GPMC is a common memory
interface found on Texas Instrument's OMAP platforms
+config NAND_ORION
+ bool
+ prompt "Orion NAND driver"
+ depends on ARCH_MVEBU
+ help
+ Support for the Orion NAND controller, present in Kirkwood SoCs.
+
config NAND_ATMEL
bool
prompt "Atmel (AT91SAM9xxx) NAND driver"
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
index a1414e1..02dacde 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_MTD_NAND_NOMADIK) += nomadik_nand.o
obj-$(CONFIG_NAND_IMX) += nand_imx.o
obj-$(CONFIG_NAND_IMX_BBM) += nand_imx_bbm.o
obj-$(CONFIG_NAND_OMAP_GPMC) += nand_omap_gpmc.o nand_omap_bch_decoder.o
+obj-$(CONFIG_NAND_ORION) += nand_orion.o
obj-$(CONFIG_NAND_ATMEL) += atmel_nand.o
obj-$(CONFIG_NAND_S3C24XX) += nand_s3c24xx.o
pbl-$(CONFIG_NAND_S3C24XX) += nand_s3c24xx.o
diff --git a/drivers/mtd/nand/nand_orion.c b/drivers/mtd/nand/nand_orion.c
new file mode 100644
index 0000000..9bdd3b4
--- /dev/null
+++ b/drivers/mtd/nand/nand_orion.c
@@ -0,0 +1,162 @@
+/*
+ * (C) Copyright 2014, Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
+ *
+ * Based on Orion NAND driver from Linux (drivers/mtd/nand/orion_nand.c):
+ * Author: Tzachi Perelstein <tzachi@marvell.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 <common.h>
+#include <driver.h>
+#include <malloc.h>
+#include <init.h>
+#include <io.h>
+#include <of_mtd.h>
+#include <errno.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/nand.h>
+#include <linux/clk.h>
+
+struct orion_nand {
+ struct mtd_info mtd;
+ struct nand_chip chip;
+
+ u8 ale; /* address line number connected to ALE */
+ u8 cle; /* address line number connected to CLE */
+};
+
+static void orion_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct orion_nand *priv = chip->priv;
+ u32 offs;
+
+ if (cmd == NAND_CMD_NONE)
+ return;
+
+ if (ctrl & NAND_CLE)
+ offs = (1 << priv->cle);
+ else if (ctrl & NAND_ALE)
+ offs = (1 << priv->ale);
+ else
+ return;
+
+ if (chip->options & NAND_BUSWIDTH_16)
+ offs <<= 1;
+
+ writeb(cmd, chip->IO_ADDR_W + offs);
+}
+
+static void orion_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ void __iomem *io_base = chip->IO_ADDR_R;
+ uint64_t *buf64;
+ int i = 0;
+
+ while (len && (unsigned long)buf & 7) {
+ *buf++ = readb(io_base);
+ len--;
+ }
+ buf64 = (uint64_t *)buf;
+ while (i < len/8) {
+ /*
+ * Since GCC has no proper constraint (PR 43518)
+ * force x variable to r2/r3 registers as ldrd instruction
+ * requires first register to be even.
+ */
+ register uint64_t x asm ("r2");
+
+ asm volatile ("ldrd\t%0, [%1]" : "=&r" (x) : "r" (io_base));
+ buf64[i++] = x;
+ }
+ i *= 8;
+ while (i < len)
+ buf[i++] = readb(io_base);
+}
+
+static int orion_nand_probe(struct device_d *dev)
+{
+ struct device_node *dev_node = dev->device_node;
+ struct orion_nand *priv;
+ struct mtd_info *mtd;
+ struct nand_chip *chip;
+ struct clk *clk;
+ void __iomem *io_base;
+ int width, ret;
+ u32 val = 0;
+
+ priv = xzalloc(sizeof(struct orion_nand));
+ if (!priv) {
+ ret = -ENOMEM;
+ goto no_res;
+ }
+ mtd = &priv->mtd;
+ chip = &priv->chip;
+
+ io_base = dev_request_mem_region(dev, 0);
+
+ if (!of_property_read_u32(dev_node, "cle", &val))
+ priv->cle = (u8)val;
+ else
+ priv->cle = 0;
+
+ if (!of_property_read_u32(dev_node, "ale", &val))
+ priv->ale = (u8)val;
+ else
+ priv->ale = 1;
+
+ if (!of_property_read_u32(dev_node, "bank-width", &val))
+ width = (u8)val * 8;
+ else
+ width = 8;
+
+ if (!of_property_read_u32(dev_node, "chip-delay", &val))
+ chip->chip_delay = (u8)val;
+
+ mtd->parent = dev;
+ mtd->priv = chip;
+ chip->priv = priv;
+ chip->IO_ADDR_R = chip->IO_ADDR_W = io_base;
+ chip->cmd_ctrl = orion_nand_cmd_ctrl;
+ chip->read_buf = orion_nand_read_buf;
+ chip->ecc.mode = NAND_ECC_SOFT;
+
+ WARN(width > 16, "%d bit bus width out of range", width);
+ if (width == 16)
+ chip->options |= NAND_BUSWIDTH_16;
+
+ /* Not all platforms can gate the clock, so this is optional */
+ clk = clk_get(dev, 0);
+ if (!IS_ERR(clk))
+ clk_enable(clk);
+
+ if (nand_scan(mtd, 1)) {
+ ret = -ENXIO;
+ goto no_dev;
+ }
+
+ add_mtd_nand_device(mtd, "orion_nand");
+ return 0;
+no_dev:
+ if (!IS_ERR(clk))
+ clk_disable(clk);
+no_res:
+ free(priv);
+ return ret;
+}
+
+static __maybe_unused struct of_device_id orion_nand_compatible[] = {
+ { .compatible = "marvell,orion-nand", },
+ {},
+};
+
+static struct driver_d orion_nand_driver = {
+ .name = "orion_nand",
+ .probe = orion_nand_probe,
+ .of_compatible = DRV_OF_COMPAT(orion_nand_compatible),
+};
+device_platform_driver(orion_nand_driver);
--
2.0.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 2/2] ARM: mvebu: Add Plat'home's Kirkwood Openblocks A6 board support
2014-08-23 20:19 [PATCH 0/2] mvebu: Openblocks A6 board support Ezequiel Garcia
2014-08-23 20:19 ` [PATCH 1/2] nand: Add Marvell Orion NAND driver Ezequiel Garcia
@ 2014-08-23 20:19 ` Ezequiel Garcia
2014-08-26 14:10 ` Sebastian Hesselbarth
2014-08-26 14:17 ` [PATCH 0/2] mvebu: " Sebastian Hesselbarth
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Ezequiel Garcia @ 2014-08-23 20:19 UTC (permalink / raw)
To: barebox; +Cc: Thomas Petazzoni
This commit adds a new Marvell Kirkwood-based board, by following the currently
supported boards.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/boards/Makefile | 1 +
arch/arm/boards/plathome-openblocks-a6/Makefile | 2 ++
arch/arm/boards/plathome-openblocks-a6/board.c | 1 +
arch/arm/boards/plathome-openblocks-a6/lowlevel.c | 32 +++++++++++++++++++++++
arch/arm/dts/Makefile | 1 +
arch/arm/dts/kirkwood-openblocks_a6-bb.dts | 13 +++++++++
arch/arm/mach-mvebu/Kconfig | 3 +++
images/Makefile.mvebu | 11 ++++++++
8 files changed, 64 insertions(+)
create mode 100644 arch/arm/boards/plathome-openblocks-a6/Makefile
create mode 100644 arch/arm/boards/plathome-openblocks-a6/board.c
create mode 100644 arch/arm/boards/plathome-openblocks-a6/lowlevel.c
create mode 100644 arch/arm/dts/kirkwood-openblocks_a6-bb.dts
diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
index c60da81..122f5cd 100644
--- a/arch/arm/boards/Makefile
+++ b/arch/arm/boards/Makefile
@@ -79,6 +79,7 @@ obj-$(CONFIG_MACH_PCM049) += phytec-phycore-omap4460/
obj-$(CONFIG_MACH_PCM051) += phytec-phycore-am335x/
obj-$(CONFIG_MACH_PHYTEC_PFLA02) += phytec-phyflex-imx6/
obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += plathome-openblocks-ax3/
+obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += plathome-openblocks-a6/
obj-$(CONFIG_MACH_PM9261) += pm9261/
obj-$(CONFIG_MACH_PM9263) += pm9263/
obj-$(CONFIG_MACH_PM9G45) += pm9g45/
diff --git a/arch/arm/boards/plathome-openblocks-a6/Makefile b/arch/arm/boards/plathome-openblocks-a6/Makefile
new file mode 100644
index 0000000..01c7a25
--- /dev/null
+++ b/arch/arm/boards/plathome-openblocks-a6/Makefile
@@ -0,0 +1,2 @@
+obj-y += board.o
+lwl-y += lowlevel.o
diff --git a/arch/arm/boards/plathome-openblocks-a6/board.c b/arch/arm/boards/plathome-openblocks-a6/board.c
new file mode 100644
index 0000000..40a8c17
--- /dev/null
+++ b/arch/arm/boards/plathome-openblocks-a6/board.c
@@ -0,0 +1 @@
+/* empty */
diff --git a/arch/arm/boards/plathome-openblocks-a6/lowlevel.c b/arch/arm/boards/plathome-openblocks-a6/lowlevel.c
new file mode 100644
index 0000000..b37a3d6
--- /dev/null
+++ b/arch/arm/boards/plathome-openblocks-a6/lowlevel.c
@@ -0,0 +1,32 @@
+/*
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <common.h>
+#include <sizes.h>
+#include <asm/barebox-arm.h>
+#include <asm/barebox-arm-head.h>
+#include <mach/lowlevel.h>
+
+extern char __dtb_kirkwood_openblocks_a6_bb_start[];
+
+ENTRY_FUNCTION(start_plathome_openblocks_a6, r0, r1, r2)
+{
+ void *fdt;
+
+ arm_cpu_lowlevel_init();
+
+ fdt = __dtb_kirkwood_openblocks_a6_bb_start -
+ get_runtime_offset();
+
+ mvebu_barebox_entry(fdt);
+}
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 9bff8a0..4b8d58a 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -23,6 +23,7 @@ pbl-dtb-$(CONFIG_MACH_PCM038) += imx27-phytec-phycore-rdk.dtb.o
pbl-dtb-$(CONFIG_MACH_PCM051) += am335x-phytec-phycore.dtb.o
pbl-dtb-$(CONFIG_MACH_PHYTEC_PFLA02) += imx6s-phytec-pbab01.dtb.o imx6dl-phytec-pbab01.dtb.o imx6q-phytec-pbab01.dtb.o
pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o
+pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += kirkwood-openblocks_a6-bb.dtb.o
pbl-dtb-$(CONFIG_MACH_RADXA_ROCK) += rk3188-radxarock.dtb.o
pbl-dtb-$(CONFIG_MACH_REALQ7) += imx6q-dmo-edmqmx6.dtb.o
pbl-dtb-$(CONFIG_MACH_SABRELITE) += imx6q-sabrelite.dtb.o imx6dl-sabrelite.dtb.o
diff --git a/arch/arm/dts/kirkwood-openblocks_a6-bb.dts b/arch/arm/dts/kirkwood-openblocks_a6-bb.dts
new file mode 100644
index 0000000..42bfb07
--- /dev/null
+++ b/arch/arm/dts/kirkwood-openblocks_a6-bb.dts
@@ -0,0 +1,13 @@
+/*
+ * Barebox specific DT overlay for OpenBlocks A6 board
+ */
+
+#include "arm/kirkwood-openblocks_a6.dts"
+
+/ {
+ gpio-leds {
+ led-green {
+ barebox,default-trigger = "heartbeat";
+ };
+ };
+};
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 131f3a6..3270f92 100644
--- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig
@@ -81,6 +81,9 @@ if ARCH_KIRKWOOD
config MACH_GLOBALSCALE_GURUPLUG
bool "Guruplug"
+config MACH_PLATHOME_OPENBLOCKS_A6
+ bool "PlatHome OpenBlocks A6"
+
config MACH_USI_TOPKICK
bool "Topkick"
diff --git a/images/Makefile.mvebu b/images/Makefile.mvebu
index 009807d..5e90855 100644
--- a/images/Makefile.mvebu
+++ b/images/Makefile.mvebu
@@ -72,6 +72,17 @@ image-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += barebox-globalscale-guruplug.img
image-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += barebox-globalscale-guruplug-uart.img
image-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += barebox-globalscale-guruplug-2nd.img
+PLATHOME_OPENBLOCKS_A6_KWBOPTS = ${KWBOPTS} -i $(board)/plathome-openblocks-a6/kwbimage.cfg
+OPTS_start_plathome_openblocks_a6.pblx.kwbimg = $(PLATHOME_OPENBLOCKS_A6_KWBOPTS)
+OPTS_start_plathome_openblocks_a6.pblx.kwbuartimg = -m uart $(PLATHOME_OPENBLOCKS_A6_KWBOPTS)
+FILE_barebox-plathome-openblocks-a6.img = start_plathome_openblocks_a6.pblx.kwbimg
+FILE_barebox-plathome-openblocks-a6-uart.img = start_plathome_openblocks_a6.pblx.kwbuartimg
+FILE_barebox-plathome-openblocks-a6-2nd.img = start_plathome_openblocks_a6.pblx
+pblx-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += start_plathome_openblocks_a6
+image-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += barebox-plathome-openblocks-a6.img
+image-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += barebox-plathome-openblocks-a6-uart.img
+image-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += barebox-plathome-openblocks-a6-2nd.img
+
USI_TOPKICK_KWBOPTS = ${KWBOPTS} -i $(board)/usi-topkick/kwbimage.cfg
OPTS_start_usi_topkick.pblx.kwbimg = $(USI_TOPKICK_KWBOPTS)
OPTS_start_usi_topkick.pblx.kwbuartimg = -m uart $(USI_TOPKICK_KWBOPTS)
--
2.0.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-23 20:19 ` [PATCH 1/2] nand: Add Marvell Orion NAND driver Ezequiel Garcia
@ 2014-08-26 14:09 ` Sebastian Hesselbarth
2014-08-26 16:15 ` Ezequiel Garcia
2014-08-26 14:28 ` Alexander Aring
1 sibling, 1 reply; 14+ messages in thread
From: Sebastian Hesselbarth @ 2014-08-26 14:09 UTC (permalink / raw)
To: Ezequiel Garcia, barebox; +Cc: Thomas Petazzoni
On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
> This commit adds NAND support for the controller present in Kirkwood SoCs.
Ezequiel,
I just did a quick check through all public MVEBU datasheets. It looks
like Kirkwood is really the only SoC with this specific IP while Dove,
Armada 370, and XP have a different one.
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> drivers/mtd/nand/Kconfig | 7 ++
> drivers/mtd/nand/Makefile | 1 +
> drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 170 insertions(+)
> create mode 100644 drivers/mtd/nand/nand_orion.c
>
> diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
> index 04fe3c8..ccf1f9c 100644
> --- a/drivers/mtd/nand/Kconfig
> +++ b/drivers/mtd/nand/Kconfig
> @@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
> Support for NAND flash using GPMC. GPMC is a common memory
> interface found on Texas Instrument's OMAP platforms
>
> +config NAND_ORION
> + bool
> + prompt "Orion NAND driver"
> + depends on ARCH_MVEBU
Therefore, we should limit this to ARCH_KIRKWOOD. Also, we could choose
to call the driver nand_kirkwood.c. OTOH, I am fine with Orion as long
as we find another good name for the other IP. Remember that Dove is
still kind-of-Orion.
FWIW,
Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
I'll give it a try on Guruplug later, too.
> + help
> + Support for the Orion NAND controller, present in Kirkwood SoCs.
> +
> config NAND_ATMEL
> bool
> prompt "Atmel (AT91SAM9xxx) NAND driver"
> diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
> index a1414e1..02dacde 100644
> --- a/drivers/mtd/nand/Makefile
> +++ b/drivers/mtd/nand/Makefile
> @@ -10,6 +10,7 @@ obj-$(CONFIG_MTD_NAND_NOMADIK) += nomadik_nand.o
> obj-$(CONFIG_NAND_IMX) += nand_imx.o
> obj-$(CONFIG_NAND_IMX_BBM) += nand_imx_bbm.o
> obj-$(CONFIG_NAND_OMAP_GPMC) += nand_omap_gpmc.o nand_omap_bch_decoder.o
> +obj-$(CONFIG_NAND_ORION) += nand_orion.o
> obj-$(CONFIG_NAND_ATMEL) += atmel_nand.o
> obj-$(CONFIG_NAND_S3C24XX) += nand_s3c24xx.o
> pbl-$(CONFIG_NAND_S3C24XX) += nand_s3c24xx.o
> diff --git a/drivers/mtd/nand/nand_orion.c b/drivers/mtd/nand/nand_orion.c
> new file mode 100644
> index 0000000..9bdd3b4
> --- /dev/null
> +++ b/drivers/mtd/nand/nand_orion.c
> @@ -0,0 +1,162 @@
> +/*
> + * (C) Copyright 2014, Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> + *
> + * Based on Orion NAND driver from Linux (drivers/mtd/nand/orion_nand.c):
> + * Author: Tzachi Perelstein <tzachi@marvell.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 <common.h>
> +#include <driver.h>
> +#include <malloc.h>
> +#include <init.h>
> +#include <io.h>
> +#include <of_mtd.h>
> +#include <errno.h>
> +#include <linux/mtd/mtd.h>
> +#include <linux/mtd/nand.h>
> +#include <linux/clk.h>
> +
> +struct orion_nand {
> + struct mtd_info mtd;
> + struct nand_chip chip;
> +
> + u8 ale; /* address line number connected to ALE */
> + u8 cle; /* address line number connected to CLE */
> +};
> +
> +static void orion_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
> +{
> + struct nand_chip *chip = mtd->priv;
> + struct orion_nand *priv = chip->priv;
> + u32 offs;
> +
> + if (cmd == NAND_CMD_NONE)
> + return;
> +
> + if (ctrl & NAND_CLE)
> + offs = (1 << priv->cle);
> + else if (ctrl & NAND_ALE)
> + offs = (1 << priv->ale);
> + else
> + return;
> +
> + if (chip->options & NAND_BUSWIDTH_16)
> + offs <<= 1;
> +
> + writeb(cmd, chip->IO_ADDR_W + offs);
> +}
> +
> +static void orion_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
> +{
> + struct nand_chip *chip = mtd->priv;
> + void __iomem *io_base = chip->IO_ADDR_R;
> + uint64_t *buf64;
> + int i = 0;
> +
> + while (len && (unsigned long)buf & 7) {
> + *buf++ = readb(io_base);
> + len--;
> + }
> + buf64 = (uint64_t *)buf;
> + while (i < len/8) {
> + /*
> + * Since GCC has no proper constraint (PR 43518)
> + * force x variable to r2/r3 registers as ldrd instruction
> + * requires first register to be even.
> + */
> + register uint64_t x asm ("r2");
> +
> + asm volatile ("ldrd\t%0, [%1]" : "=&r" (x) : "r" (io_base));
> + buf64[i++] = x;
> + }
> + i *= 8;
> + while (i < len)
> + buf[i++] = readb(io_base);
> +}
> +
> +static int orion_nand_probe(struct device_d *dev)
> +{
> + struct device_node *dev_node = dev->device_node;
> + struct orion_nand *priv;
> + struct mtd_info *mtd;
> + struct nand_chip *chip;
> + struct clk *clk;
> + void __iomem *io_base;
> + int width, ret;
> + u32 val = 0;
> +
> + priv = xzalloc(sizeof(struct orion_nand));
> + if (!priv) {
> + ret = -ENOMEM;
> + goto no_res;
> + }
> + mtd = &priv->mtd;
> + chip = &priv->chip;
> +
> + io_base = dev_request_mem_region(dev, 0);
> +
> + if (!of_property_read_u32(dev_node, "cle", &val))
> + priv->cle = (u8)val;
> + else
> + priv->cle = 0;
> +
> + if (!of_property_read_u32(dev_node, "ale", &val))
> + priv->ale = (u8)val;
> + else
> + priv->ale = 1;
> +
> + if (!of_property_read_u32(dev_node, "bank-width", &val))
> + width = (u8)val * 8;
> + else
> + width = 8;
> +
> + if (!of_property_read_u32(dev_node, "chip-delay", &val))
> + chip->chip_delay = (u8)val;
> +
> + mtd->parent = dev;
> + mtd->priv = chip;
> + chip->priv = priv;
> + chip->IO_ADDR_R = chip->IO_ADDR_W = io_base;
> + chip->cmd_ctrl = orion_nand_cmd_ctrl;
> + chip->read_buf = orion_nand_read_buf;
> + chip->ecc.mode = NAND_ECC_SOFT;
> +
> + WARN(width > 16, "%d bit bus width out of range", width);
> + if (width == 16)
> + chip->options |= NAND_BUSWIDTH_16;
> +
> + /* Not all platforms can gate the clock, so this is optional */
> + clk = clk_get(dev, 0);
> + if (!IS_ERR(clk))
> + clk_enable(clk);
> +
> + if (nand_scan(mtd, 1)) {
> + ret = -ENXIO;
> + goto no_dev;
> + }
> +
> + add_mtd_nand_device(mtd, "orion_nand");
> + return 0;
> +no_dev:
> + if (!IS_ERR(clk))
> + clk_disable(clk);
> +no_res:
> + free(priv);
> + return ret;
> +}
> +
> +static __maybe_unused struct of_device_id orion_nand_compatible[] = {
> + { .compatible = "marvell,orion-nand", },
> + {},
> +};
> +
> +static struct driver_d orion_nand_driver = {
> + .name = "orion_nand",
> + .probe = orion_nand_probe,
> + .of_compatible = DRV_OF_COMPAT(orion_nand_compatible),
> +};
> +device_platform_driver(orion_nand_driver);
>
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/2] ARM: mvebu: Add Plat'home's Kirkwood Openblocks A6 board support
2014-08-23 20:19 ` [PATCH 2/2] ARM: mvebu: Add Plat'home's Kirkwood Openblocks A6 board support Ezequiel Garcia
@ 2014-08-26 14:10 ` Sebastian Hesselbarth
0 siblings, 0 replies; 14+ messages in thread
From: Sebastian Hesselbarth @ 2014-08-26 14:10 UTC (permalink / raw)
To: Ezequiel Garcia, barebox; +Cc: Thomas Petazzoni
On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
> This commit adds a new Marvell Kirkwood-based board, by following the currently
> supported boards.
>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> ---
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/plathome-openblocks-a6/Makefile | 2 ++
> arch/arm/boards/plathome-openblocks-a6/board.c | 1 +
> arch/arm/boards/plathome-openblocks-a6/lowlevel.c | 32 +++++++++++++++++++++++
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/kirkwood-openblocks_a6-bb.dts | 13 +++++++++
> arch/arm/mach-mvebu/Kconfig | 3 +++
> images/Makefile.mvebu | 11 ++++++++
> 8 files changed, 64 insertions(+)
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/Makefile
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/board.c
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/lowlevel.c
> create mode 100644 arch/arm/dts/kirkwood-openblocks_a6-bb.dts
>
> diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile
> index c60da81..122f5cd 100644
> --- a/arch/arm/boards/Makefile
> +++ b/arch/arm/boards/Makefile
> @@ -79,6 +79,7 @@ obj-$(CONFIG_MACH_PCM049) += phytec-phycore-omap4460/
> obj-$(CONFIG_MACH_PCM051) += phytec-phycore-am335x/
> obj-$(CONFIG_MACH_PHYTEC_PFLA02) += phytec-phyflex-imx6/
> obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += plathome-openblocks-ax3/
> +obj-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += plathome-openblocks-a6/
> obj-$(CONFIG_MACH_PM9261) += pm9261/
> obj-$(CONFIG_MACH_PM9263) += pm9263/
> obj-$(CONFIG_MACH_PM9G45) += pm9g45/
> diff --git a/arch/arm/boards/plathome-openblocks-a6/Makefile b/arch/arm/boards/plathome-openblocks-a6/Makefile
> new file mode 100644
> index 0000000..01c7a25
> --- /dev/null
> +++ b/arch/arm/boards/plathome-openblocks-a6/Makefile
> @@ -0,0 +1,2 @@
> +obj-y += board.o
> +lwl-y += lowlevel.o
> diff --git a/arch/arm/boards/plathome-openblocks-a6/board.c b/arch/arm/boards/plathome-openblocks-a6/board.c
> new file mode 100644
> index 0000000..40a8c17
> --- /dev/null
> +++ b/arch/arm/boards/plathome-openblocks-a6/board.c
> @@ -0,0 +1 @@
> +/* empty */
> diff --git a/arch/arm/boards/plathome-openblocks-a6/lowlevel.c b/arch/arm/boards/plathome-openblocks-a6/lowlevel.c
> new file mode 100644
> index 0000000..b37a3d6
> --- /dev/null
> +++ b/arch/arm/boards/plathome-openblocks-a6/lowlevel.c
> @@ -0,0 +1,32 @@
> +/*
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#include <common.h>
> +#include <sizes.h>
> +#include <asm/barebox-arm.h>
> +#include <asm/barebox-arm-head.h>
> +#include <mach/lowlevel.h>
> +
> +extern char __dtb_kirkwood_openblocks_a6_bb_start[];
> +
> +ENTRY_FUNCTION(start_plathome_openblocks_a6, r0, r1, r2)
> +{
> + void *fdt;
> +
> + arm_cpu_lowlevel_init();
> +
> + fdt = __dtb_kirkwood_openblocks_a6_bb_start -
> + get_runtime_offset();
> +
> + mvebu_barebox_entry(fdt);
> +}
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 9bff8a0..4b8d58a 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -23,6 +23,7 @@ pbl-dtb-$(CONFIG_MACH_PCM038) += imx27-phytec-phycore-rdk.dtb.o
> pbl-dtb-$(CONFIG_MACH_PCM051) += am335x-phytec-phycore.dtb.o
> pbl-dtb-$(CONFIG_MACH_PHYTEC_PFLA02) += imx6s-phytec-pbab01.dtb.o imx6dl-phytec-pbab01.dtb.o imx6q-phytec-pbab01.dtb.o
> pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o
> +pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += kirkwood-openblocks_a6-bb.dtb.o
> pbl-dtb-$(CONFIG_MACH_RADXA_ROCK) += rk3188-radxarock.dtb.o
> pbl-dtb-$(CONFIG_MACH_REALQ7) += imx6q-dmo-edmqmx6.dtb.o
> pbl-dtb-$(CONFIG_MACH_SABRELITE) += imx6q-sabrelite.dtb.o imx6dl-sabrelite.dtb.o
> diff --git a/arch/arm/dts/kirkwood-openblocks_a6-bb.dts b/arch/arm/dts/kirkwood-openblocks_a6-bb.dts
> new file mode 100644
> index 0000000..42bfb07
> --- /dev/null
> +++ b/arch/arm/dts/kirkwood-openblocks_a6-bb.dts
> @@ -0,0 +1,13 @@
> +/*
> + * Barebox specific DT overlay for OpenBlocks A6 board
> + */
> +
> +#include "arm/kirkwood-openblocks_a6.dts"
> +
> +/ {
> + gpio-leds {
> + led-green {
> + barebox,default-trigger = "heartbeat";
> + };
> + };
> +};
> diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
> index 131f3a6..3270f92 100644
> --- a/arch/arm/mach-mvebu/Kconfig
> +++ b/arch/arm/mach-mvebu/Kconfig
> @@ -81,6 +81,9 @@ if ARCH_KIRKWOOD
> config MACH_GLOBALSCALE_GURUPLUG
> bool "Guruplug"
>
> +config MACH_PLATHOME_OPENBLOCKS_A6
> + bool "PlatHome OpenBlocks A6"
> +
> config MACH_USI_TOPKICK
> bool "Topkick"
>
> diff --git a/images/Makefile.mvebu b/images/Makefile.mvebu
> index 009807d..5e90855 100644
> --- a/images/Makefile.mvebu
> +++ b/images/Makefile.mvebu
> @@ -72,6 +72,17 @@ image-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += barebox-globalscale-guruplug.img
> image-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += barebox-globalscale-guruplug-uart.img
> image-$(CONFIG_MACH_GLOBALSCALE_GURUPLUG) += barebox-globalscale-guruplug-2nd.img
>
> +PLATHOME_OPENBLOCKS_A6_KWBOPTS = ${KWBOPTS} -i $(board)/plathome-openblocks-a6/kwbimage.cfg
> +OPTS_start_plathome_openblocks_a6.pblx.kwbimg = $(PLATHOME_OPENBLOCKS_A6_KWBOPTS)
> +OPTS_start_plathome_openblocks_a6.pblx.kwbuartimg = -m uart $(PLATHOME_OPENBLOCKS_A6_KWBOPTS)
> +FILE_barebox-plathome-openblocks-a6.img = start_plathome_openblocks_a6.pblx.kwbimg
> +FILE_barebox-plathome-openblocks-a6-uart.img = start_plathome_openblocks_a6.pblx.kwbuartimg
> +FILE_barebox-plathome-openblocks-a6-2nd.img = start_plathome_openblocks_a6.pblx
> +pblx-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += start_plathome_openblocks_a6
> +image-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += barebox-plathome-openblocks-a6.img
> +image-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += barebox-plathome-openblocks-a6-uart.img
> +image-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += barebox-plathome-openblocks-a6-2nd.img
> +
> USI_TOPKICK_KWBOPTS = ${KWBOPTS} -i $(board)/usi-topkick/kwbimage.cfg
> OPTS_start_usi_topkick.pblx.kwbimg = $(USI_TOPKICK_KWBOPTS)
> OPTS_start_usi_topkick.pblx.kwbuartimg = -m uart $(USI_TOPKICK_KWBOPTS)
>
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/2] mvebu: Openblocks A6 board support
2014-08-23 20:19 [PATCH 0/2] mvebu: Openblocks A6 board support Ezequiel Garcia
2014-08-23 20:19 ` [PATCH 1/2] nand: Add Marvell Orion NAND driver Ezequiel Garcia
2014-08-23 20:19 ` [PATCH 2/2] ARM: mvebu: Add Plat'home's Kirkwood Openblocks A6 board support Ezequiel Garcia
@ 2014-08-26 14:17 ` Sebastian Hesselbarth
2014-09-01 9:31 ` Sascha Hauer
2014-09-15 19:33 ` Sebastian Hesselbarth
4 siblings, 0 replies; 14+ messages in thread
From: Sebastian Hesselbarth @ 2014-08-26 14:17 UTC (permalink / raw)
To: Ezequiel Garcia, barebox; +Cc: Thomas Petazzoni
On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
> This two-piece patchset adds support for Plat'home's Openblocks A6 board [1].
> To make it a little more interesting, NAND support (ported from Linux) is
> included.
>
> Let's hope we can see USB and SATA soon!
I have postponed USB(-PHY) until Antoine gets his Chipidea gen-phy
patches through on LKML. When that is done, I plan to add a CI-stub
and PHY drivers for barebox and moving MVEBU USB over to CI in Linux.
I haven't thought about SATA but the controller is AHCI-compatible.
All we need is a stub for the controller, PHY drivers for KW+Dove,
and PHY drivers including SERDES setup for Armada 370/XP. I can have
a look at it as I already took SERDES setup apart for PCIe.
Sebastian
>
> [1] http://openblocks.plathome.com/products/a6/
>
> Ezequiel Garcia (2):
> nand: Add Marvell Orion NAND driver
> ARM: mvebu: Add Plathome Kirkwood Openblocks A6 board support
>
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/plathome-openblocks-a6/Makefile | 2 +
> arch/arm/boards/plathome-openblocks-a6/board.c | 1 +
> arch/arm/boards/plathome-openblocks-a6/lowlevel.c | 32 +++++
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/kirkwood-openblocks_a6-bb.dts | 13 ++
> arch/arm/mach-mvebu/Kconfig | 3 +
> drivers/mtd/nand/Kconfig | 7 +
> drivers/mtd/nand/Makefile | 1 +
> drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++
> images/Makefile.mvebu | 11 ++
> 11 files changed, 234 insertions(+)
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/Makefile
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/board.c
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/lowlevel.c
> create mode 100644 arch/arm/dts/kirkwood-openblocks_a6-bb.dts
> create mode 100644 drivers/mtd/nand/nand_orion.c
>
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-23 20:19 ` [PATCH 1/2] nand: Add Marvell Orion NAND driver Ezequiel Garcia
2014-08-26 14:09 ` Sebastian Hesselbarth
@ 2014-08-26 14:28 ` Alexander Aring
2014-08-26 16:06 ` Ezequiel Garcia
2014-09-01 9:33 ` Sascha Hauer
1 sibling, 2 replies; 14+ messages in thread
From: Alexander Aring @ 2014-08-26 14:28 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
Hi,
On Sat, Aug 23, 2014 at 05:19:22PM -0300, Ezequiel Garcia wrote:
> This commit adds NAND support for the controller present in Kirkwood SoCs.
>
cool! I will test it on my DNS-325 platform, if I find some free time.
Thanks for doing this.
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> drivers/mtd/nand/Kconfig | 7 ++
> drivers/mtd/nand/Makefile | 1 +
> drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 170 insertions(+)
> create mode 100644 drivers/mtd/nand/nand_orion.c
>
> diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
> index 04fe3c8..ccf1f9c 100644
> --- a/drivers/mtd/nand/Kconfig
> +++ b/drivers/mtd/nand/Kconfig
> @@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
> Support for NAND flash using GPMC. GPMC is a common memory
> interface found on Texas Instrument's OMAP platforms
>
> +config NAND_ORION
> + bool
> + prompt "Orion NAND driver"
> + depends on ARCH_MVEBU
> + help
> + Support for the Orion NAND controller, present in Kirkwood SoCs.
> +
> config NAND_ATMEL
> bool
> prompt "Atmel (AT91SAM9xxx) NAND driver"
...
> +
> +static int orion_nand_probe(struct device_d *dev)
> +{
> + struct device_node *dev_node = dev->device_node;
> + struct orion_nand *priv;
> + struct mtd_info *mtd;
> + struct nand_chip *chip;
> + struct clk *clk;
> + void __iomem *io_base;
> + int width, ret;
> + u32 val = 0;
> +
> + priv = xzalloc(sizeof(struct orion_nand));
> + if (!priv) {
> + ret = -ENOMEM;
> + goto no_res;
> + }
checking on null with xzalloc isn't needed, if fails we run into panic.
> + mtd = &priv->mtd;
> + chip = &priv->chip;
> +
> + io_base = dev_request_mem_region(dev, 0);
> +
here we should check the return value. I don't know what's now the
behaviour on dev_request_mem_region if fail returns NULL or ERR_PTR.
There was some discussion on the list.
- Alex
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-26 14:28 ` Alexander Aring
@ 2014-08-26 16:06 ` Ezequiel Garcia
2014-09-01 9:33 ` Sascha Hauer
1 sibling, 0 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-08-26 16:06 UTC (permalink / raw)
To: Alexander Aring; +Cc: Thomas Petazzoni, barebox
On 26 Aug 04:28 PM, Alexander Aring wrote:
> Hi,
>
> On Sat, Aug 23, 2014 at 05:19:22PM -0300, Ezequiel Garcia wrote:
> > This commit adds NAND support for the controller present in Kirkwood SoCs.
> >
>
> cool! I will test it on my DNS-325 platform, if I find some free time.
>
> Thanks for doing this.
>
> > Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> > ---
> > drivers/mtd/nand/Kconfig | 7 ++
> > drivers/mtd/nand/Makefile | 1 +
> > drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 170 insertions(+)
> > create mode 100644 drivers/mtd/nand/nand_orion.c
> >
> > diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
> > index 04fe3c8..ccf1f9c 100644
> > --- a/drivers/mtd/nand/Kconfig
> > +++ b/drivers/mtd/nand/Kconfig
> > @@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
> > Support for NAND flash using GPMC. GPMC is a common memory
> > interface found on Texas Instrument's OMAP platforms
> >
> > +config NAND_ORION
> > + bool
> > + prompt "Orion NAND driver"
> > + depends on ARCH_MVEBU
> > + help
> > + Support for the Orion NAND controller, present in Kirkwood SoCs.
> > +
> > config NAND_ATMEL
> > bool
> > prompt "Atmel (AT91SAM9xxx) NAND driver"
> ...
> > +
> > +static int orion_nand_probe(struct device_d *dev)
> > +{
> > + struct device_node *dev_node = dev->device_node;
> > + struct orion_nand *priv;
> > + struct mtd_info *mtd;
> > + struct nand_chip *chip;
> > + struct clk *clk;
> > + void __iomem *io_base;
> > + int width, ret;
> > + u32 val = 0;
> > +
> > + priv = xzalloc(sizeof(struct orion_nand));
> > + if (!priv) {
> > + ret = -ENOMEM;
> > + goto no_res;
> > + }
>
> checking on null with xzalloc isn't needed, if fails we run into panic.
>
Ah, OK.
> > + mtd = &priv->mtd;
> > + chip = &priv->chip;
> > +
> > + io_base = dev_request_mem_region(dev, 0);
> > +
>
> here we should check the return value. I don't know what's now the
> behaviour on dev_request_mem_region if fail returns NULL or ERR_PTR.
> There was some discussion on the list.
>
OK, I'll take a look.
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-26 14:09 ` Sebastian Hesselbarth
@ 2014-08-26 16:15 ` Ezequiel Garcia
2014-08-26 18:07 ` Sebastian Hesselbarth
2014-08-26 18:36 ` Sebastian Hesselbarth
0 siblings, 2 replies; 14+ messages in thread
From: Ezequiel Garcia @ 2014-08-26 16:15 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
On 26 Aug 04:09 PM, Sebastian Hesselbarth wrote:
> On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
> >This commit adds NAND support for the controller present in Kirkwood SoCs.
>
> Ezequiel,
>
> I just did a quick check through all public MVEBU datasheets. It looks
> like Kirkwood is really the only SoC with this specific IP while Dove,
> Armada 370, and XP have a different one.
>
Indeed. Dove's NAND controller seems to be NFC (aka NFC v1), which is
probably similar to the one in PXA3xx. Armada 370/375/380/XP documents
it as NFC v2. Both versions are similar enough to use the same pxa3xx-nand
driver.
I plan to push support for NFCv2 only in Barebox.
Regarding the so-called Orion driver, grepping Linux it seems the IP is
used in Kirkwood and Orion5x.
> >Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> >---
> > drivers/mtd/nand/Kconfig | 7 ++
> > drivers/mtd/nand/Makefile | 1 +
> > drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 170 insertions(+)
> > create mode 100644 drivers/mtd/nand/nand_orion.c
> >
> >diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
> >index 04fe3c8..ccf1f9c 100644
> >--- a/drivers/mtd/nand/Kconfig
> >+++ b/drivers/mtd/nand/Kconfig
> >@@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
> > Support for NAND flash using GPMC. GPMC is a common memory
> > interface found on Texas Instrument's OMAP platforms
> >
> >+config NAND_ORION
> >+ bool
> >+ prompt "Orion NAND driver"
> >+ depends on ARCH_MVEBU
>
> Therefore, we should limit this to ARCH_KIRKWOOD. Also, we could choose
> to call the driver nand_kirkwood.c. OTOH, I am fine with Orion as long
> as we find another good name for the other IP. Remember that Dove is
> still kind-of-Orion.
>
Sure, I'm fine with naming this nand-kirkwood.c and limit it to ARCH_KIRKWOOD
to avoid confusion.
> FWIW,
>
> Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
>
> I'll give it a try on Guruplug later, too.
>
Good. Any test is very well-received (although this one is almost a
copy-paste from Linux, given it's really simple).
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-26 16:15 ` Ezequiel Garcia
@ 2014-08-26 18:07 ` Sebastian Hesselbarth
2014-08-26 18:36 ` Sebastian Hesselbarth
1 sibling, 0 replies; 14+ messages in thread
From: Sebastian Hesselbarth @ 2014-08-26 18:07 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
On 08/26/2014 06:15 PM, Ezequiel Garcia wrote:
> On 26 Aug 04:09 PM, Sebastian Hesselbarth wrote:
>> On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
>>> This commit adds NAND support for the controller present in Kirkwood SoCs.
>>
>> I just did a quick check through all public MVEBU datasheets. It looks
>> like Kirkwood is really the only SoC with this specific IP while Dove,
>> Armada 370, and XP have a different one.
>>
>
> Indeed. Dove's NAND controller seems to be NFC (aka NFC v1), which is
> probably similar to the one in PXA3xx. Armada 370/375/380/XP documents
> it as NFC v2. Both versions are similar enough to use the same pxa3xx-nand
> driver.
>
> I plan to push support for NFCv2 only in Barebox.
Ok, I'll add NFCv1 differences when I find a way to easily boot barebox
on d{2,3}plug. AFAIKT, both lack UART boot mode switches like Cubox has.
> Regarding the so-called Orion driver, grepping Linux it seems the IP is
> used in Kirkwood and Orion5x.
Ach, silly me, I didn't check Orion5x FS because it is not available
on marvell.com. If it is the same IP, nand_orion.c of course *is* the
correct name. Sorry for the noise.
>>> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
>>> ---
>>> drivers/mtd/nand/Kconfig | 7 ++
>>> drivers/mtd/nand/Makefile | 1 +
>>> drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
>>> 3 files changed, 170 insertions(+)
>>> create mode 100644 drivers/mtd/nand/nand_orion.c
>>>
>>> diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
>>> index 04fe3c8..ccf1f9c 100644
>>> --- a/drivers/mtd/nand/Kconfig
>>> +++ b/drivers/mtd/nand/Kconfig
>>> @@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
>>> Support for NAND flash using GPMC. GPMC is a common memory
>>> interface found on Texas Instrument's OMAP platforms
>>>
>>> +config NAND_ORION
>>> + bool
>>> + prompt "Orion NAND driver"
>>> + depends on ARCH_MVEBU
>>
>> Therefore, we should limit this to ARCH_KIRKWOOD. Also, we could choose
>> to call the driver nand_kirkwood.c. OTOH, I am fine with Orion as long
>> as we find another good name for the other IP. Remember that Dove is
>> still kind-of-Orion.
>>
>
> Sure, I'm fine with naming this nand-kirkwood.c and limit it to ARCH_KIRKWOOD
> to avoid confusion.
nand_orion.c is ok, but still we should limit it to ARCH_KIRKWOOD.
>> FWIW,
>>
>> Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
>>
>> I'll give it a try on Guruplug later, too.
>>
>
> Good. Any test is very well-received (although this one is almost a
> copy-paste from Linux, given it's really simple).
>
Yeah, probably.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-26 16:15 ` Ezequiel Garcia
2014-08-26 18:07 ` Sebastian Hesselbarth
@ 2014-08-26 18:36 ` Sebastian Hesselbarth
1 sibling, 0 replies; 14+ messages in thread
From: Sebastian Hesselbarth @ 2014-08-26 18:36 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
On 08/26/2014 06:15 PM, Ezequiel Garcia wrote:
> On 26 Aug 04:09 PM, Sebastian Hesselbarth wrote:
>> On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
>>> This commit adds NAND support for the controller present in Kirkwood SoCs.
[...]
>> FWIW,
>>
>> Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
>>
>> I'll give it a try on Guruplug later, too.
>>
>
> Good. Any test is very well-received (although this one is almost a
> copy-paste from Linux, given it's really simple).
And
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
on Guruplug.
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/2] mvebu: Openblocks A6 board support
2014-08-23 20:19 [PATCH 0/2] mvebu: Openblocks A6 board support Ezequiel Garcia
` (2 preceding siblings ...)
2014-08-26 14:17 ` [PATCH 0/2] mvebu: " Sebastian Hesselbarth
@ 2014-09-01 9:31 ` Sascha Hauer
2014-09-15 19:33 ` Sebastian Hesselbarth
4 siblings, 0 replies; 14+ messages in thread
From: Sascha Hauer @ 2014-09-01 9:31 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
On Sat, Aug 23, 2014 at 05:19:21PM -0300, Ezequiel Garcia wrote:
> Hello everyone,
>
> This two-piece patchset adds support for Plat'home's Openblocks A6 board [1].
> To make it a little more interesting, NAND support (ported from Linux) is
> included.
>
> Let's hope we can see USB and SATA soon!
>
> [1] http://openblocks.plathome.com/products/a6/
>
> Ezequiel Garcia (2):
> nand: Add Marvell Orion NAND driver
> ARM: mvebu: Add Plathome Kirkwood Openblocks A6 board support
Applied, thanks
Sascha
>
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/plathome-openblocks-a6/Makefile | 2 +
> arch/arm/boards/plathome-openblocks-a6/board.c | 1 +
> arch/arm/boards/plathome-openblocks-a6/lowlevel.c | 32 +++++
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/kirkwood-openblocks_a6-bb.dts | 13 ++
> arch/arm/mach-mvebu/Kconfig | 3 +
> drivers/mtd/nand/Kconfig | 7 +
> drivers/mtd/nand/Makefile | 1 +
> drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++
> images/Makefile.mvebu | 11 ++
> 11 files changed, 234 insertions(+)
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/Makefile
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/board.c
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/lowlevel.c
> create mode 100644 arch/arm/dts/kirkwood-openblocks_a6-bb.dts
> create mode 100644 drivers/mtd/nand/nand_orion.c
>
> --
> 2.0.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 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] nand: Add Marvell Orion NAND driver
2014-08-26 14:28 ` Alexander Aring
2014-08-26 16:06 ` Ezequiel Garcia
@ 2014-09-01 9:33 ` Sascha Hauer
1 sibling, 0 replies; 14+ messages in thread
From: Sascha Hauer @ 2014-09-01 9:33 UTC (permalink / raw)
To: Alexander Aring; +Cc: Thomas Petazzoni, barebox
On Tue, Aug 26, 2014 at 04:28:13PM +0200, Alexander Aring wrote:
> Hi,
>
> On Sat, Aug 23, 2014 at 05:19:22PM -0300, Ezequiel Garcia wrote:
> > This commit adds NAND support for the controller present in Kirkwood SoCs.
> >
>
> cool! I will test it on my DNS-325 platform, if I find some free time.
>
> Thanks for doing this.
>
> > Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> > ---
> > drivers/mtd/nand/Kconfig | 7 ++
> > drivers/mtd/nand/Makefile | 1 +
> > drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 170 insertions(+)
> > create mode 100644 drivers/mtd/nand/nand_orion.c
> >
> > diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
> > index 04fe3c8..ccf1f9c 100644
> > --- a/drivers/mtd/nand/Kconfig
> > +++ b/drivers/mtd/nand/Kconfig
> > @@ -90,6 +90,13 @@ config NAND_OMAP_GPMC
> > Support for NAND flash using GPMC. GPMC is a common memory
> > interface found on Texas Instrument's OMAP platforms
> >
> > +config NAND_ORION
> > + bool
> > + prompt "Orion NAND driver"
> > + depends on ARCH_MVEBU
> > + help
> > + Support for the Orion NAND controller, present in Kirkwood SoCs.
> > +
> > config NAND_ATMEL
> > bool
> > prompt "Atmel (AT91SAM9xxx) NAND driver"
> ...
> > +
> > +static int orion_nand_probe(struct device_d *dev)
> > +{
> > + struct device_node *dev_node = dev->device_node;
> > + struct orion_nand *priv;
> > + struct mtd_info *mtd;
> > + struct nand_chip *chip;
> > + struct clk *clk;
> > + void __iomem *io_base;
> > + int width, ret;
> > + u32 val = 0;
> > +
> > + priv = xzalloc(sizeof(struct orion_nand));
> > + if (!priv) {
> > + ret = -ENOMEM;
> > + goto no_res;
> > + }
>
> checking on null with xzalloc isn't needed, if fails we run into panic.
removed the check while applying.
>
> > + mtd = &priv->mtd;
> > + chip = &priv->chip;
> > +
> > + io_base = dev_request_mem_region(dev, 0);
> > +
>
> here we should check the return value. I don't know what's now the
> behaviour on dev_request_mem_region if fail returns NULL or ERR_PTR.
> There was some discussion on the list.
It still returns NULL. I have a series converting it to return ERR_PTR,
but this isn't mainlined yet. I'll have to rebase it on current master.
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 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/2] mvebu: Openblocks A6 board support
2014-08-23 20:19 [PATCH 0/2] mvebu: Openblocks A6 board support Ezequiel Garcia
` (3 preceding siblings ...)
2014-09-01 9:31 ` Sascha Hauer
@ 2014-09-15 19:33 ` Sebastian Hesselbarth
4 siblings, 0 replies; 14+ messages in thread
From: Sebastian Hesselbarth @ 2014-09-15 19:33 UTC (permalink / raw)
To: Ezequiel Garcia, barebox; +Cc: Thomas Petazzoni
On 08/23/2014 10:19 PM, Ezequiel Garcia wrote:
> This two-piece patchset adds support for Plat'home's Openblocks A6 board [1].
> To make it a little more interesting, NAND support (ported from Linux) is
> included.
>
> Let's hope we can see USB and SATA soon!
>
> [1] http://openblocks.plathome.com/products/a6/
>
> Ezequiel Garcia (2):
> nand: Add Marvell Orion NAND driver
> ARM: mvebu: Add Plathome Kirkwood Openblocks A6 board support
>
> arch/arm/boards/Makefile | 1 +
> arch/arm/boards/plathome-openblocks-a6/Makefile | 2 +
> arch/arm/boards/plathome-openblocks-a6/board.c | 1 +
> arch/arm/boards/plathome-openblocks-a6/lowlevel.c | 32 +++++
Ezequiel,
this patch set is missing
arch/arm/boards/plathome-openblocks-a6/kwbimage.cfg
Can you please prepare a patch adding the missing kwbimage.cfg?
Sebastian
> arch/arm/dts/Makefile | 1 +
> arch/arm/dts/kirkwood-openblocks_a6-bb.dts | 13 ++
> arch/arm/mach-mvebu/Kconfig | 3 +
> drivers/mtd/nand/Kconfig | 7 +
> drivers/mtd/nand/Makefile | 1 +
> drivers/mtd/nand/nand_orion.c | 162 ++++++++++++++++++++++
> images/Makefile.mvebu | 11 ++
> 11 files changed, 234 insertions(+)
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/Makefile
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/board.c
> create mode 100644 arch/arm/boards/plathome-openblocks-a6/lowlevel.c
> create mode 100644 arch/arm/dts/kirkwood-openblocks_a6-bb.dts
> create mode 100644 drivers/mtd/nand/nand_orion.c
>
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-09-15 19:34 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-23 20:19 [PATCH 0/2] mvebu: Openblocks A6 board support Ezequiel Garcia
2014-08-23 20:19 ` [PATCH 1/2] nand: Add Marvell Orion NAND driver Ezequiel Garcia
2014-08-26 14:09 ` Sebastian Hesselbarth
2014-08-26 16:15 ` Ezequiel Garcia
2014-08-26 18:07 ` Sebastian Hesselbarth
2014-08-26 18:36 ` Sebastian Hesselbarth
2014-08-26 14:28 ` Alexander Aring
2014-08-26 16:06 ` Ezequiel Garcia
2014-09-01 9:33 ` Sascha Hauer
2014-08-23 20:19 ` [PATCH 2/2] ARM: mvebu: Add Plat'home's Kirkwood Openblocks A6 board support Ezequiel Garcia
2014-08-26 14:10 ` Sebastian Hesselbarth
2014-08-26 14:17 ` [PATCH 0/2] mvebu: " Sebastian Hesselbarth
2014-09-01 9:31 ` Sascha Hauer
2014-09-15 19:33 ` Sebastian Hesselbarth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox