All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Cercueil <paul@crapouillou.net>
To: Boris Brezillon <bbrezillon@kernel.org>
Cc: David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Marek Vasut <marek.vasut@gmail.com>,
	Richard Weinberger <richard@nod.at>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Harvey Hunt <harveyhuntnexus@gmail.com>,
	Mathieu Malaterre <malat@debian.org>,
	linux-mtd@lists.infradead.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 4/9] mtd: rawnand: jz4780: Add support for the JZ4740
Date: Sun, 03 Feb 2019 10:56:53 -0300	[thread overview]
Message-ID: <1549202213.1950.1@crapouillou.net> (raw)
In-Reply-To: <20190203083151.4fc29c5b@bbrezillon>



Le dim. 3 févr. 2019 à 4:31, Boris Brezillon <bbrezillon@kernel.org> 
a écrit :
> On Sat,  2 Feb 2019 20:19:21 -0300
> Paul Cercueil <paul@crapouillou.net> wrote:
> 
>>  Add support for probing the jz4780-nand driver on the JZ4740 SoC 
>> from
>>  Ingenic.
>> 
>>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  ---
>> 
>>  Changes:
>> 
>>  v2: - Add support for the JZ4740 and not the JZ4725B: they behave 
>> the
>>        same, and JZ4740 is fully upstream while JZ4725B is not. The
>>        JZ4725B devicetree will then simply use the 
>> "ingenic,jz4740-nand"
>>        compatible string.
>>      - Fix the number of bytes for the ECC when the ECC strength is 
>> 4.
>>        This is needed for the JZ4740, which uses Reed-Solomon 
>> instead of
>>        BCH.
>> 
>>   drivers/mtd/nand/raw/ingenic/jz4780_nand.c | 48 
>> +++++++++++++++++-----
> 
> If we're going to make the driver compatible with jz4740 and jz4725b
> maybe we should rename the source files jz47xx_{nand,bch}.{c,h}.

I don't know about that. Adding support for new hardware isn't a good 
reason to
rename the driver, or so I've been told around here, as you then make 
it harder
to review the git history of the driver.

