This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAPL-132 Nand question

Other Parts Discussed in Thread: OMAPL138

Hi.

We have a custom OMAPL-132 board with Micron NAND MT29F1G08ABBDAHC. On some of our boards we encountered nand read and bad blocks failures. We currently have the nand partitioned with UBIFS, JFFS2 partitions and raw data.
I have a few questions that is unclear to me:
1) Subpages, Is there support for it? In the code i can see that it is supported (uboot and kernel), but in http://processors.wiki.ti.com/index.php/Linux_Core_NAND_User's_Guide  It says subpages are not supported. What is right then??

2) ECC: What is the correct mode HW_ECC_OOB_FIRST or just HW_ECC? i saw nowhere a reference for the difference and when to use each of them

3) Layout: L-132 Reference Manual says it supports 4-bit Reed-Solomon ECC code, Micron page here: https://www.ece.umd.edu/~blj/CS-590.26/micron-tn2919.pdf says that 72 bits (for 512 bytes i assume) are needed. That makes 9bytes*4areas = 36 bytes for ECC. Another 8 bytes i reserve for JFFS2, now what about the bad block marker? Page 73 in Micron datasheet shows a spare area layout with 2 reserved bad block bytes per 512 bytes. That sounds weird, shouldn't it be like this only when using on-die ECC is used and in my case bad-block table should be stored in last page of nand? So i am a bit of confused on what the correct layout should be... 
https://www.micron.com/~/media/documents/products/technical-note/nand-flash/tn2959_bbm_in_nand_flash.pdf Page here says 

For SLC large page (2112-byte/1056-word page) devices, any block where the first and
sixth bytes (x8 device)/first word (x16 device) in the spare area of the first page does not
contain FFh is a bad block.

In uboot code in nand_base.c:

if (!(busw & NAND_BUSWIDTH_16) &&
                      *maf_id == NAND_MFR_STMICRO &&
                      mtd->writesize == 2048) {
                MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: setting opt NAND_BBT_SCANBYTE1AND6\n", __func__);
                chip->options |= NAND_BBT_SCANBYTE1AND6;
                chip->badblockpos = 0;
      }

