All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V2 1/6] nand: brcm: add BCM6368 support
Date: Wed, 28 Aug 2019 15:07:16 +0200	[thread overview]
Message-ID: <b912ed07-641b-8fb9-6655-5c62c792ae34@gmail.com> (raw)
In-Reply-To: <20190828114418.16452-2-noltari@gmail.com>



Am 28.08.19 um 13:44 schrieb Álvaro Fernández Rojas:
> This adds support for BCM6368, BCM6328, BCM6362 and BCM63268 SoCs.
> 
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
> ---
>  v2: no changes
> 
>  drivers/mtd/nand/raw/Kconfig                 |   6 +
>  drivers/mtd/nand/raw/brcmnand/Makefile       |   1 +
>  drivers/mtd/nand/raw/brcmnand/bcm6368_nand.c | 122 +++++++++++++++++++
>  3 files changed, 129 insertions(+)
>  create mode 100644 drivers/mtd/nand/raw/brcmnand/bcm6368_nand.c

Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

nits below

> 
> diff --git a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig
> index a129f44869..2000826c79 100644
> --- a/drivers/mtd/nand/raw/Kconfig
> +++ b/drivers/mtd/nand/raw/Kconfig
> @@ -72,6 +72,12 @@ config NAND_BRCMNAND
>  	  Enable the driver for NAND flash on platforms using a Broadcom NAND
>  	  controller.
>  
> +config NAND_BRCMNAND_6368
> +	bool "Support Broadcom NAND controller on bcm6368"
> +	depends on NAND_BRCMNAND && ARCH_BMIPS
> +	help
> +	  Enable support for broadcom nand driver on bcm6368.
> +
>  config NAND_BRCMNAND_6838
>         bool "Support Broadcom NAND controller on bcm6838"
>         depends on NAND_BRCMNAND && ARCH_BMIPS && SOC_BMIPS_BCM6838
> diff --git a/drivers/mtd/nand/raw/brcmnand/Makefile b/drivers/mtd/nand/raw/brcmnand/Makefile
> index a2363cc80e..7e70b859dc 100644
> --- a/drivers/mtd/nand/raw/brcmnand/Makefile
> +++ b/drivers/mtd/nand/raw/brcmnand/Makefile
> @@ -1,5 +1,6 @@
>  # SPDX-License-Identifier: GPL-2.0+
>  
> +obj-$(CONFIG_NAND_BRCMNAND_6368) += bcm6368_nand.o
>  obj-$(CONFIG_NAND_BRCMNAND_63158) += bcm63158_nand.o
>  obj-$(CONFIG_NAND_BRCMNAND_6838) += bcm6838_nand.o
>  obj-$(CONFIG_NAND_BRCMNAND_6858) += bcm6858_nand.o
> diff --git a/drivers/mtd/nand/raw/brcmnand/bcm6368_nand.c b/drivers/mtd/nand/raw/brcmnand/bcm6368_nand.c
> new file mode 100644
> index 0000000000..1768d3945f
> --- /dev/null
> +++ b/drivers/mtd/nand/raw/brcmnand/bcm6368_nand.c
> @@ -0,0 +1,122 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <memalign.h>
> +#include <nand.h>
> +#include <linux/errno.h>
> +#include <linux/io.h>
> +#include <linux/ioport.h>
> +#include <dm.h>
> +
> +#include "brcmnand.h"
> +
> +struct bcm6368_nand_soc {
> +	struct brcmnand_soc soc;
> +	void __iomem *base;
> +};
> +
> +#define BCM6368_NAND_INT		0x00
> +#define  BCM6368_NAND_STATUS_SHIFT	0
> +#define  BCM6368_NAND_STATUS_MASK	(0xfff << BCM6368_NAND_STATUS_SHIFT)
> +#define  BCM6368_NAND_ENABLE_SHIFT	16
> +#define  BCM6368_NAND_ENABLE_MASK	(0xffff << BCM6368_NAND_ENABLE_SHIFT)
> +
> +enum {
> +	BCM6368_NP_READ		= BIT(0),
> +	BCM6368_BLOCK_ERASE	= BIT(1),
> +	BCM6368_COPY_BACK	= BIT(2),
> +	BCM6368_PAGE_PGM	= BIT(3),
> +	BCM6368_CTRL_READY	= BIT(4),
> +	BCM6368_DEV_RBPIN	= BIT(5),
> +	BCM6368_ECC_ERR_UNC	= BIT(6),
> +	BCM6368_ECC_ERR_CORR	= BIT(7),
> +};
> +
> +static bool bcm6368_nand_intc_ack(struct brcmnand_soc *soc)
> +{
> +	struct bcm6368_nand_soc *priv =
> +			container_of(soc, struct bcm6368_nand_soc, soc);

because you have this multiple times, maybe it makes sense to add something like:

#define soc_to_priv(_soc) container_of(_soc, struct bcm6368_nand_soc, soc)

> +	void __iomem *mmio = priv->base + BCM6368_NAND_INT;
> +	u32 val = brcmnand_readl(mmio);
> +
> +	if (val & (BCM6368_CTRL_READY << BCM6368_NAND_STATUS_SHIFT)) {
> +		/* Ack interrupt */
> +		val &= ~BCM6368_NAND_STATUS_MASK;
> +		val |= BCM6368_CTRL_READY << BCM6368_NAND_STATUS_SHIFT;
> +		brcmnand_writel(val, mmio);
> +		return true;
> +	}
> +
> +	return false;
> +}
> +
> +static void bcm6368_nand_intc_set(struct brcmnand_soc *soc, bool en)
> +{
> +	struct bcm6368_nand_soc *priv =
> +			container_of(soc, struct bcm6368_nand_soc, soc);
> +	void __iomem *mmio = priv->base + BCM6368_NAND_INT;
> +	u32 val = brcmnand_readl(mmio);
> +
> +	/* Don't ack any interrupts */
> +	val &= ~BCM6368_NAND_STATUS_MASK;
> +
> +	if (en)
> +		val |= BCM6368_CTRL_READY << BCM6368_NAND_ENABLE_SHIFT;
> +	else
> +		val &= ~(BCM6368_CTRL_READY << BCM6368_NAND_ENABLE_SHIFT);
> +
> +	brcmnand_writel(val, mmio);
> +}
> +
> +static int bcm6368_nand_probe(struct udevice *dev)
> +{
> +	struct udevice *pdev = dev;
> +	struct bcm6368_nand_soc *priv = dev_get_priv(dev);
> +	struct brcmnand_soc *soc;
> +	struct resource res;
> +
> +	soc = &priv->soc;
> +
> +	dev_read_resource_byname(pdev, "nand-int-base", &res);
> +	priv->base = ioremap(res.start, resource_size(&res));

we recently got support for dev_remap_addr_name(). Maybe this is useful here.

> +	if (IS_ERR(priv->base))
> +		return PTR_ERR(priv->base);
> +
> +	soc->ctlrdy_ack = bcm6368_nand_intc_ack;
> +	soc->ctlrdy_set_enabled = bcm6368_nand_intc_set;
> +
> +	/* Disable and ack all interrupts  */
> +	brcmnand_writel(0, priv->base + BCM6368_NAND_INT);
> +	brcmnand_writel(BCM6368_NAND_STATUS_MASK,
> +			priv->base + BCM6368_NAND_INT);
> +
> +	return brcmnand_probe(pdev, soc);
> +}
> +
> +static const struct udevice_id bcm6368_nand_dt_ids[] = {
> +	{
> +		.compatible = "brcm,nand-bcm6368",
> +	},
> +	{ /* sentinel */ }
> +};
> +
> +U_BOOT_DRIVER(bcm6368_nand) = {
> +	.name = "bcm6368-nand",
> +	.id = UCLASS_MTD,
> +	.of_match = bcm6368_nand_dt_ids,
> +	.probe = bcm6368_nand_probe,
> +	.priv_auto_alloc_size = sizeof(struct bcm6368_nand_soc),
> +};
> +
> +void board_nand_init(void)
> +{
> +	struct udevice *dev;
> +	int ret;
> +
> +	ret = uclass_get_device_by_driver(UCLASS_MTD,
> +					  DM_GET_DRIVER(bcm6368_nand), &dev);
> +	if (ret && ret != -ENODEV)
> +		pr_err("Failed to initialize %s. (error %d)\n", dev->name,
> +		       ret);
> +}
> 