>>   1 file changed, 37 insertions(+), 11 deletions(-)
>> 
>>  diff --git a/drivers/mtd/nand/raw/ingenic/jz4780_nand.c 
>> b/drivers/mtd/nand/raw/ingenic/jz4780_nand.c
>>  index 7f55358b860f..c0855fef7735 100644
>>  --- a/drivers/mtd/nand/raw/ingenic/jz4780_nand.c
>>  +++ b/drivers/mtd/nand/raw/ingenic/jz4780_nand.c
>>  @@ -13,6 +13,7 @@
>>   #include <linux/module.h>
>>   #include <linux/of.h>
>>   #include <linux/of_address.h>
>>  +#include <linux/of_device.h>
>>   #include <linux/gpio/consumer.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/slab.h>
>>  @@ -26,13 +27,15 @@
>> 
>>   #define DRV_NAME	"jz4780-nand"
>> 
>>  -#define OFFSET_DATA	0x00000000
>>  -#define OFFSET_CMD	0x00400000
>>  -#define OFFSET_ADDR	0x00800000
>>  -
>>   /* Command delay when there is no R/B pin. */
>>   #define RB_DELAY_US	100
>> 
>>  +struct jz_soc_info {
>>  +	unsigned long data_offset;
>>  +	unsigned long addr_offset;
>>  +	unsigned long cmd_offset;
>>  +};
>>  +
>>   struct jz4780_nand_cs {
>>   	unsigned int bank;
>>   	void __iomem *base;
>>  @@ -40,6 +43,7 @@ struct jz4780_nand_cs {
>> 
>>   struct jz4780_nand_controller {
>>   	struct device *dev;
>>  +	const struct jz_soc_info *soc_info;
>>   	struct jz4780_bch *bch;
>>   	struct nand_controller controller;
>>   	unsigned int num_banks;
>>  @@ -101,9 +105,9 @@ static void jz4780_nand_cmd_ctrl(struct 
>> nand_chip *chip, int cmd,
>>   		return;
>> 
>>   	if (ctrl & NAND_ALE)
>>  -		writeb(cmd, cs->base + OFFSET_ADDR);
>>  +		writeb(cmd, cs->base + nfc->soc_info->addr_offset);
>>   	else if (ctrl & NAND_CLE)
>>  -		writeb(cmd, cs->base + OFFSET_CMD);
>>  +		writeb(cmd, cs->base + nfc->soc_info->cmd_offset);
>>   }
>> 
>>   static int jz4780_nand_dev_ready(struct nand_chip *chip)
>>  @@ -161,8 +165,13 @@ static int jz4780_nand_attach_chip(struct 
>> nand_chip *chip)
>>   	struct jz4780_nand_controller *nfc = 
>> to_jz4780_nand_controller(chip->controller);
>>   	int eccbytes;
>> 
>>  -	chip->ecc.bytes = fls((1 + 8) * chip->ecc.size)	*
>>  -				(chip->ecc.strength / 8);
>>  +	if (chip->ecc.strength == 4) {
>>  +		/* JZ4740 uses 9 bytes of ECC to correct maximum 4 errors */
>>  +		chip->ecc.bytes = 9;
>>  +	} else {
>>  +		chip->ecc.bytes = fls((1 + 8) * chip->ecc.size)	*
>>  +				  (chip->ecc.strength / 8);
>>  +	}
>> 
>>   	switch (chip->ecc.mode) {
>>   	case NAND_ECC_HW:
>>  @@ -272,8 +281,8 @@ static int jz4780_nand_init_chip(struct 
>> platform_device *pdev,
>>   		return -ENOMEM;
>>   	mtd->dev.parent = dev;
>> 
>>  -	chip->legacy.IO_ADDR_R = cs->base + OFFSET_DATA;
>>  -	chip->legacy.IO_ADDR_W = cs->base + OFFSET_DATA;
>>  +	chip->legacy.IO_ADDR_R = cs->base + nfc->soc_info->data_offset;
>>  +	chip->legacy.IO_ADDR_W = cs->base + nfc->soc_info->data_offset;
>>   	chip->legacy.chip_delay = RB_DELAY_US;
>>   	chip->options = NAND_NO_SUBPAGE_WRITE;
>>   	chip->legacy.select_chip = jz4780_nand_select_chip;
>>  @@ -353,6 +362,10 @@ static int jz4780_nand_probe(struct 
>> platform_device *pdev)
>>   	if (!nfc)
>>   		return -ENOMEM;
>> 
>>  +	nfc->soc_info = device_get_match_data(dev);
>>  +	if (!nfc->soc_info)
>>  +		return -EINVAL;
>>  +
>>   	/*
>>   	 * Check for BCH HW before we call nand_scan_ident, to prevent us 
>> from
>>   	 * having to call it again if the BCH driver returns 
>> -EPROBE_DEFER.
>>  @@ -390,8 +403,21 @@ static int jz4780_nand_remove(struct 
>> platform_device *pdev)
>>   	return 0;
>>   }
>> 
>>  +static const struct jz_soc_info jz4740_soc_info = {
>>  +	.data_offset = 0x00000000,
>>  +	.cmd_offset  = 0x00008000,
>>  +	.addr_offset = 0x00010000,
>>  +};
>>  +
>>  +static const struct jz_soc_info jz4780_soc_info = {
>>  +	.data_offset = 0x00000000,
>>  +	.cmd_offset  = 0x00400000,
>>  +	.addr_offset = 0x00800000,
>>  +};
>>  +
>>   static const struct of_device_id jz4780_nand_dt_match[] = {
>>  -	{ .compatible = "ingenic,jz4780-nand" },
>>  +	{ .compatible = "ingenic,jz4740-nand", .data = &jz4740_soc_info },
>>  +	{ .compatible = "ingenic,jz4780-nand",  .data = &jz4780_soc_info  
>> },
>>   	{},
>>   };
>>   MODULE_DEVICE_TABLE(of, jz4780_nand_dt_match);
> 


WARNING: multiple messages have this Message-ID (diff)
From: Paul Cercueil <paul@crapouillou.net>
To: Boris Brezillon <bbrezillon@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
	devicetree@vger.kernel.org, Mathieu Malaterre <malat@debian.org>,
	Richard Weinberger <richard@nod.at>,
	linux-kernel@vger.kernel.org, Marek Vasut <marek.vasut@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	linux-mtd@lists.infradead.org,
	Harvey Hunt <harveyhuntnexus@gmail.com>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Brian Norris <computersforpeace@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>
Subject: Re: [PATCH v2 4/9] mtd: rawnand: jz4780: Add support for the JZ4740
Date: Sun, 03 Feb 2019 10:56:53 -0300	[thread overview]
Message-ID: <1549202213.1950.1@crapouillou.net> (raw)
In-Reply-To: <20190203083151.4fc29c5b@bbrezillon>



Le dim. 3 févr. 2019 à 4:31, Boris Brezillon <bbrezillon@kernel.org> 
a écrit :
> On Sat,  2 Feb 2019 20:19:21 -0300
> Paul Cercueil <paul@crapouillou.net> wrote:
> 
>>  Add support for probing the jz4780-nand driver on the JZ4740 SoC 
>> from
>>  Ingenic.
>> 
>>  Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  ---
>> 
>>  Changes:
>> 
>>  v2: - Add support for the JZ4740 and not the JZ4725B: they behave 
>> the
>>        same, and JZ4740 is fully upstream while JZ4725B is not. The
>>        JZ4725B devicetree will then simply use the 
>> "ingenic,jz4740-nand"
>>        compatible string.
>>      - Fix the number of bytes for the ECC when the ECC strength is 
>> 4.
>>        This is needed for the JZ4740, which uses Reed-Solomon 
>> instead of
>>        BCH.
>> 
>>   drivers/mtd/nand/raw/ingenic/jz4780_nand.c | 48 
>> +++++++++++++++++-----
> 
> If we're going to make the driver compatible with jz4740 and jz4725b
> maybe we should rename the source files jz47xx_{nand,bch}.{c,h}.

I don't know about that. Adding support for new hardware isn't a good 
reason to
rename the driver, or so I've been told around here, as you then make 
it harder
to review the git history of the driver.

>>   1 file changed, 37 insertions(+), 11 deletions(-)
>> 
>>  diff --git a/drivers/mtd/nand/raw/ingenic/jz4780_nand.c 
>> b/drivers/mtd/nand/raw/ingenic/jz4780_nand.c
>>  index 7f55358b860f..c0855fef7735 100644
>>  --- a/drivers/mtd/nand/raw/ingenic/jz4780_nand.c
>>  +++ b/drivers/mtd/nand/raw/ingenic/jz4780_nand.c
>>  @@ -13,6 +13,7 @@
>>   #include <linux/module.h>
>>   #include <linux/of.h>
>>   #include <linux/of_address.h>
>>  +#include <linux/of_device.h>
>>   #include <linux/gpio/consumer.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/slab.h>
>>  @@ -26,13 +27,15 @@
>> 
>>   #define DRV_NAME	"jz4780-nand"
>> 
>>  -#define OFFSET_DATA	0x00000000
>>  -#define OFFSET_CMD	0x00400000
>>  -#define OFFSET_ADDR	0x00800000
>>  -
>>   /* Command delay when there is no R/B pin. */
>>   #define RB_DELAY_US	100
>> 
>>  +struct jz_soc_info {
>>  +	unsigned long data_offset;
>>  +	unsigned long addr_offset;
>>  +	unsigned long cmd_offset;
>>  +};
>>  +
>>   struct jz4780_nand_cs {
>>   	unsigned int bank;
>>   	void __iomem *base;
>>  @@ -40,6 +43,7 @@ struct jz4780_nand_cs {
>> 
>>   struct jz4780_nand_controller {
>>   	struct device *dev;
>>  +	const struct jz_soc_info *soc_info;
>>   	struct jz4780_bch *bch;
>>   	struct nand_controller controller;
>>   	unsigned int num_banks;
>>  @@ -101,9 +105,9 @@ static void jz4780_nand_cmd_ctrl(struct 
>> nand_chip *chip, int cmd,
>>   		return;
>> 
>>   	if (ctrl & NAND_ALE)
>>  -		writeb(cmd, cs->base + OFFSET_ADDR);
>>  +		writeb(cmd, cs->base + nfc->soc_info->addr_offset);
>>   	else if (ctrl & NAND_CLE)
>>  -		writeb(cmd, cs->base + OFFSET_CMD);
>>  +		writeb(cmd, cs->base + nfc->soc_info->cmd_offset);
>>   }
>> 
>>   static int jz4780_nand_dev_ready(struct nand_chip *chip)
>>  @@ -161,8 +165,13 @@ static int jz4780_nand_attach_chip(struct 
>> nand_chip *chip)
>>   	struct jz4780_nand_controller *nfc = 
>> to_jz4780_nand_controller(chip->controller);
>>   	int eccbytes;
>> 
>>  -	chip->ecc.bytes = fls((1 + 8) * chip->ecc.size)	*
>>  -				(chip->ecc.strength / 8);
>>  +	if (chip->ecc.strength == 4) {
>>  +		/* JZ4740 uses 9 bytes of ECC to correct maximum 4 errors */
>>  +		chip->ecc.bytes = 9;
>>  +	} else {
>>  +		chip->ecc.bytes = fls((1 + 8) * chip->ecc.size)	*
>>  +				  (chip->ecc.strength / 8);
>>  +	}
>> 
>>   	switch (chip->ecc.mode) {
>>   	case NAND_ECC_HW:
>>  @@ -272,8 +281,8 @@ static int jz4780_nand_init_chip(struct 
>> platform_device *pdev,
>>   		return -ENOMEM;
>>   	mtd->dev.parent = dev;
>> 
>>  -	chip->legacy.IO_ADDR_R = cs->base + OFFSET_DATA;
>>  -	chip->legacy.IO_ADDR_W = cs->base + OFFSET_DATA;
>>  +	chip->legacy.IO_ADDR_R = cs->base + nfc->soc_info->data_offset;
>>  +	chip->legacy.IO_ADDR_W = cs->base + nfc->soc_info->data_offset;
>>   	chip->legacy.chip_delay = RB_DELAY_US;
>>   	chip->options = NAND_NO_SUBPAGE_WRITE;
>>   	chip->legacy.select_chip = jz4780_nand_select_chip;
>>  @@ -353,6 +362,10 @@ static int jz4780_nand_probe(struct 
>> platform_device *pdev)
>>   	if (!nfc)
>>   		return -ENOMEM;
>> 
>>  +	nfc->soc_info = device_get_match_data(dev);
>>  +	if (!nfc->soc_info)
>>  +		return -EINVAL;
>>  +
>>   	/*
>>   	 * Check for BCH HW before we call nand_scan_ident, to prevent us 
>> from
>>   	 * having to call it again if the BCH driver returns 
>> -EPROBE_DEFER.
>>  @@ -390,8 +403,21 @@ static int jz4780_nand_remove(struct 
>> platform_device *pdev)
>>   	return 0;
>>   }
>> 
>>  +static const struct jz_soc_info jz4740_soc_info = {
>>  +	.data_offset = 0x00000000,
>>  +	.cmd_offset  = 0x00008000,
>>  +	.addr_offset = 0x00010000,
>>  +};
>>  +
>>  +static const struct jz_soc_info jz4780_soc_info = {
>>  +	.data_offset = 0x00000000,
>>  +	.cmd_offset  = 0x00400000,
>>  +	.addr_offset = 0x00800000,
>>  +};
>>  +
>>   static const struct of_device_id jz4780_nand_dt_match[] = {
>>  -	{ .compatible = "ingenic,jz4780-nand" },
>>  +	{ .compatible = "ingenic,jz4740-nand", .data = &jz4740_soc_info },
>>  +	{ .compatible = "ingenic,jz4780-nand",  .data = &jz4780_soc_info  
>> },
>>   	{},
>>   };
>>   MODULE_DEVICE_TABLE(of, jz4780_nand_dt_match);
> 


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  reply	other threads:[~2019-02-03 13:57 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-02 23:19 [PATCH v2 0/9] Ingenic JZ4780 NAND patchset v2 Paul Cercueil
2019-02-02 23:19 ` Paul Cercueil
2019-02-02 23:19 ` [PATCH v2 1/9] mtd: rawnand: Move drivers for Ingenic SoCs to subfolder Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-02 23:19 ` [PATCH v2 2/9] dt-bindings: mtd: ingenic: Add compatible strings for the JZ4740 Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-18 19:20   ` Rob Herring
2019-02-18 19:20     ` Rob Herring
2019-02-18 19:20     ` Rob Herring
2019-02-02 23:19 ` [PATCH v2 3/9] mtd: rawnand: jz4780: Use SPDX license notifiers Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-02 23:19 ` [PATCH v2 4/9] mtd: rawnand: jz4780: Add support for the JZ4740 Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-03  7:31   ` Boris Brezillon
2019-02-03  7:31     ` Boris Brezillon
2019-02-03 13:56     ` Paul Cercueil [this message]
2019-02-03 13:56       ` Paul Cercueil
2019-02-03 14:08       ` Boris Brezillon
2019-02-03 14:08         ` Boris Brezillon
2019-02-03 14:10         ` Paul Cercueil
2019-02-03 14:10           ` Paul Cercueil
2019-02-03 14:24           ` Boris Brezillon
2019-02-03 14:24             ` Boris Brezillon
2019-02-02 23:19 ` [PATCH v2 5/9] mtd: rawnand: jz4780: Add ooblayout for the JZ4725B Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-03  7:21   ` Boris Brezillon
2019-02-03  7:21     ` Boris Brezillon
2019-02-02 23:19 ` [PATCH v2 6/9] mtd: rawnand: jz4780: Add ooblayout for the Qi Ben Nanonote Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-03  7:30   ` Boris Brezillon
2019-02-03  7:30     ` Boris Brezillon
2019-02-02 23:19 ` [PATCH v2 7/9] mtd: rawnand: jz4780-bch: Separate top-level and SoC specific code Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-02 23:19 ` [PATCH v2 8/9] mtd: rawnand: jz4780-bch: Add support for the JZ4725B Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-02 23:19 ` [PATCH v2 9/9] mtd: rawnand: jz4780-bch: Add support for the JZ4740 Paul Cercueil
2019-02-02 23:19   ` Paul Cercueil
2019-02-03  7:35   ` Boris Brezillon
2019-02-03  7:35     ` Boris Brezillon
2019-02-03 13:58     ` Paul Cercueil
2019-02-03 13:58       ` Paul Cercueil
2019-02-03 14:16       ` Boris Brezillon
2019-02-03 14:16         ` Boris Brezillon
2019-02-03 14:56         ` Paul Cercueil
2019-02-03 14:56           ` Paul Cercueil
2019-02-03 15:07           ` Boris Brezillon
2019-02-03 15:07             ` Boris Brezillon
2019-02-03 15:41             ` Paul Cercueil
2019-02-03 15:41               ` Paul Cercueil
2019-02-04  9:26   ` kbuild test robot
2019-02-04  9:26     ` kbuild test robot
2019-02-04  9:26     ` kbuild test robot
2019-02-04 10:02   ` kbuild test robot
2019-02-04 10:02     ` kbuild test robot
2019-02-04 10:02     ` kbuild test robot
2019-02-03  7:20 ` [PATCH v2 0/9] Ingenic JZ4780 NAND patchset v2 Boris Brezillon
2019-02-03  7:20   ` Boris Brezillon
2019-02-03 13:01   ` Paul Cercueil
2019-02-03 13:01     ` Paul Cercueil
2019-02-03 14:04     ` Boris Brezillon
2019-02-03 14:04       ` Boris Brezillon

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=1549202213.1950.1@crapouillou.net \
    --to=paul@crapouillou.net \
    --cc=bbrezillon@kernel.org \
    --cc=computersforpeace@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dwmw2@infradead.org \
    --cc=harveyhuntnexus@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=malat@debian.org \
    --cc=marek.vasut@gmail.com \
    --cc=mark.rutland@arm.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=richard@nod.at \
    --cc=robh+dt@kernel.org \
    /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.