Fix broken NAND ECC HW switch and invert logic of if(!hardware) for easier
reading.

---
 drivers/mtd/nand/omap_gpmc.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

Index: u-boot-arm/drivers/mtd/nand/omap_gpmc.c
===================================================================
--- u-boot-arm.orig/drivers/mtd/nand/omap_gpmc.c
+++ u-boot-arm/drivers/mtd/nand/omap_gpmc.c
@@ -255,12 +255,17 @@ void omap_nand_switch_ecc(int32_t hardwa
        nand->options = NAND_NO_PADDING | NAND_CACHEPRG | NAND_NO_AUTOINCR |
                        NAND_NO_AUTOINCR;
 
+       /* Reset ecc interface */
+       nand->ecc.read_page = NULL;
+       nand->ecc.write_page = NULL;
+       nand->ecc.read_oob = NULL;
+       nand->ecc.write_oob = NULL;
+       nand->ecc.hwctl = NULL;
+       nand->ecc.correct = NULL;
+       nand->ecc.calculate = NULL;
+
        /* Setup the ecc configurations again */
-       if (!hardware) {
-               nand->ecc.mode = NAND_ECC_SOFT;
-               /* Use mtd default settings */
-               nand->ecc.layout = NULL;
-       } else {
+       if (hardware) {
                nand->ecc.mode = NAND_ECC_HW;
                nand->ecc.layout = &hw_nand_oob;
                nand->ecc.size = 512;
@@ -269,6 +274,12 @@ void omap_nand_switch_ecc(int32_t hardwa
                nand->ecc.correct = omap_correct_data;
                nand->ecc.calculate = omap_calculate_ecc;
                omap_hwecc_init(nand);
+               printf("HW ECC selected\n");
+       } else {
+               nand->ecc.mode = NAND_ECC_SOFT;
+               /* Use mtd default settings */
+               nand->ecc.layout = NULL;
+               printf("SW ECC selected\n");
        }
 
        /* Update NAND handling after ECC mode switch */
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to