All of lore.kernel.org
 help / color / mirror / Atom feed
From: Troy Kisky <troy.kisky@boundarydevices.com>
To: s-paulraj@ti.com
Cc: dwmw2@infradead.org,
	davinci-linux-open-source@linux.davincidsp.com,
	linux-mtd@lists.infradead.org, tglx@linutronix.de,
	akpm@linux-foundation.org
Subject: Re: [PATCH v2 3/3] Add 4-bit ECC support for large page NAND chips on	Davinci
Date: Thu, 18 Jun 2009 14:16:22 -0700	[thread overview]
Message-ID: <4A3AAEA6.7040608@boundarydevices.com> (raw)
In-Reply-To: <1245183812-11500-1-git-send-email-s-paulraj@ti.com>

s-paulraj@ti.com wrote:
> From: Sandeep Paulraj <s-paulraj@ti.com>
> 
> The patch applies to linux-mtd GIT tree
> 
> This patch adds 4-bit ECC support for large page NAND chips using the new ECC
> mode NAND_ECC_HW_OOB_FIRST. The platform data from board-dm355-evm has been
> adjusted to use this mode.
> 
> The patches have been verified on DM355 device with 2K and 4K page size 
> Micron devices using mtd-tests.
> Error correction upto 4-bits has also been verified using
> nandwrite/nanddump utilities.
> 
> Reviewed-by: David Brownell <dbrownell@users.sourceforge.net>
> Signed-off-by: Sandeep Paulraj <s-paulraj@ti.com>
> Signed-off-by: Sneha Narnakaje <nsnehaprabha@ti.com>
> ---
>  drivers/mtd/nand/davinci_nand.c |   65 ++++++++++++++++++++++++++++++++++----
>  1 files changed, 58 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c
> index ba6940d..2ff0712 100644
> --- a/drivers/mtd/nand/davinci_nand.c
> +++ b/drivers/mtd/nand/davinci_nand.c
> @@ -500,6 +500,49 @@ static struct nand_ecclayout hwecc4_small __initconst = {
>  	},
>  };
>  
> +/* An ECC layout for using 4-bit ECC with large-page (2048bytes) flash,
> + * storing ten ECC bytes plus the manufacturer's bad block marker byte,
> + * and not overlapping the default BBT markers.
> + */
> +static struct nand_ecclayout hwecc4_2048 __initconst = {
> +	.eccbytes = 40,
> +	.eccpos = { /* 2 bytes at offset 0 hold the badblock markers */
> +		/* 4 bytes at offset 8 hold BBT header */
> +		/* 1 byte at offset 12 holds BBT version */
> +		/* 8 bytes at offset 16 hold JFFS2 clean markers */
> +		24, 25, 26, 27, 28, 29,	30, 31, 32, 33,
> +		34, 35, 36, 37, 38, 39,	40, 41, 42, 43,
> +		44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
> +		54, 55, 56, 57, 58, 59, 60, 61, 62, 63, },
> +	.oobfree = {
> +		{.offset = 16, .length = 8, },

why not  offset = 2, length = 22
Won't the badblock marker show if this is used as a BBT?
Can JFFS2 not use the same bytes when not a BBT?

> +		{.offset = 64, },

You can kill the above line.

> +	},
> +};
> +
> +/* An ECC layout for using 4-bit ECC with large-page (4096bytes) flash,
> + * storing ten ECC bytes plus the manufacturer's bad block marker byte,
> + * and not overlapping the default BBT markers.
> + */
> +static struct nand_ecclayout hwecc4_4096 __initconst = {
> +	.eccbytes = 80,
> +	.eccpos = { /* 2 bytes at offset 0 hold the badblock markers */
> +		/* 4 bytes at offset 8 hold BBT header */
> +		/* 1 byte at offset 12 holds BBT version */
> +		/* 8 bytes at offset 16 hold JFFS2 clean markers */
> +		24, 25, 26, 27, 28, 29,	30, 31, 32, 33,
> +		34, 35, 36, 37, 38, 39,	40, 41, 42, 43,
> +		44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
> +		54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
> +		64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
> +		74, 75, 76, 77, 78, 69,	80, 81, 82, 83,
> +		84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
> +		94, 95, 96, 97, 98, 99, 100, 101, 102, 103, },

Can these not be at the end??? i.e. 48-127

> +	.oobfree = {
> +		{.offset = 16, .length = 8, },
> +		{.offset = 104, },
> +	},
> +};
>  
>  static int __init nand_davinci_probe(struct platform_device *pdev)
>  {
> @@ -689,15 +732,23 @@ static int __init nand_davinci_probe(struct platform_device *pdev)
>  				info->mtd.oobsize - 16;
>  			goto syndrome_done;
>  		}
> +		if (chunks == 4) {
> +			info->ecclayout = hwecc4_2048;
> +			info->ecclayout.oobfree[1].length = info->mtd.oobsize -
> +				info->ecclayout.oobfree[1].offset;

This can be removed, it is already 0.

> +			info->chip.ecc.mode = NAND_ECC_HW_OOB_FIRST;
> +			goto syndrome_done;
> +		}
> +		if (chunks == 8) {
> +			info->ecclayout = hwecc4_4096;
> +			info->ecclayout.oobfree[1].length = info->mtd.oobsize -
> +				info->ecclayout.oobfree[1].offset;
> +			info->chip.ecc.mode = NAND_ECC_HW_OOB_FIRST;
> +			goto syndrome_done;
> +		}
>  
> -		/* For large page chips we'll be wanting to use a
> -		 * not-yet-implemented mode that reads OOB data
> -		 * before reading the body of the page, to avoid
> -		 * the "infix OOB" model of NAND_ECC_HW_SYNDROME
> -		 * (and preserve manufacturer badblock markings).
> -		 */
>  		dev_warn(&pdev->dev, "no 4-bit ECC support yet "
> -				"for large page NAND\n");
> +				"for >4K page NAND\n");
>  		ret = -EIO;
>  		goto err_scan;
>  

  reply	other threads:[~2009-06-18 21:16 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-16 20:23 [PATCH v2 3/3] Add 4-bit ECC support for large page NAND chips on Davinci s-paulraj
2009-06-18 21:16 ` Troy Kisky [this message]
2009-06-18 21:34   ` Paulraj, Sandeep
2009-06-18 21:53     ` Troy Kisky
2009-06-19  2:07       ` David Brownell

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=4A3AAEA6.7040608@boundarydevices.com \
    --to=troy.kisky@boundarydevices.com \
    --cc=akpm@linux-foundation.org \
    --cc=davinci-linux-open-source@linux.davincidsp.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=s-paulraj@ti.com \
    --cc=tglx@linutronix.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.