This code is never reached, so this option is off by default... Should i change that??
Also from nand_base.c:

        /*
         * Bad block marker is stored in the last page of each block
         * on Samsung and Hynix MLC devices; stored in first two pages
         * of each block on Micron devices with 2KiB pages and on
         * SLC Samsung, Hynix, Toshiba and AMD/Spansion. All others scan
         * only the first page.
         */
        if ((chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
                        (*maf_id == NAND_MFR_SAMSUNG ||
                         *maf_id == NAND_MFR_HYNIX))
                chip->options |= NAND_BBT_SCANLASTPAGE;
        else if ((!(chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
                                (*maf_id == NAND_MFR_SAMSUNG ||
                                 *maf_id == NAND_MFR_HYNIX ||
                                 *maf_id == NAND_MFR_TOSHIBA ||
                                 *maf_id == NAND_MFR_AMD)) ||
                        (mtd->writesize == 2048 &&
                         *maf_id == NAND_MFR_MICRON)) {
                         MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: setting opt  NAND_BBT_SCAN2NDPAGE\n", __func__);
                chip->options |= NAND_BBT_SCAN2NDPAGE;
        }

But in: http://www.linux-mtd.infradead.org/nand-data/nanddata.html  It says 

Micron	MT29F1G08ABBDA	0x2C	0xA1	0x2CA1801502	128	2048	64	128 KB	x8	1.0	1st page (1st byte in OOB = non FFh)

So It seems that the driver is definitely configuring badly the nand device. Am i right here?
Are there any patches?

Using u-boot-2012.04.01-psp03.22.00.06.sdk

Thanks a lot

MoonDrop

  • Hi Moon drop,

    At a first hand, to evaluate the ECC types , for OMAPL138, the starterware code encloses the implementation of ecc algorithms such as

    1. HAMMING_1BIT 
    2. RS_4BIT      
    3. BCH_4BIT     
    4. BCH_8BIT  
    5. ALGO_BCH_16BIT  

    The part number used is Micron NAND chip "MT29F1G08ABCAC:C "

    The ECC offset in OOB areaaa, ecc byte count(size) of diffrent ECC schemes are given in the "nandlib.h". In the NAND sample code, one of these algorithm were used.

    #define NAND_ECC_1BIT_HAMMINGCODE_OOB_OFFSET          (1)

    #define NAND_ECC_1BIT_HAMMINGCODE_BYTECNT             (3)

    #define NAND_ECC_RS_4BIT_OOB_OFFSET                   (0)

    #define NAND_ECC_RS_4BIT_UNUSED_BYTECNT               (6)

    #define NAND_ECC_RS_4BIT_BYTECNT                      (10)

    #define NAND_ECC_BCH_8BIT_OOB_OFFSET                  (2)

    #define NAND_ECC_BCH_8BIT_BYTECNT                     (14)

    #define NAND_ECC_BCH_8BIT_UNUSED_BYTECNT              (2)

    #define NAND_ECC_BCH_8BIT_NIBBLECNT                   (26)

    Either you can compare the code flow or modify this NAND sample code of ( OMAPL138 ) for OMAPl132 and evaluate this as a bare metal code on your target platform. Once this is through, you can modify the u-boot NAND portions accordingly.

     

    Starterware download link :

     

     

     

  • Is that an answer to my questions?????
  • Hi Moon drop,


    1) Subpages, Is there support for it? In the code i can see that it is supported (uboot and kernel), but in processors.wiki.ti.com/.../Linux_Core_NAND_User's_Guide It says subpages are not supported. What is right then??

    This wiki is for OMAP NAND designs and not for Davinci. In the u-boot, the source code might be seen and implemented but we need to check by default whether it is been enabled and used.

    2) ECC: What is the correct mode HW_ECC_OOB_FIRST or just HW_ECC? i saw nowhere a reference for the difference and when to use each of them


    Davinci NAND controller HW ECC supports 1-bit and 4-bit ECC calculation on blocks of 512 bytes. If the error occurred is more than 4 bit, this HW ECC correction will not help. So that you have to proceed with software ECC algorithms which supports more than 4 bit error detection and correction.

    As far as I know, in the u-boot code, the HW_ECC is enabled. You can enable and use the other ECC mechanisms too. For evaluating the other ECC types, I have recommended to use the bare metal ECC algorithm code to evaluate with your custom board. Once that is through, You can either re-use the code in u-boot.

    Please visit these two links too.

    http://processors.wiki.ti.com/index.php/Linux_Core_NAND_User's_Guide

    http://processors.wiki.ti.com/index.php/Raw_NAND_ECC
     

    3) Layout: L-132 Reference Manual says it supports 4-bit Reed-Solomon ECC code, Micron page here: www.ece.umd.edu/.../micron-tn2919.pdf says that 72 bits (for 512 bytes i assume) are needed. That makes 9bytes*4areas = 36 bytes for ECC. Another 8 bytes i reserve for JFFS2, now what about the bad block marker? Page 73 in Micron datasheet shows a spare area layout with 2 reserved bad block bytes per 512 bytes. That sounds weird, shouldn't it be like this only when using on-die ECC is used and in my case bad-block table should be stored in last page of nand? So i am a bit of confused on what the correct layout should be...


    Please refer to the pervious post by which you can download the source code of different ECC algorithms, OBB offset, ECC calculations etc. That may give a fair idea of each ECC algorithm.
    Please check out the bad block marker information stored in the spare area too in the code.


    In uboot code in nand_base.c:
    if (!(busw & NAND_BUSWIDTH_16) &&
    *maf_id == NAND_MFR_STMICRO &&
    mtd->writesize == 2048) {
    MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: setting opt NAND_BBT_SCANBYTE1AND6\n", __func__);
    chip->options |= NAND_BBT_SCANBYTE1AND6;
    chip->badblockpos = 0;
    }
    This code is never reached, so this option is off by default... Should i change that??

    This function seems to be for NAND 16bit Data width, but yours is 8bit (MT29F1G08ABBDAHC), I think, your NAND part is does not require this portion of code.

    Please let us know if have any questions.

    Regards,
    Shankari and Titus S.

  • Hi.

    Thank you very much. This was quite helpful. I have made some progress and managed to make both kernel and u-boot work with the HW ECC.
    Now i am stuck with ubifs ECC problem.
    Using 'ubiformat /dev/mtd5 -f img.ubifs -s 512 -O 512' (the image was created with these parameters as well).
    Then 'ubiattach /dev/ubi_ctrl -m 5 -O 512' gives continues ECC error (-74).

    When rebooting the unit and looking at OOB area of the formatted area it looks like:

    Page 03a00000 dump:
            55 42 49 23 01 00 00 00  00 00 00 00 00 00 00 00
            00 00 02 00 00 00 08 00  2a a3 28 32 00 00 00 00
            00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
            00 00 00 00 00 00 00 00  00 00 00 00 b8 e7 94 ea
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            55 42 49 21 01 01 00 05  7f ff ef ff 00 00 00 00
            00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
            00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
            00 00 00 00 00 00 00 00  00 00 00 00 b8 25 64 a8
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
    OOB:
            ff ff ff ff ff ff 5c 80
            cb 5a cb f5 5c 5e da 23
            ff ff ff ff ff ff e5 6f
            67 1d f0 f4 ca f8 19 bf
            ff ff ff ff ff ff 3f 27
            56 f5 29 d8 61 d9 9d 14
            ff ff ff ff ff ff 3f 27
            56 f5 29 d8 61 d9 9d 14
    

    It seems to me that an ECC is being calculated for the empty space in the image and stored to nand.
    The link here: http://www.linux-mtd.infradead.org/faq/ubi.html#L_ecc_error says that ubiformat should skip 0xFF when calculating ECC. but it seems that this is not happening. Am i right???
    Even when i format the partition without image (empty, i.e 'ubiformat /dev/mtd5 -s 512 -O 512), then attach the empty partition, I still get those ECC errors, which is very weird, and in this case my dump is:

            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
    OOB:
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
            ff ff ff ff ff ff ff ff
    

    So why when attaching I still get those ECC errors from UBIFS?

    UBI error: ubi_io_read: error -74 (ECC error) while reading 64 bytes from PEB 82:0, read 64 bytes
    UBI warning: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 82:512, read only 512 bytes, retry
    UBI warning: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 82:512, read only 512 bytes, retry
    UBI warning: ubi_io_read: error -74 (ECC error) while reading 512 bytes from PEB 82:512, read only 512 bytes, retry
    

    Both Kernel and U-boot are configured for 4bit HW ECC.

    Thank you very much :)
    MoonDrop

  • I have managed to solve it. I found it as a patch in MTD-UTILS that was uploaded 3 days ago (lucky me :)

    This patch solves the 4bit HW ECC issue when using UBIFS subpages. It requires a reset of the ECC engine prior to read/write:

    Patch from: http://git.infradead.org/linux-mtd.git/commitdiff/f6d7c1b5598b6407c3f1da795dd54acf99c1990c?hp=a93295a7e118b5c58391906e47183775b1eb7cb1

    static void nand_davinci_hwctl_4bit(struct mtd_info *mtd, int mode)
    {
            struct davinci_nand_info *info = to_davinci_nand(mtd);
            unsigned long flags;
            u32 val;
    
            davinci_nand_readl(info, NAND_4BIT_ECC1_OFFSET);
    
            spin_lock_irqsave(&davinci_nand_lock, flags);
    
            /* Start 4-bit ECC calculation for read/write */
    ...
    ...

     

  • Hi Moon drop,
    Glad to hear that you were able to solve the problem.
    Also thanks for sharing the patch link.
  • Hi.

    In the starterware software, is there any source code for testing SD/MMC interface?? couldn't find any...

    Also, we have a board that does not load, when testing under JTAG:

    Scripts->OMAL L138 Memory Map->Setup Memory Map
    Scripts->Frequency Settings->Core_300Mhz_mDDR_150Mhz
    Load Program X....

    All boards pass this test except one board, which fails at "Core_300Mhz_mDDR_150Mhz" setup.
    What could be the cause for such failure on that board??? 

    King Regards

    MoonDrop

  • Please create a new post for your new issue/question.