-- 
- Daniel

  reply	other threads:[~2019-08-28 13:07 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-13 19:19 [U-Boot] [PATCH 0/6] bmips: add brcmnand support Álvaro Fernández Rojas
2019-08-13 19:19 ` [U-Boot] [PATCH 1/6] nand: brcm: add BCM6368 support Álvaro Fernández Rojas
2019-08-14 13:18   ` Daniel Schwierzeck
2019-08-13 19:19 ` [U-Boot] [PATCH 2/6] bmips: bcm6368: add support for brcmnand Álvaro Fernández Rojas
2019-08-13 19:19 ` [U-Boot] [PATCH 3/6] bmips: bcm6328: " Álvaro Fernández Rojas
2019-08-13 19:19 ` [U-Boot] [PATCH 4/6] bmips: bcm6362: " Álvaro Fernández Rojas
2019-08-13 19:19 ` [U-Boot] [PATCH 5/6] bmips: bcm63268: " Álvaro Fernández Rojas
2019-08-14 13:23   ` Daniel Schwierzeck
2019-08-22  9:09     ` Álvaro Fernández Rojas
2019-08-13 19:19 ` [U-Boot] [PATCH 6/6] bmips: enable vr-3032u nand support Álvaro Fernández Rojas
2019-08-28 11:44 ` [U-Boot] [PATCH V2 0/6] bmips: add brcmnand support Álvaro Fernández Rojas
2019-08-28 11:44   ` [U-Boot] [PATCH V2 1/6] nand: brcm: add BCM6368 support Álvaro Fernández Rojas
2019-08-28 13:07     ` Daniel Schwierzeck [this message]
2019-08-28 11:44   ` [U-Boot] [PATCH V2 2/6] bmips: bcm6368: add support for brcmnand Álvaro Fernández Rojas
2019-08-28 11:44   ` [U-Boot] [PATCH V2 3/6] bmips: bcm6328: " Álvaro Fernández Rojas
2019-08-28 11:44   ` [U-Boot] [PATCH V2 4/6] bmips: bcm6362: " Álvaro Fernández Rojas
2019-08-28 11:44   ` [U-Boot] [PATCH V2 5/6] bmips: bcm63268: " Álvaro Fernández Rojas
2019-08-28 11:44   ` [U-Boot] [PATCH 6/6] bmips: enable vr-3032u nand support Álvaro Fernández Rojas
2019-08-28 17:12   ` [U-Boot] [PATCH V3 0/6] bmips: add brcmnand support Álvaro Fernández Rojas
2019-08-28 17:12     ` [U-Boot] [PATCH V3 1/6] nand: brcm: add BCM6368 support Álvaro Fernández Rojas
2019-08-28 17:12     ` [U-Boot] [PATCH V3 2/6] bmips: bcm6368: add support for brcmnand Álvaro Fernández Rojas
2019-08-28 17:12     ` [U-Boot] [PATCH V3 3/6] bmips: bcm6328: " Álvaro Fernández Rojas
2019-08-28 17:12     ` [U-Boot] [PATCH V3 4/6] bmips: bcm6362: " Álvaro Fernández Rojas
2019-08-28 17:12     ` [U-Boot] [PATCH V3 5/6] bmips: bcm63268: " Álvaro Fernández Rojas
2019-08-28 17:12     ` [U-Boot] [PATCH V3 6/6] bmips: enable vr-3032u nand support Álvaro Fernández Rojas
2019-10-18 11:05     ` [U-Boot] [PATCH V3 0/6] bmips: add brcmnand support Daniel Schwierzeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b912ed07-641b-8fb9-6655-5c62c792ae34@gmail.com \
    --to=daniel.schwierzeck@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.