mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 16:52:14 +02:00
mtd: nand: omap: add CONFIG_NAND_OMAP_ECCSCHEME for selection of ecc-scheme
This patch adds new CONFIG_NAND_OMAP_ECCSCHEME, replacing other distributed CONFIG_xx used for selecting NAND ecc-schemes. This patch aims at solving following issues. 1) Currently ecc-scheme is tied to SoC platform, which prevents user to select other ecc-schemes also supported in hardware. like; - most of OMAP3 SoC platforms use only 1-bit Hamming ecc-scheme, inspite the fact that they can use higher ecc-schemes like 8-bit ecc-schemes with software based error detection (OMAP_ECC_BCH4_CODE_HW_DETECTION_SW). - most of AM33xx SoC plaforms use 8-bit BCH ecc-scheme for now, but hardware supports BCH16 ecc-scheme also. 2) Different platforms use different CONFIG_xx to select ecc-schemes, which adds confusion for user while migrating platforms. - *CONFIG_NAND_OMAP_ELM* which enables ELM hardware engine, selects only 8-bit BCH ecc-scheme with h/w based error-correction (OMAP_ECC_BCH8_CODE_HW) whereas ELM hardware engine supports other ecc-schemes also like; BCH4, and BCH16 (in future). - *CONFIG_NAND_OMAP_BCH8* selects 8-bit BCH ecc-scheme with s/w based error correction (OMAP_ECC_BCH8_CODE_HW_DETECTION_SW). - *CONFIG_SPL_NAND_SOFTECC* selects 1-bit Hamming ecc-scheme using s/w library Thus adding new *CONFIG_NAND_OMAP_ECCSCHEME* de-couples ecc-scheme dependency on SoC platform and NAND driver. And user can select ecc-scheme independently foreach board. However, selection some hardware based ecc-schemes (OMAP_ECC_BCHx_CODE_HW) still depends on presence of ELM hardware engine on SoC. (Refer doc/README.nand) Signed-off-by: Pekon Gupta <pekon@ti.com>
This commit is contained in:
@@ -208,6 +208,29 @@ Platform specific options
|
|||||||
detection. However ECC calculation on such plaforms would still be
|
detection. However ECC calculation on such plaforms would still be
|
||||||
done by GPMC controller.
|
done by GPMC controller.
|
||||||
|
|
||||||
|
CONFIG_NAND_OMAP_ECCSCHEME
|
||||||
|
On OMAP platforms, this CONFIG specifies NAND ECC scheme.
|
||||||
|
It can take following values:
|
||||||
|
OMAP_ECC_HAM1_CODE_SW
|
||||||
|
1-bit Hamming code using software lib.
|
||||||
|
(for legacy devices only)
|
||||||
|
OMAP_ECC_HAM1_CODE_HW
|
||||||
|
1-bit Hamming code using GPMC hardware.
|
||||||
|
(for legacy devices only)
|
||||||
|
OMAP_ECC_BCH4_CODE_HW_DETECTION_SW
|
||||||
|
4-bit BCH code (unsupported)
|
||||||
|
OMAP_ECC_BCH4_CODE_HW
|
||||||
|
4-bit BCH code (unsupported)
|
||||||
|
OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
|
||||||
|
8-bit BCH code with
|
||||||
|
- ecc calculation using GPMC hardware engine,
|
||||||
|
- error detection using software library.
|
||||||
|
- requires CONFIG_BCH to enable software BCH library
|
||||||
|
(For legacy device which do not have ELM h/w engine)
|
||||||
|
OMAP_ECC_BCH8_CODE_HW
|
||||||
|
8-bit BCH code with
|
||||||
|
- ecc calculation using GPMC hardware engine,
|
||||||
|
- error detection using ELM hardware engine.
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
=====
|
=====
|
||||||
|
@@ -161,8 +161,7 @@ BCH8
|
|||||||
|
|
||||||
To enable hardware assisted BCH8 (8-bit BCH [Bose, Chaudhuri, Hocquenghem]) on
|
To enable hardware assisted BCH8 (8-bit BCH [Bose, Chaudhuri, Hocquenghem]) on
|
||||||
OMAP3 devices we can use the BCH library in lib/bch.c. To do so add CONFIG_BCH
|
OMAP3 devices we can use the BCH library in lib/bch.c. To do so add CONFIG_BCH
|
||||||
to enable the library and CONFIG_NAND_OMAP_BCH8 to to enable hardware assisted
|
and set CONFIG_NAND_OMAP_ECCSCHEME=5 (refer README.nand) for selecting BCH8_SW.
|
||||||
syndrom generation to your board config.
|
|
||||||
The NAND OOB layout is the same as in linux kernel, if the linux kernel BCH8
|
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.
|
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
|
When you require the SPL to read with BCH8 there are two more configs to
|
||||||
|
@@ -1004,18 +1004,13 @@ int board_nand_init(struct nand_chip *nand)
|
|||||||
nand->ecc.layout = &omap_ecclayout;
|
nand->ecc.layout = &omap_ecclayout;
|
||||||
|
|
||||||
/* select ECC scheme */
|
/* select ECC scheme */
|
||||||
#if defined(CONFIG_NAND_OMAP_ELM)
|
#if defined(CONFIG_NAND_OMAP_ECCSCHEME)
|
||||||
err = omap_select_ecc_scheme(nand, OMAP_ECC_BCH8_CODE_HW,
|
err = omap_select_ecc_scheme(nand, CONFIG_NAND_OMAP_ECCSCHEME,
|
||||||
CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE);
|
CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE);
|
||||||
#elif defined(CONFIG_NAND_OMAP_BCH8)
|
#else
|
||||||
err = omap_select_ecc_scheme(nand, OMAP_ECC_BCH8_CODE_HW_DETECTION_SW,
|
/* pagesize and oobsize are not required to configure sw ecc-scheme */
|
||||||
CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE);
|
|
||||||
#elif !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_NAND_SOFTECC)
|
|
||||||
err = omap_select_ecc_scheme(nand, OMAP_ECC_HAM1_CODE_SW,
|
err = omap_select_ecc_scheme(nand, OMAP_ECC_HAM1_CODE_SW,
|
||||||
0, 0);
|
0, 0);
|
||||||
#else
|
|
||||||
err = omap_select_ecc_scheme(nand, OMAP_ECC_HAM1_CODE_HW,
|
|
||||||
CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE);
|
|
||||||
#endif
|
#endif
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
@@ -240,7 +240,8 @@
|
|||||||
|
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 14
|
#define CONFIG_SYS_NAND_ECCBYTES 14
|
||||||
|
#define CONFIG_SYS_NAND_ONFI_DETECTION
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
#endif
|
#endif
|
||||||
|
@@ -264,6 +264,7 @@
|
|||||||
|
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 14
|
#define CONFIG_SYS_NAND_ECCBYTES 14
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
|
|
||||||
|
@@ -340,6 +340,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
|
||||||
|
@@ -334,6 +334,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
|
||||||
|
@@ -327,6 +327,7 @@
|
|||||||
|
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
|
|
||||||
|
@@ -353,7 +353,6 @@
|
|||||||
#define CONFIG_SPL_FRAMEWORK
|
#define CONFIG_SPL_FRAMEWORK
|
||||||
#define CONFIG_SPL_BOARD_INIT
|
#define CONFIG_SPL_BOARD_INIT
|
||||||
#define CONFIG_SPL_NAND_SIMPLE
|
#define CONFIG_SPL_NAND_SIMPLE
|
||||||
#define CONFIG_SPL_NAND_SOFTECC
|
|
||||||
|
|
||||||
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
||||||
#define CONFIG_SPL_LIBDISK_SUPPORT
|
#define CONFIG_SPL_LIBDISK_SUPPORT
|
||||||
@@ -395,6 +394,7 @@
|
|||||||
56, 57, 58, 59, 60, 61, 62, 63}
|
56, 57, 58, 59, 60, 61, 62, 63}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 256
|
#define CONFIG_SYS_NAND_ECCSIZE 256
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_SW
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
|
|
||||||
|
@@ -432,6 +432,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
|
||||||
|
@@ -107,6 +107,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
|
||||||
|
@@ -86,6 +86,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
|
||||||
|
@@ -362,6 +362,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
#endif
|
#endif
|
||||||
|
@@ -325,6 +325,7 @@
|
|||||||
10, 11, 12, 13}
|
10, 11, 12, 13}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000
|
||||||
|
|
||||||
|
@@ -196,6 +196,7 @@
|
|||||||
|
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 14
|
#define CONFIG_SYS_NAND_ECCBYTES 14
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_ECCSTEPS 4
|
#define CONFIG_SYS_NAND_ECCSTEPS 4
|
||||||
#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \
|
#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \
|
||||||
|
@@ -225,7 +225,6 @@
|
|||||||
#define CONFIG_SPL_BOARD_INIT
|
#define CONFIG_SPL_BOARD_INIT
|
||||||
#define CONFIG_SPL_CONSOLE
|
#define CONFIG_SPL_CONSOLE
|
||||||
#define CONFIG_SPL_NAND_SIMPLE
|
#define CONFIG_SPL_NAND_SIMPLE
|
||||||
#define CONFIG_SPL_NAND_SOFTECC
|
|
||||||
#define CONFIG_SPL_NAND_WORKSPACE 0x8f07f000 /* below BSS */
|
#define CONFIG_SPL_NAND_WORKSPACE 0x8f07f000 /* below BSS */
|
||||||
|
|
||||||
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
#define CONFIG_SPL_LIBCOMMON_SUPPORT
|
||||||
@@ -262,6 +261,7 @@
|
|||||||
56, 57, 58, 59, 60, 61, 62, 63}
|
56, 57, 58, 59, 60, 61, 62, 63}
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 256
|
#define CONFIG_SYS_NAND_ECCSIZE 256
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 3
|
#define CONFIG_SYS_NAND_ECCBYTES 3
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_SW
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
|
|
||||||
|
@@ -138,7 +138,6 @@
|
|||||||
|
|
||||||
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of NAND */
|
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of NAND */
|
||||||
/* devices */
|
/* devices */
|
||||||
#define CONFIG_NAND_OMAP_BCH8
|
|
||||||
#define CONFIG_BCH
|
#define CONFIG_BCH
|
||||||
#define CONFIG_SYS_NAND_MAX_OOBFREE 2
|
#define CONFIG_SYS_NAND_MAX_OOBFREE 2
|
||||||
#define CONFIG_SYS_NAND_MAX_ECCPOS 56
|
#define CONFIG_SYS_NAND_MAX_ECCPOS 56
|
||||||
@@ -376,6 +375,7 @@
|
|||||||
|
|
||||||
#define CONFIG_SYS_NAND_ECCSIZE 512
|
#define CONFIG_SYS_NAND_ECCSIZE 512
|
||||||
#define CONFIG_SYS_NAND_ECCBYTES 13
|
#define CONFIG_SYS_NAND_ECCBYTES 13
|
||||||
|
#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
|
||||||
|
|
||||||
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user