Skip to content
  • Nikita Kiryanov's avatar
    mtd: nand: omap: fix ecc ops assignment when changing ecc · fcd05245
    Nikita Kiryanov authored
    
    
    If we change to software ecc and then back to hardware ecc, the nand ecc ops
    pointers are populated with incorrect function pointers. This is related to the
    way nand_scan_tail() handles assigning functions to ecc ops:
    
    If we are switching to software ecc/no ecc, it assigns default functions to the
    ecc ops pointers unconditionally, but if we are switching to hardware ecc,
    the default hardware ecc functions are assigned to ops pointers only if these
    pointers are NULL (so that drivers could set their own functions). In the case
    of omap_gpmc.c driver, when we switch to sw ecc, sw ecc functions are
    assigned to ecc ops by nand_scan_tail(), and when we later switch to hw ecc,
    the ecc ops pointers are not NULL, so nand_scan_tail() does not overwrite
    them with hw ecc functions.
    The result: sw ecc functions used to write hw ecc data.
    
    Clear the ecc ops pointers in omap_gpmc.c when switching ecc types, so that
    ops which were not assigned by the driver will get the correct default values
    from nand_scan_tail().
    
    Cc: Scott Wood <scottwood@freescale.com>
    Cc: Pekon Gupta <pekon@ti.com>
    Signed-off-by: default avatarNikita Kiryanov <nikita@compulab.co.il>
    fcd05245