Re: [U-Boot] [PATCH 1/1] ppc4xx: Fix ECC Correction bug with SMC ordering for NDFC driver

2009-08-25 Thread Stefan Roese
On Friday 21 August 2009 19:59:42 Feng Kan wrote:
 Fix ECC Correction bug where the byte offset location were double
 flipped 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 s1 is used as the upper part of the address. Which
 again reverse the order making the final byte offset address
 location incorrect.
   byteoffs = (s1  0)  0x80;
   .
   .
   byteoffs |= (s0  4)  0x08;
 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 f...@amcc.com
 Acked-by: Victor Gallardo vgalla...@amcc.com
 Acked-by: Prodyut Hazarika phazar...@amcc.com

Applied to u-boot-ppc4xx/master. Thanks.

Cheers,
Stefan

--
DENX Software Engineering GmbH,  MD: Wolfgang Denk  Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: off...@denx.de
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/1] ppc4xx: Fix ECC Correction bug with SMC ordering for NDFC driver

2009-08-21 Thread Feng Kan
Fix ECC Correction bug where the byte offset location were double
flipped 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 s1 is used as the upper part of the address. Which
again reverse the order making the final byte offset address 
location incorrect.
byteoffs = (s1  0)  0x80;
.
.
byteoffs |= (s0  4)  0x08;
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 f...@amcc.com
Acked-by: Victor Gallardo vgalla...@amcc.com
Acked-by: Prodyut Hazarika phazar...@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 528b22b..0891936 100644
--- a/drivers/mtd/nand/ndfc.c
+++ b/drivers/mtd/nand/ndfc.c
@@ -89,8 +89,8 @@ static int ndfc_calculate_ecc(struct mtd_info *mtdinfo,
 
/* 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;
-- 
1.5.5

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot