From: Scott Wood <scottwood@freescale.com>
To: Prabhakar Kushwaha <prabhakar@freescale.com>
Cc: linux-mtd@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
Poonam Aggrwal <poonam.aggrwal@freescale.com>
Subject: Re: [PATCH 1/2] mtd/nand:Fix wrong address read in is_blank()
Date: Tue, 3 Jan 2012 14:24:02 -0600 [thread overview]
Message-ID: <4F0363E2.6040702@freescale.com> (raw)
In-Reply-To: <1325134779-3571-2-git-send-email-prabhakar@freescale.com>
On 12/28/2011 10:59 PM, Prabhakar Kushwaha wrote:
> IFC NAND Machine calculates ECC on 512byte sector. Same is taken care in
> fsl_ifc_run_command() while ECC status verification. Here buffer number is
> calculated assuming 512byte sector and same is passed to is_blank.
> However in is_blank() buffer address is calculated using mdt->writesize which is
> wrong. It should be calculated on basis of ecc sector size.
>
> Also, in fsl_ifc_run_command() bufferpage is calculated on the basis of ecc sector
> size instead of hard coded value.
>
> Signed-off-by: Poonam Aggrwal <poonam.aggrwal@freescale.com>
> Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
> ---
> git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git (branch next)
>
> Tested on P1010RDB
>
> drivers/mtd/nand/fsl_ifc_nand.c | 6 ++++--
> 1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
> index 8475b88..2df7206 100644
> --- a/drivers/mtd/nand/fsl_ifc_nand.c
> +++ b/drivers/mtd/nand/fsl_ifc_nand.c
> @@ -191,7 +191,9 @@ static int is_blank(struct mtd_info *mtd, unsigned int bufnum)
> {
> struct nand_chip *chip = mtd->priv;
> struct fsl_ifc_mtd *priv = chip->priv;
> - u8 __iomem *addr = priv->vbase + bufnum * (mtd->writesize * 2);
> + int bufperpage = mtd->writesize / chip->ecc.size;
> + u8 __iomem *addr = priv->vbase + bufnum / bufperpage
> + * (mtd->writesize * 2);
> u32 __iomem *mainarea = (u32 *)addr;
> u8 __iomem *oob = addr + mtd->writesize;
> int i;
This function should only be checking one ECC block, not the entire
page. The caller is responsible for passing in the appropriate buffer
numbers.
I think what the current code needs is for (mtd->writesize * 2) to be
replaced with chip->ecc.size, and for the calling code to multiply the
starting bufnum by two.
> @@ -273,7 +275,7 @@ static void fsl_ifc_run_command(struct mtd_info *mtd)
> dev_err(priv->dev, "NAND Flash Write Protect Error\n");
>
> if (nctrl->eccread) {
> - int bufperpage = mtd->writesize / 512;
> + int bufperpage = mtd->writesize / chip->ecc.size;
> int bufnum = (nctrl->page & priv->bufnum_mask) * bufperpage;
> int bufnum_end = bufnum + bufperpage - 1;
>
Currently this driver always sets chip->ecc.size to 512. If we want to
support other ECC block sizes that future versions of IFC may have, can
we calculate bufperpage during chip init (similar to bufnum_mask) to
avoid the runtime division? It's probably not huge overhead compared to
everything else we do per NAND page transfer, but still...
-Scott
next prev parent reply other threads:[~2012-01-03 20:24 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-12-29 4:59 mtd/NAND:Fix issues with freescale IFC to support NAND 2K Prabhakar Kushwaha
2011-12-29 4:59 ` [PATCH 1/2] mtd/nand:Fix wrong address read in is_blank() Prabhakar Kushwaha
2012-01-03 20:24 ` Scott Wood [this message]
2012-01-04 4:35 ` Prabhakar
2011-12-29 4:59 ` [PATCH 2/2] mtd/nand: Fix IFC driver to support 2K NAND page Prabhakar Kushwaha
2012-01-03 19:49 ` Scott Wood
2012-01-04 4:58 ` Prabhakar
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=4F0363E2.6040702@freescale.com \
--to=scottwood@freescale.com \
--cc=linux-mtd@lists.infradead.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=poonam.aggrwal@freescale.com \
--cc=prabhakar@freescale.com \
/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.