mtd: nand: force drivers to explicitly send READ/PROG commands
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:Boris Brezillon <boris.brezillon@free-electrons.com> [miquel.raynal@free-electrons.com: tested, fixed and rebased on nand/next] Signed-off-by:
Miquel Raynal <miquel.raynal@free-electrons.com> Acked-by:
Masahiro Yamada <yamada.masahiro@socionext.com>
Showing
- drivers/mtd/nand/atmel/nand-controller.c 5 additions, 2 deletionsdrivers/mtd/nand/atmel/nand-controller.c
- drivers/mtd/nand/bf5xx_nand.c 4 additions, 2 deletionsdrivers/mtd/nand/bf5xx_nand.c
- drivers/mtd/nand/brcmnand/brcmnand.c 10 additions, 3 deletionsdrivers/mtd/nand/brcmnand/brcmnand.c
- drivers/mtd/nand/cafe_nand.c 3 additions, 3 deletionsdrivers/mtd/nand/cafe_nand.c
- drivers/mtd/nand/denali.c 0 additions, 1 deletiondrivers/mtd/nand/denali.c
- drivers/mtd/nand/docg4.c 8 additions, 4 deletionsdrivers/mtd/nand/docg4.c
- drivers/mtd/nand/fsl_elbc_nand.c 5 additions, 5 deletionsdrivers/mtd/nand/fsl_elbc_nand.c
- drivers/mtd/nand/fsl_ifc_nand.c 3 additions, 3 deletionsdrivers/mtd/nand/fsl_ifc_nand.c
- drivers/mtd/nand/gpmi-nand/gpmi-nand.c 16 additions, 15 deletionsdrivers/mtd/nand/gpmi-nand/gpmi-nand.c
- drivers/mtd/nand/hisi504_nand.c 3 additions, 3 deletionsdrivers/mtd/nand/hisi504_nand.c
- drivers/mtd/nand/lpc32xx_mlc.c 4 additions, 1 deletiondrivers/mtd/nand/lpc32xx_mlc.c
- drivers/mtd/nand/lpc32xx_slc.c 8 additions, 3 deletionsdrivers/mtd/nand/lpc32xx_slc.c
- drivers/mtd/nand/mtk_nand.c 8 additions, 14 deletionsdrivers/mtd/nand/mtk_nand.c
- drivers/mtd/nand/nand_base.c 36 additions, 51 deletionsdrivers/mtd/nand/nand_base.c
- drivers/mtd/nand/nand_micron.c 6 additions, 50 deletionsdrivers/mtd/nand/nand_micron.c
- drivers/mtd/nand/omap2.c 8 additions, 2 deletionsdrivers/mtd/nand/omap2.c
- drivers/mtd/nand/pxa3xx_nand.c 3 additions, 3 deletionsdrivers/mtd/nand/pxa3xx_nand.c
- drivers/mtd/nand/qcom_nandc.c 11 additions, 0 deletionsdrivers/mtd/nand/qcom_nandc.c
- drivers/mtd/nand/sh_flctl.c 3 additions, 3 deletionsdrivers/mtd/nand/sh_flctl.c
- drivers/mtd/nand/sunxi_nand.c 22 additions, 12 deletionsdrivers/mtd/nand/sunxi_nand.c
Please register or sign in to comment