
Hi Stefan,
From: Stefan Roese [mailto:sr@denx.de]
On 10.04.2014 11:35, Pekon Gupta wrote: ELM hardware engine support ECC error detection for multiple ECC strengths like +------+------------------------+ |Type | ECC syndrome length | +------+------------------------+ |BCH4 | 6.5 bytes = 13 nibbles | |BCH8 | 13 byte = 26 nibbles | |BCH16 | 26 bytes = 52 nibbles | +------+------------------------+
Current implementation of omap_elm driver uses ECC syndrom length (in 'nibbles') to differentiate between BCH4/BCH8/BCH16. This patch replaces it with 'bch_type'
Signed-off-by: Pekon Gupta pekon@ti.com
drivers/mtd/nand/omap_elm.c | 20 ++++++++------------ drivers/mtd/nand/omap_gpmc.c | 10 ++-------- include/linux/mtd/omap_elm.h | 2 +- 3 files changed, 11 insertions(+), 21 deletions(-)
diff --git a/drivers/mtd/nand/omap_elm.c b/drivers/mtd/nand/omap_elm.c index 4c65f3b..5b2172a 100644 --- a/drivers/mtd/nand/omap_elm.c +++ b/drivers/mtd/nand/omap_elm.c @@ -24,14 +24,12 @@ struct elm *elm_cfg;
/**
- elm_load_syndromes - Load BCH syndromes based on nibble selection
- elm_load_syndromes - Load BCH syndromes based on bch_type selection
- @syndrome: BCH syndrome
- @nibbles:
- @bch_type: BCH4/BCH8/BCH16
- @poly: Syndrome Polynomial set to use
*/
- Load BCH syndromes based on nibble selection
-static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly) +static void elm_load_syndromes(u8 *syndrome, enum bch_level bch_type, u8 poly) { u32 *ptr; u32 val; @@ -47,8 +45,7 @@ static void elm_load_syndromes(u8 *syndrome, u32 nibbles, u8 poly) (syndrome[7] << 24); writel(val, ptr);
- /* BCH 8-bit with 26 nibbles (4*8=32) */
- if (nibbles > 13) {
- if (bch_type == BCH_4_BIT || bch_type == BCH_8_BIT) {
Is this correct? Shouldn't this be:
- if (bch_type == BCH_8_BIT || bch_type == BCH_16_BIT) {
instead?
yes you are correct. Thanks for pointing this out. Sorry, as BCH_4_BIT and BCH_16_BIT support is still not added to omap_gpmc driver so this bug wasn't detected. I'll fix this in next version.
with regards, pekon