[U-Boot] u-boot hw assisted BCH8 not compatible with am335x architecure
matti kaasinen
matti.kaasinen at gmail.com
Fri Oct 25 15:14:06 CEST 2013
Editing those findings did not help.
In fact I was referring a wrong file in my last message. File README.omap3
refers to is:
arch/arm/include/asm/arch-omap3/omap_gpmc.h
Whereas in my last message I was referring:
arch/arm/include/asm/arch-am33x/omap_gpmc.h
However, there was one mistake also in that correct file. Definition found
in that file has wrong .eccbytes value.
#define GPMC_NAND_HW_BCH8_ECC_LAYOUT {\
.eccbytes = 56,\
.eccpos = {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,\
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,\
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,\
51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63},\
.oobfree = {\
{.offset = 2,\
.length = 10 } } \
}
Unfortunately fixing that to correct value 52 did not help either.
-Matti
2013/10/25 matti kaasinen <matti.kaasinen at gmail.com>
> Hi!
> I have found that ubifs formatted on Linux (2.8.13) side is not compatible
> on u-boot side. Executing ubi part <partition> throws tons of ECC error
> messages and in fact this same ubifs partition will be found corrupted on
> Linux side immediately after this single operation. I have investigated
> this issue and have found following:
>
> Linux 3.8.13 seems to use 52 ecc bytes mapping them to positions 12..64.
>
> Default u-boot set-up found from include/asm/arch-am33x/omap_gpmc.h define:
> #define GPMC_NAND_HW_BCH8_ECC_LAYOUT {\
> .eccbytes = 56,\
> .eccpos = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\
> 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,\
> 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\
> 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\
> 52, 53, 54, 55, 56, 57},\
> .oobfree = {\
> {.offset = 58,\
> .length = 6 } } \
> }
> that seems using 56 ecc bytes, mapping them to positions 2..57.
> This 56 bytes seems fighting with the fact found from README.omap3/BCH8
> set-up that points, that
> * CONFIG_SYS_NAND_ECCBYTES must be 13 for this BCH8 set-up
> On the other hand, am335x_evm.h use CONFIG_SYS_NAND_ECCBYTES to calculate
> CONFIG_SYS_NAND_ECCTOTAL that is same as .eccbytes in
> GPMC_NAND_HW_BCH8_ECC_LAYOUT definition. Value 13 gives 52 bytes that is
> compatible with Linux whereas 14 gives that 56 found from
> GPMC_NAND_HW_BCH8_ECC_LAYOUT definition above.
>
> Also text in README.omap3 states:
> "The NAND OOB layout is the same as in linux kernel, if the linux kernel
> BCH8
> implementation for OMAP3 works for you so the u-boot version should also.
> When you require the SPL to read with BCH8 there are two more configs to
> change:
>
> * CONFIG_SYS_NAND_ECCPOS (must be the same as .eccpos in
> GPMC_NAND_HW_BCH8_ECC_LAYOUT defined in
> arch/arm/include/asm/arch-omap3/omap_gpmc.h)
> * CONFIG_SYS_NAND_ECCSIZE must be 512
> * CONFIG_SYS_NAND_ECCBYTES must be 13 for this BCH8 setup"
>
> I would interpret this so that no modifications are needed
> GPMC_NAND_HW_BCH8_ECC_LAYOUT structure.
> That can't be true even if the mapping was the same as .eccbytes field hae
> wrong value considering what the last line states for BCH8 set-up.
> If above assumption is correct, isn't this really a bug in omap_gpmc.h,
> not just a Linux version related problem?
>
> My questions are:
> 1) Are my findings correct or should I try try find something else?
> 2) If 1) ok, then should I edit both omap_gpmc.h and am335x_evm.h or just
> one of them?
> 3) Is there anything else to be taken into account?
>
> Best regards,
> Matti
>
More information about the U-Boot
mailing list