• Roger Quadros's avatar
    mtd: nand: omap2: Fix subpage write · 739c6441
    Roger Quadros authored
    Since v4.12, NAND subpage writes were causing a NULL pointer
    dereference on OMAP platforms (omap2-nand) using OMAP_ECC_BCH4_CODE_HW,
    OMAP_ECC_BCH8_CODE_HW and OMAP_ECC_BCH16_CODE_HW.
    
    This is because for those ECC modes, omap_calculate_ecc_bch()
    generates ECC bytes for the entire (multi-sector) page and this can
    overflow the ECC buffer provided by nand_write_subpage_hwecc()
    as it expects ecc.calculate() to return ECC bytes for just one sector.
    
    However, the root cause of the problem is present since v3.9
    but was not seen then as NAND buffers were being allocated
    as one big chunk prior to commit 3deb9979 ("mtd: nand: allocate
    aligned buffers if NAND_OWN_BUFFERS is unset").
    
    Fix the issue by providing a OMAP optimized write_subpage()
    implementation.
    
    Fixes: 62116e51 ("mtd: nand: omap2: Support for hardware BCH error correction.")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
    Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
    739c6441
omap2.c 63.4 KB