From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4E062C433F5 for ; Wed, 22 Sep 2021 18:53:16 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6C4FC61107 for ; Wed, 22 Sep 2021 18:53:13 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6C4FC61107 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=konsulko.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id CEA1B83375; Wed, 22 Sep 2021 20:52:25 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=konsulko.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by phobos.denx.de (Postfix, from userid 109) id A32128334C; Wed, 22 Sep 2021 20:51:40 +0200 (CEST) Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 202DE83330 for ; Wed, 22 Sep 2021 20:50:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=konsulko.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=tom.rini@gmail.com Received: by mail-qt1-f180.google.com with SMTP id c20so3741587qtb.2 for ; Wed, 22 Sep 2021 11:50:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=sRsR2HY/i/nlhFLYAppuKzkZYtVWr4xhiuq0Lb7rcvk=; b=26kDZfkeNbgzu8X5MpyJBUzSMxEiJSPW+sCH/cteHPadiKW3FYnOGI37gDeU2N5qgM dpVb+SgPWe3PiVgqm31EUQna5MJh01jnqUNAhKVOtK2Do5GJXFZXbiSFMYdn4HaLNb8r p5GyndQ2eKlTTAVza4aSPxiTAKnhfs8FNE3Cmg/wJ1dLGknuCtudnCL5GKMKXyW341A5 rk8967EMare6CCPnCtqyff5431CcCzHeUd19pnfH+7pFUCdXPqLP5ASlZKP7ZYlgmr/6 985aWNm290cO5eja/Z/qZLgWoc93bUB9mnpew6IurLof/7AlYAZ2PVV104UZjeXVV0Sl Rbyw== X-Gm-Message-State: AOAM5333pHFnp62KHkZPPJq2xEHACeCmQ3gGHtws2snKaTpw2l/4GQbQ ooK4V9kvBcaRFWWWSzl3TZ9qbF1cww== X-Google-Smtp-Source: ABdhPJxHTk8XjybZ9EWUvWPUEVAoQIleXWEcVWTU4Riam36nihnSCOA8w3yBgPGhepi0ByKhi0BQRA== X-Received: by 2002:a05:622a:110c:: with SMTP id e12mr812835qty.375.1632336656994; Wed, 22 Sep 2021 11:50:56 -0700 (PDT) Received: from bill-the-cat.lan (2603-6081-7b01-cbda-01ae-c37f-f577-ef41.res6.spectrum.com. [2603:6081:7b01:cbda:1ae:c37f:f577:ef41]) by smtp.gmail.com with ESMTPSA id v24sm2398860qkv.11.2021.09.22.11.50.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Sep 2021 11:50:56 -0700 (PDT) From: Tom Rini To: u-boot@lists.denx.de Subject: [PATCH 14/14] Convert CONFIG_NAND_OMAP_ECCSCHEME to Kconfig Date: Wed, 22 Sep 2021 14:50:39 -0400 Message-Id: <20210922185039.30707-14-trini@konsulko.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210922185039.30707-1-trini@konsulko.com> References: <20210922185039.30707-1-trini@konsulko.com> X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean The values of CONFIG_NAND_OMAP_ECCSCHEME map to the enum in include/linux/mtd/omap_gpmc.h for valid ECC schemes. Make which one we will use be a choice statement, enumerating the ones which we have implemented. Signed-off-by: Tom Rini --- configs/am335x_guardian_defconfig | 1 + configs/am3517_evm_defconfig | 1 + configs/am43xx_evm_defconfig | 1 + configs/am43xx_evm_rtconly_defconfig | 1 + configs/am43xx_evm_usbhost_boot_defconfig | 1 + configs/am43xx_hs_evm_defconfig | 1 + configs/devkit8000_defconfig | 1 + configs/etamin_defconfig | 1 + configs/igep00x0_defconfig | 1 + configs/omap35_logic_defconfig | 1 + configs/omap35_logic_somlv_defconfig | 1 + configs/omap3_beagle_defconfig | 1 + configs/omap3_evm_defconfig | 1 + configs/omap3_logic_defconfig | 1 + configs/omap3_logic_somlv_defconfig | 1 + doc/README.nand | 66 -------------- drivers/mtd/nand/raw/Kconfig | 103 +++++++++++++++++++++- include/configs/am335x_evm.h | 1 - include/configs/am335x_guardian.h | 1 - include/configs/am335x_igep003x.h | 1 - include/configs/am3517_evm.h | 1 - include/configs/am43xx_evm.h | 1 - include/configs/baltos.h | 1 - include/configs/brppt1.h | 1 - include/configs/chiliboard.h | 1 - include/configs/cm_t43.h | 1 - include/configs/devkit8000.h | 1 - include/configs/dra7xx_evm.h | 1 - include/configs/etamin.h | 2 - include/configs/omap3_beagle.h | 1 - include/configs/omap3_evm.h | 1 - include/configs/omap3_igep00x0.h | 1 - include/configs/omap3_logic.h | 1 - include/configs/phycore_am335x_r2.h | 1 - include/configs/siemens-am33x-common.h | 1 - include/configs/tam3517-common.h | 1 - include/configs/ti816x_evm.h | 1 - 37 files changed, 116 insertions(+), 89 deletions(-) diff --git a/configs/am335x_guardian_defconfig b/configs/am335x_guardian_defconfig index 272d5b877514..ea4032fe1ff0 100644 --- a/configs/am335x_guardian_defconfig +++ b/configs/am335x_guardian_defconfig @@ -88,6 +88,7 @@ CONFIG_MISC=y CONFIG_MTD=y CONFIG_DM_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH16_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x40000 CONFIG_SYS_NAND_ONFI_DETECTION=y CONFIG_SYS_NAND_PAGE_COUNT=0x40 diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig index 665c54a88189..17b301756d9c 100644 --- a/configs/am3517_evm_defconfig +++ b/configs/am3517_evm_defconfig @@ -57,6 +57,7 @@ CONFIG_DM_PCA953X=y CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/am43xx_evm_defconfig b/configs/am43xx_evm_defconfig index 59256c1894d8..443bdca096bb 100644 --- a/configs/am43xx_evm_defconfig +++ b/configs/am43xx_evm_defconfig @@ -60,6 +60,7 @@ CONFIG_SYS_I2C_EEPROM_ADDR=0x50 CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH16_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x40000 CONFIG_SYS_NAND_ONFI_DETECTION=y CONFIG_SYS_NAND_PAGE_COUNT=0x40 diff --git a/configs/am43xx_evm_rtconly_defconfig b/configs/am43xx_evm_rtconly_defconfig index 8b35144164b2..183801120296 100644 --- a/configs/am43xx_evm_rtconly_defconfig +++ b/configs/am43xx_evm_rtconly_defconfig @@ -47,6 +47,7 @@ CONFIG_SYS_I2C_EEPROM_ADDR=0x50 CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH16_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x40000 CONFIG_SYS_NAND_ONFI_DETECTION=y CONFIG_SYS_NAND_PAGE_COUNT=0x40 diff --git a/configs/am43xx_evm_usbhost_boot_defconfig b/configs/am43xx_evm_usbhost_boot_defconfig index 119392d84826..c5a6a07b3240 100644 --- a/configs/am43xx_evm_usbhost_boot_defconfig +++ b/configs/am43xx_evm_usbhost_boot_defconfig @@ -63,6 +63,7 @@ CONFIG_MISC=y CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH16_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x40000 CONFIG_SYS_NAND_ONFI_DETECTION=y CONFIG_SYS_NAND_PAGE_COUNT=0x40 diff --git a/configs/am43xx_hs_evm_defconfig b/configs/am43xx_hs_evm_defconfig index 2ab15c975b99..1eb394cbd8df 100644 --- a/configs/am43xx_hs_evm_defconfig +++ b/configs/am43xx_hs_evm_defconfig @@ -65,6 +65,7 @@ CONFIG_SYS_I2C_EEPROM_ADDR=0x50 CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH16_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x40000 CONFIG_SYS_NAND_ONFI_DETECTION=y CONFIG_SYS_NAND_PAGE_COUNT=0x40 diff --git a/configs/devkit8000_defconfig b/configs/devkit8000_defconfig index 1c067fd7dfbc..ccdd4f606f43 100644 --- a/configs/devkit8000_defconfig +++ b/configs/devkit8000_defconfig @@ -41,6 +41,7 @@ CONFIG_TWL4030_LED=y CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_HAM1_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/etamin_defconfig b/configs/etamin_defconfig index 65bdcf6bf73f..59a919becebb 100644 --- a/configs/etamin_defconfig +++ b/configs/etamin_defconfig @@ -85,6 +85,7 @@ CONFIG_SPL_SYS_I2C_LEGACY=y CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH16_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x80000 CONFIG_SYS_NAND_ONFI_DETECTION=y CONFIG_SYS_NAND_PAGE_COUNT=0x80 diff --git a/configs/igep00x0_defconfig b/configs/igep00x0_defconfig index 17e793c313e2..8f6e13e2a87b 100644 --- a/configs/igep00x0_defconfig +++ b/configs/igep00x0_defconfig @@ -60,6 +60,7 @@ CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_SYS_MTDPARTS_RUNTIME=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/omap35_logic_defconfig b/configs/omap35_logic_defconfig index fe37a981e43f..9d8ac94d2a5e 100644 --- a/configs/omap35_logic_defconfig +++ b/configs/omap35_logic_defconfig @@ -57,6 +57,7 @@ CONFIG_SYS_I2C_EEPROM_ADDR=0x50 CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/omap35_logic_somlv_defconfig b/configs/omap35_logic_somlv_defconfig index 435e0f7e2bb3..e54646c21cef 100644 --- a/configs/omap35_logic_somlv_defconfig +++ b/configs/omap35_logic_somlv_defconfig @@ -62,6 +62,7 @@ CONFIG_FLASH_CFI_MTD=y CONFIG_SYS_FLASH_PROTECTION=y CONFIG_SYS_FLASH_CFI=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/omap3_beagle_defconfig b/configs/omap3_beagle_defconfig index c0830dcfc1e6..206118e6aff6 100644 --- a/configs/omap3_beagle_defconfig +++ b/configs/omap3_beagle_defconfig @@ -74,6 +74,7 @@ CONFIG_TWL4030_LED=y CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_HAM1_CODE_HW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/omap3_evm_defconfig b/configs/omap3_evm_defconfig index 0174b3a669ae..b89ab392d0a7 100644 --- a/configs/omap3_evm_defconfig +++ b/configs/omap3_evm_defconfig @@ -62,6 +62,7 @@ CONFIG_SPL_SYS_I2C_LEGACY=y CONFIG_MMC_OMAP_HS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/omap3_logic_defconfig b/configs/omap3_logic_defconfig index 18e87f125cc5..becf862dcbe2 100644 --- a/configs/omap3_logic_defconfig +++ b/configs/omap3_logic_defconfig @@ -57,6 +57,7 @@ CONFIG_MMC_OMAP_HS=y CONFIG_MMC_OMAP36XX_PINS=y CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/configs/omap3_logic_somlv_defconfig b/configs/omap3_logic_somlv_defconfig index 1c093162d334..f8518a01bc2a 100644 --- a/configs/omap3_logic_somlv_defconfig +++ b/configs/omap3_logic_somlv_defconfig @@ -63,6 +63,7 @@ CONFIG_FLASH_CFI_MTD=y CONFIG_SYS_FLASH_PROTECTION=y CONFIG_SYS_FLASH_CFI=y CONFIG_MTD_RAW_NAND=y +CONFIG_NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW=y CONFIG_SYS_NAND_BLOCK_SIZE=0x20000 CONFIG_SYS_NAND_PAGE_COUNT=0x40 CONFIG_SYS_NAND_PAGE_SIZE=0x800 diff --git a/doc/README.nand b/doc/README.nand index f6460dba6031..ffcea9079990 100644 --- a/doc/README.nand +++ b/doc/README.nand @@ -200,72 +200,6 @@ Platform specific options so those platforms should use CONFIG_SPL_NAND_SIMPLE for enabling SPL-NAND driver with software ECC correction support. - 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. - OMAP_ECC_BCH16_CODE_HW - 16-bit BCH code with - - ecc calculation using GPMC hardware engine, - - error detection using ELM hardware engine. - - How to select ECC scheme on OMAP and AMxx platforms ? - ----------------------------------------------------- - Though higher ECC schemes have more capability to detect and correct - bit-flips, but still selection of ECC scheme is dependent on following - - hardware engines present in SoC. - Some legacy OMAP SoC do not have ELM h/w engine thus such - SoC cannot support BCHx_HW ECC schemes. - - size of OOB/Spare region - With higher ECC schemes, more OOB/Spare area is required to - store ECC. So choice of ECC scheme is limited by NAND oobsize. - - In general following expression can help: - NAND_OOBSIZE >= 2 + (NAND_PAGESIZE / 512) * ECC_BYTES - where - NAND_OOBSIZE = number of bytes available in - OOB/spare area per NAND page. - NAND_PAGESIZE = bytes in main-area of NAND page. - ECC_BYTES = number of ECC bytes generated to - protect 512 bytes of data, which is: - 3 for HAM1_xx ecc schemes - 7 for BCH4_xx ecc schemes - 14 for BCH8_xx ecc schemes - 26 for BCH16_xx ecc schemes - - example to check for BCH16 on 2K page NAND - NAND_PAGESIZE = 2048 - NAND_OOBSIZE = 64 - 2 + (2048 / 512) * 26 = 106 > NAND_OOBSIZE - Thus BCH16 cannot be supported on 2K page NAND. - - However, for 4K pagesize NAND - NAND_PAGESIZE = 4096 - NAND_OOBSIZE = 224 - ECC_BYTES = 26 - 2 + (4096 / 512) * 26 = 210 < NAND_OOBSIZE - Thus BCH16 can be supported on 4K page NAND. - - CONFIG_NAND_OMAP_GPMC_PREFETCH On OMAP platforms that use the GPMC controller (CONFIG_NAND_OMAP_GPMC_PREFETCH), this options enables the code that diff --git a/drivers/mtd/nand/raw/Kconfig b/drivers/mtd/nand/raw/Kconfig index df7a5513d085..e8f54d54bdd7 100644 --- a/drivers/mtd/nand/raw/Kconfig +++ b/drivers/mtd/nand/raw/Kconfig @@ -152,9 +152,10 @@ config NAND_OMAP_GPMC do ECC calculation (not ECC error detection) for HAM1, BCH4, BCH8 and BCH16 ECC algorithms. +if NAND_OMAP_GPMC + config NAND_OMAP_GPMC_PREFETCH bool "Enable GPMC Prefetch" - depends on NAND_OMAP_GPMC default y help On OMAP platforms that use the GPMC controller @@ -163,7 +164,7 @@ config NAND_OMAP_GPMC_PREFETCH config NAND_OMAP_ELM bool "Enable ELM driver for OMAPxx and AMxx platforms." - depends on NAND_OMAP_GPMC && !OMAP34XX + depends on !OMAP34XX help ELM controller is used for ECC error detection (not ECC calculation) of BCH4, BCH8 and BCH16 ECC algorithms. @@ -172,6 +173,104 @@ config NAND_OMAP_ELM detection. However ECC calculation on such plaforms would still be done by GPMC controller. +choice + prompt "ECC scheme" + default NAND_OMAP_ECCSCHEME_BCH8_CODE_HW + help + 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. + OMAP_ECC_BCH16_CODE_HW + 16-bit BCH code with + - ecc calculation using GPMC hardware engine, + - error detection using ELM hardware engine. + + How to select ECC scheme on OMAP and AMxx platforms ? + ----------------------------------------------------- + Though higher ECC schemes have more capability to detect and correct + bit-flips, but still selection of ECC scheme is dependent on following + - hardware engines present in SoC. + Some legacy OMAP SoC do not have ELM h/w engine thus such + SoC cannot support BCHx_HW ECC schemes. + - size of OOB/Spare region + With higher ECC schemes, more OOB/Spare area is required to + store ECC. So choice of ECC scheme is limited by NAND oobsize. + + In general following expression can help: + NAND_OOBSIZE >= 2 + (NAND_PAGESIZE / 512) * ECC_BYTES + where + NAND_OOBSIZE = number of bytes available in + OOB/spare area per NAND page. + NAND_PAGESIZE = bytes in main-area of NAND page. + ECC_BYTES = number of ECC bytes generated to + protect 512 bytes of data, which is: + 3 for HAM1_xx ecc schemes + 7 for BCH4_xx ecc schemes + 14 for BCH8_xx ecc schemes + 26 for BCH16_xx ecc schemes + + example to check for BCH16 on 2K page NAND + NAND_PAGESIZE = 2048 + NAND_OOBSIZE = 64 + 2 + (2048 / 512) * 26 = 106 > NAND_OOBSIZE + Thus BCH16 cannot be supported on 2K page NAND. + + However, for 4K pagesize NAND + NAND_PAGESIZE = 4096 + NAND_OOBSIZE = 224 + ECC_BYTES = 26 + 2 + (4096 / 512) * 26 = 210 < NAND_OOBSIZE + Thus BCH16 can be supported on 4K page NAND. + +config NAND_OMAP_ECCSCHEME_HAM1_CODE_SW + bool "1-bit Hamming code using software lib" + +config NAND_OMAP_ECCSCHEME_HAM1_CODE_HW + bool "1-bit Hamming code using GPMC hardware" + +config NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW + bool "8-bit BCH code with HW calculation SW error detection" + +config NAND_OMAP_ECCSCHEME_BCH8_CODE_HW + bool "8-bit BCH code with HW calculation and error detection" + +config NAND_OMAP_ECCSCHEME_BCH16_CODE_HW + bool "16-bit BCH code with HW calculation and error detection" + +endchoice + +config NAND_OMAP_ECCSCHEME + int + default 1 if NAND_OMAP_ECCSCHEME_HAM1_CODE_SW + default 2 if NAND_OMAP_ECCSCHEME_HAM1_CODE_HW + default 5 if NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW + default 6 if NAND_OMAP_ECCSCHEME_BCH8_CODE_HW + default 7 if NAND_OMAP_ECCSCHEME_BCH16_CODE_HW + help + This must be kept in sync with the enum in + include/linux/mtd/omap_gpmc.h + +endif + config NAND_VF610_NFC bool "Support for Freescale NFC for VF610" select SYS_NAND_SELF_INIT diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h index dc8c3e2a5d1d..7fb1b3a3e3fa 100644 --- a/include/configs/am335x_evm.h +++ b/include/configs/am335x_evm.h @@ -191,7 +191,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW /* NAND: SPL related configs */ #ifdef CONFIG_SPL_OS_BOOT #define CONFIG_SYS_NAND_SPL_KERNEL_OFFS 0x00200000 /* kernel offset */ diff --git a/include/configs/am335x_guardian.h b/include/configs/am335x_guardian.h index fd7d589dd6ce..68b4e4f59033 100644 --- a/include/configs/am335x_guardian.h +++ b/include/configs/am335x_guardian.h @@ -130,7 +130,6 @@ } #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 26 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH16_CODE_HW #define MTDIDS_DEFAULT "nand0=nand.0" #endif /* CONFIG_MTD_RAW_NAND */ diff --git a/include/configs/am335x_igep003x.h b/include/configs/am335x_igep003x.h index 4a303b702c59..339a975c74cc 100644 --- a/include/configs/am335x_igep003x.h +++ b/include/configs/am335x_igep003x.h @@ -115,6 +115,5 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW #endif /* ! __CONFIG_IGEP003X_H */ diff --git a/include/configs/am3517_evm.h b/include/configs/am3517_evm.h index 547d27322e17..ab410faff626 100644 --- a/include/configs/am3517_evm.h +++ b/include/configs/am3517_evm.h @@ -43,7 +43,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 13 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW_DETECTION_SW #define CONFIG_SYS_NAND_MAX_OOBFREE 2 #define CONFIG_SYS_NAND_MAX_ECCPOS 56 #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE diff --git a/include/configs/am43xx_evm.h b/include/configs/am43xx_evm.h index 56b85df4cf82..9342d2063df4 100644 --- a/include/configs/am43xx_evm.h +++ b/include/configs/am43xx_evm.h @@ -161,7 +161,6 @@ #ifdef CONFIG_MTD_RAW_NAND /* NAND: device related configs */ /* NAND: driver related configs */ -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH16_CODE_HW #define CONFIG_SYS_NAND_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, \ diff --git a/include/configs/baltos.h b/include/configs/baltos.h index f55f57ce22e9..32f2174641a8 100644 --- a/include/configs/baltos.h +++ b/include/configs/baltos.h @@ -219,7 +219,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #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 #endif #endif diff --git a/include/configs/brppt1.h b/include/configs/brppt1.h index caedd3004b95..4c56a8a59b07 100644 --- a/include/configs/brppt1.h +++ b/include/configs/brppt1.h @@ -144,7 +144,6 @@ NANDTGTS \ #define CONFIG_SYS_MAX_NAND_DEVICE 1 #define CONFIG_SYS_NAND_BASE 0x8000000 /* don't change OMAP_ELM, ECCSCHEME. ROM code only supports this */ -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW #define CONFIG_SYS_NAND_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, \ diff --git a/include/configs/chiliboard.h b/include/configs/chiliboard.h index c7b2131c26c0..49a8d7103180 100644 --- a/include/configs/chiliboard.h +++ b/include/configs/chiliboard.h @@ -134,7 +134,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW /* NAND: SPL related configs */ /* USB configuration */ diff --git a/include/configs/cm_t43.h b/include/configs/cm_t43.h index 9ad883d9ffb1..9708768a6891 100644 --- a/include/configs/cm_t43.h +++ b/include/configs/cm_t43.h @@ -25,7 +25,6 @@ /* NAND support */ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW #define CONFIG_SYS_NAND_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, \ diff --git a/include/configs/devkit8000.h b/include/configs/devkit8000.h index 8113d759cf91..591a33fca68f 100644 --- a/include/configs/devkit8000.h +++ b/include/configs/devkit8000.h @@ -138,7 +138,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 3 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW #define CONFIG_SYS_NAND_U_BOOT_SIZE 0x200000 diff --git a/include/configs/dra7xx_evm.h b/include/configs/dra7xx_evm.h index 1e3a66f9d9e8..a023332203c1 100644 --- a/include/configs/dra7xx_evm.h +++ b/include/configs/dra7xx_evm.h @@ -86,7 +86,6 @@ #ifdef CONFIG_MTD_RAW_NAND /* NAND: device related configs */ /* NAND: driver related configs */ -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW #define CONFIG_SYS_NAND_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, \ diff --git a/include/configs/etamin.h b/include/configs/etamin.h index 245119db6781..b04e5266e36e 100644 --- a/include/configs/etamin.h +++ b/include/configs/etamin.h @@ -16,8 +16,6 @@ /* NAND specific changes for etamin due to different page size */ #undef CONFIG_SYS_NAND_ECCPOS #undef CONFIG_SYS_ENV_SECT_SIZE -#undef CONFIG_NAND_OMAP_ECCSCHEME -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH16_CODE_HW #define CONFIG_SYS_ENV_SECT_SIZE (512 << 10) /* 512 KiB */ #define CONFIG_SYS_NAND_ECCPOS { 2, 3, 4, 5, 6, 7, 8, 9, \ diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h index e8f455a5ca2f..270c328ff7af 100644 --- a/include/configs/omap3_beagle.h +++ b/include/configs/omap3_beagle.h @@ -26,7 +26,6 @@ 10, 11, 12, 13} #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 3 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_HAM1_CODE_HW #define CONFIG_SYS_ENV_SECT_SIZE SZ_128K /* NAND: SPL falcon mode configs */ #if defined(CONFIG_SPL_OS_BOOT) diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h index 8d1233c075eb..eeb9ef8c741a 100644 --- a/include/configs/omap3_evm.h +++ b/include/configs/omap3_evm.h @@ -31,7 +31,6 @@ 10, 11, 12, 13} #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 3 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW_DETECTION_SW #define CONFIG_SYS_ENV_SECT_SIZE SZ_128K /* NAND: SPL falcon mode configs */ #if defined(CONFIG_SPL_OS_BOOT) diff --git a/include/configs/omap3_igep00x0.h b/include/configs/omap3_igep00x0.h index ced449d7ad39..c1ef040ce360 100644 --- a/include/configs/omap3_igep00x0.h +++ b/include/configs/omap3_igep00x0.h @@ -84,6 +84,5 @@ 50, 51, 52, 53, 54, 55, 56, 57, } #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW_DETECTION_SW #endif /* __IGEP00X0_H */ diff --git a/include/configs/omap3_logic.h b/include/configs/omap3_logic.h index f6b5b5f986db..908114e2a92a 100644 --- a/include/configs/omap3_logic.h +++ b/include/configs/omap3_logic.h @@ -44,7 +44,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 13 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW_DETECTION_SW #define CONFIG_SYS_NAND_MAX_OOBFREE 2 #define CONFIG_SYS_NAND_MAX_ECCPOS 56 #endif diff --git a/include/configs/phycore_am335x_r2.h b/include/configs/phycore_am335x_r2.h index 935bb7a07c0f..af6f7e14dfde 100644 --- a/include/configs/phycore_am335x_r2.h +++ b/include/configs/phycore_am335x_r2.h @@ -96,7 +96,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW /* NAND: SPL related configs */ #ifdef CONFIG_SPL_OS_BOOT diff --git a/include/configs/siemens-am33x-common.h b/include/configs/siemens-am33x-common.h index fd74d5735e53..615458cde8bc 100644 --- a/include/configs/siemens-am33x-common.h +++ b/include/configs/siemens-am33x-common.h @@ -82,7 +82,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #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_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ diff --git a/include/configs/tam3517-common.h b/include/configs/tam3517-common.h index 34e4309dad7c..0a2309144a06 100644 --- a/include/configs/tam3517-common.h +++ b/include/configs/tam3517-common.h @@ -133,7 +133,6 @@ 56, 57, 58, 59, 60, 61, 62, 63} #define CONFIG_SYS_NAND_ECCSIZE 256 #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 diff --git a/include/configs/ti816x_evm.h b/include/configs/ti816x_evm.h index 5964b59da825..fa99152d6f6d 100644 --- a/include/configs/ti816x_evm.h +++ b/include/configs/ti816x_evm.h @@ -68,7 +68,6 @@ #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 -#define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW /* SPL */ /* Defines for SPL */ -- 2.17.1