• Boris Brezillon's avatar
    mtd: nand: force drivers to explicitly send READ/PROG commands · 25f815f6
    Boris Brezillon authored
    The core currently send the READ0 and SEQIN+PAGEPROG commands in
    nand_do_read/write_ops(). This is inconsistent with
    ->read/write_oob[_raw]() hooks behavior which are expected to send
    these commands.
    
    There's already a flag (NAND_ECC_CUSTOM_PAGE_ACCESS) to inform the core
    that a specific controller wants to send the READ/SEQIN+PAGEPROG
    commands on its own, but it's an opt-in flag, and existing drivers are
    unlikely to be updated to pass it.
    
    Moreover, some controllers cannot dissociate the READ/PAGEPROG commands
    from the associated data transfer and ECC engine activation, and
    developers have to hack things in their ->cmdfunc() implementation to
    handle such complex cases, or have to accept the perf penalty of sending
    twice the same command.
    To address this problem we are planning on adding a new interface which
    is passed all information about a NAND operation (including the amount
    of data to transfer) and replacing all calls to ->cmdfunc() to calls to
    this new ->exec_op() hook. But, in order to do that, we need to have all
    ->cmdfunc() calls placed near their associated ->read/write_buf/byte()
    calls.
    
    Modify the core and relevant drivers to make NAND_ECC_CUSTOM_PAGE_ACCESS
    the default case, and remove this flag.
    Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
    [miquel.raynal@free-electrons.com: tested, fixed and rebased on nand/next]
    Signed-off-by: default avatarMiquel Raynal <miquel.raynal@free-electrons.com>
    Acked-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    25f815f6
nand_base.c 145 KB