[PATCH 1/1] Fix ECC Correction bug for SMC ordering for NDFC driver.
Sean MacLennan
smaclennan at pikatech.com
Fri Aug 21 10:27:53 EST 2009
On Thu, 20 Aug 2009 17:19:17 -0700
Feng Kan <fkan at amcc.com> wrote:
> Fix ECC Correction bug where the byte offset location were double
> fliped causing correction routine to toggle the wrong byte location
> in the ECC segment. The ndfc_calculate_ecc routine change the order
> of getting the ECC code.
> /* The NDFC uses Smart Media (SMC) bytes order */
> ecc_code[0] = p[2];
> ecc_code[1] = p[1];
> ecc_code[2] = p[3];
> But in the Correction algorithm when calculating the byte offset
> location, the b1 is used as the upper part of the address. Which
> again reverse the order making the final byte offset address
> location incorrect.
> byte_addr = (addressbits[b1] << 4) + addressbits[b0];
> The order is change to read it in straight and let the correction
> function to revert it to SMC order.
>
> Signed-off-by: Feng Kan <fkan at amcc.com>
> Acked-by: Victor Gallardo <vgallardo at amcc.com>
> Acked-by: Prodyut Hazarika <phazarika at amcc.com>
> ---
> drivers/mtd/nand/ndfc.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/nand/ndfc.c b/drivers/mtd/nand/ndfc.c
> index 5906c40..d9d3e6e 100644
> --- a/drivers/mtd/nand/ndfc.c
> +++ b/drivers/mtd/nand/ndfc.c
> @@ -101,8 +101,8 @@ static int ndfc_calculate_ecc(struct mtd_info
> *mtd, wmb();
> ecc = in_be32(ndfc->ndfcbase + NDFC_ECC);
> /* The NDFC uses Smart Media (SMC) bytes order */
> - ecc_code[0] = p[2];
> - ecc_code[1] = p[1];
> + ecc_code[0] = p[1];
> + ecc_code[1] = p[2];
> ecc_code[2] = p[3];
>
> return 0;
Acked-by: Sean MacLennan <smaclennan at pikatech.com>
Cheers,
Sean
More information about the Linuxppc-dev
mailing list