public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: William Zhang <william.zhang@broadcom.com>
To: Linus Walleij <linus.walleij@linaro.org>,
	u-boot@lists.denx.de, Tom Rini <trini@konsulko.com>
Cc: Anand Gore <anand.gore@broadcom.com>,
	Kursad Oney <kursad.oney@broadcom.com>,
	Joel Peshkin <joel.peshkin@broadcom.com>,
	Philippe Reynes <philippe.reynes@softathome.com>
Subject: Re: [PATCH] mtd: rawnand: nand_base: Handle algorithm selection
Date: Wed, 25 Jan 2023 17:14:19 -0800	[thread overview]
Message-ID: <67b8db8e-0cd9-b2d1-19ff-ba9afdab15d2@broadcom.com> (raw)
In-Reply-To: <20230121234338.2242486-1-linus.walleij@linaro.org>

[-- Attachment #1: Type: text/plain, Size: 2753 bytes --]

Hi Linus,

On 01/21/2023 03:43 PM, Linus Walleij wrote:
> For BRCMNAND with 1-bit BCH ECC (BCH-1) such as used on the
> D-Link DIR-885L and DIR-890L routers, we need to explicitly
> select the ECC like this in the device tree:
> 
>    nand-ecc-algo = "bch";
>    nand-ecc-strength = <1>;
>    nand-ecc-step-size = <512>;
> 
> This is handled by the Linux kernel but U-Boot core does
> not respect this. Fix it up by parsing the algorithm and
> preserve the behaviour using this property to select
> software BCH as far as possible.

For 1 bit HW ECC, the BRCMNAND driver only uses HAMMING ECC.  The 
brcmnand_setup_dev function should take care of it with just these two 
properties in the device tress without any code changes:
     nand-ecc-strength = <1>;
     nand-ecc-step-size = <512>;
unless these D-Link device has always been using software BCH-1 and 
wants to continue to use software BCH-1.

BTW,  I didn't see this change from master branch of linux nand base 
driver. The "nand-ecc-algo" is only used by the ecc engine code(ecc.c) 
but this code is not in the u-boot obviously. Were you porting this from 
a different version of linux nand driver?

> 
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>   drivers/mtd/nand/raw/nand_base.c | 13 ++++++++++---
>   1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index 9eba360d55f3..872b58ec5f23 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -4487,6 +4487,7 @@ EXPORT_SYMBOL(nand_detect);
>   static int nand_dt_init(struct mtd_info *mtd, struct nand_chip *chip, ofnode node)
>   {
>   	int ret, ecc_mode = -1, ecc_strength, ecc_step;
> +	int ecc_algo = NAND_ECC_UNKNOWN;
>   	const char *str;
>   
>   	ret = ofnode_read_s32_default(node, "nand-bus-width", -1);
> @@ -4512,10 +4513,13 @@ static int nand_dt_init(struct mtd_info *mtd, struct nand_chip *chip, ofnode nod
>   			ecc_mode = NAND_ECC_SOFT_BCH;
>   	}
>   
> -	if (ecc_mode == NAND_ECC_SOFT) {
> -		str = ofnode_read_string(node, "nand-ecc-algo");
> -		if (str && !strcmp(str, "bch"))
> +	str = ofnode_read_string(node, "nand-ecc-algo");
> +	if (str && !strcmp(str, "bch")) {
> +		ecc_algo = NAND_ECC_BCH;
> +		if (ecc_mode == NAND_ECC_SOFT)
>   			ecc_mode = NAND_ECC_SOFT_BCH;
> +	} else if (!strcmp(str, "hamming")) {
> +		ecc_algo = NAND_ECC_HAMMING;
>   	}
>   
>   	ecc_strength = ofnode_read_s32_default(node,
> @@ -4529,6 +4533,9 @@ static int nand_dt_init(struct mtd_info *mtd, struct nand_chip *chip, ofnode nod
>   		return -EINVAL;
>   	}
>   
> +	if (ecc_algo >= 0)
> +		chip->ecc.algo = ecc_algo;
> +
>   	if (ecc_mode >= 0)
>   		chip->ecc.mode = ecc_mode;
>   
> 

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4212 bytes --]

  reply	other threads:[~2023-01-26  1:14 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-21 23:43 [PATCH] mtd: rawnand: nand_base: Handle algorithm selection Linus Walleij
2023-01-26  1:14 ` William Zhang [this message]
2023-01-26  8:04   ` Rafał Miłecki
2023-01-26  8:59   ` Linus Walleij
2023-01-26 17:40     ` William Zhang
2023-03-07 23:05 ` Linus Walleij
2023-03-08 16:55   ` Tom Rini
2023-03-08 17:10     ` Michael Nazzareno Trimarchi
2023-03-08 17:48 ` Michael Nazzareno Trimarchi

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=67b8db8e-0cd9-b2d1-19ff-ba9afdab15d2@broadcom.com \
    --to=william.zhang@broadcom.com \
    --cc=anand.gore@broadcom.com \
    --cc=joel.peshkin@broadcom.com \
    --cc=kursad.oney@broadcom.com \
    --cc=linus.walleij@linaro.org \
    --cc=philippe.reynes@softathome.com \
    --cc=trini@konsulko.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox