• M
    mtd: rawnand: denali: set SPARE_AREA_SKIP_BYTES register to 8 if unset · 9cc1cbc1
    Masahiro Yamada 提交于
    [ Upstream commit 0d55c668b218a1db68b5044bce4de74e1bd0f0c8 ]
    
    NAND devices need additional data area (OOB) for error correction,
    but it is also used for Bad Block Marker (BBM).  In many cases, the
    first byte in OOB is used for BBM, but the location actually depends
    on chip vendors.  The NAND controller should preserve the precious
    BBM to keep track of bad blocks.
    
    In Denali IP, the SPARE_AREA_SKIP_BYTES register is used to specify
    the number of bytes to skip from the start of OOB.  The ECC engine
    will automatically skip the specified number of bytes when it gets
    access to OOB area.
    
    The same value for SPARE_AREA_SKIP_BYTES should be used between
    firmware and the operating system if you intend to use the NAND
    device across the control hand-off.
    
    In fact, the current denali.c code expects firmware to have already
    set the SPARE_AREA_SKIP_BYTES register, then reads the value out.
    
    If no firmware (or bootloader) has initialized the controller, the
    register value is zero, which is the default after power-on-reset.
    In other words, the Linux driver cannot initialize the controller
    by itself.
    
    Some possible solutions are:
    
     [1] Add a DT property to specify the skipped bytes in OOB
     [2] Associate the preferred value with compatible
     [3] Hard-code the default value in the driver
    
    My first attempt was [1], but in the review process, [3] was suggested
    as a counter-implementation.
    (https://lore.kernel.org/patchwork/patch/983055/)
    
    The default value 8 was chosen to match to the boot ROM of the UniPhier
    platform.  The preferred value may vary by platform.  If so, please
    trade up to a different solution.
    Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
    Reviewed-by: NBoris Brezillon <boris.brezillon@bootlin.com>
    Signed-off-by: NMiquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    9cc1cbc1
denali.c 37.7 KB