• Pekon Gupta's avatar
    mtd: nand: omap2: clean-up BCHx_HW and BCHx_SW ECC configurations in device_probe · a919e511
    Pekon Gupta authored
    current implementation in omap3_init_bch() has some redundant code like:
    (1) omap3_init_bch() re-probes the DT-binding to detect presence of ELM h/w
        engine on SoC. And based on that it selects implemetation of ecc-scheme.
        However, this is already done as part of GPMC DT parsing.
    (2) As omap3_init_bch() serves as common function for configuring all types of
        BCHx ecc-schemes, so there are multiple levels of redudant if..then..else
        checks while populating nand_chip->ecc.
    
    This patch make following changes to OMAP NAND driver:
    (1) removes omap3_init_bch(): each ecc-scheme is individually configured in
        omap_nand_probe() there by removing redundant if..then..else checks.
    (2) adds is_elm_present(): re-probing of ELM device via DT is not required as
        it's done in GPMC driver probe. Thus is_elm_present() just initializes ELM
        driver with NAND probe data, when ecc-scheme with h/w based error-detection
        is used.
    (3) separates out configuration of different flavours of "BCH4" and "BCH8"
        ecc-schemes as given in below table
    (4) conditionally compiles callbacks implementations of ecc.hwctl(),
        ecc.calculate(), ecc.correct() to avoid warning of un-used functions.
    
    +---------------------------------------+---------------+---------------+
    | ECC scheme                            |ECC calculation|Error detection|
    +---------------------------------------+---------------+---------------+
    |OMAP_ECC_HAM1_CODE_HW                  |H/W (GPMC)     |S/W            |
    +---------------------------------------+---------------+---------------+
    |OMAP_ECC_BCH4_CODE_HW_DETECTION_SW     |H/W (GPMC)     |S/W (lib/bch.c)|
    | (needs CONFIG_MTD_NAND_ECC_BCH)       |               |               |
    |                                       |               |               |
    |OMAP_ECC_BCH4_CODE_HW                  |H/W (GPMC)     |H/W (ELM)      |
    | (needs CONFIG_MTD_NAND_OMAP_BCH &&    |               |               |
    |        ti,elm-id)                     |               |               |
    +---------------------------------------+---------------+---------------+
    |OMAP_ECC_BCH8_CODE_HW_DETECTION_SW     |H/W (GPMC)     |S/W (lib/bch.c)|
    | (needs CONFIG_MTD_NAND_ECC_BCH)       |               |               |
    |                                       |               |               |
    |OMAP_ECC_BCH8_CODE_HW                  |H/W (GPMC)     |H/W (ELM)      |
    | (needs CONFIG_MTD_NAND_OMAP_BCH &&    |               |               |
    |        ti,elm-id)                     |               |               |
    +---------------------------------------+---------------+---------------+
    
    - 'CONFIG_MTD_NAND_ECC_BCH' is generic KConfig required to build lib/bch.c
        which is required for ECC error detection done in software.
        (mainly used for legacy platforms which do not have on-chip ELM engine)
    
    - 'CONFIG_MTD_NAND_OMAP_BCH' is OMAP specific Kconfig to detemine presence
        on ELM h/w engine on SoC.
    Signed-off-by: default avatarPekon Gupta <pekon@ti.com>
    Tested-by: default avatarEzequiel Garcia <ezequiel.garcia@free-electrons.com>
    Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
    a919e511
omap2.c 59.5 KB