linux/drivers/mtd/nand/raw
Sascha Hauer ef347c0cfd mtd: rawnand: gpmi: Implement exec_op
The gpmi driver performance suffers from NAND operations being split
in multiple small DMA transfers. This has been forced by the NAND layer
in the former days, but now with exec_op we can use the controller as
intended.

With this patch gpmi_nfc_exec_op becomes the main entry point to NAND
operations. Here all instructions are collected and chained as separate
DMA transfers. In the end whole chain is fired and waited to be
finished. gpmi_nfc_exec_op only does the hardware operations, bad block
marker swapping and buffer scrambling is done by the callers. It's worth
noting that the nand_*_op functions always take the buffer lengths for
the data that the NAND chip actually transfers. When doing BCH we have
to calculate the net data size from the raw data size in some places.

This patch has been tested with 2048/64 and 2048/128 byte NAND on
i.MX6q. mtd_oobtest, mtd_subpagetest and mtd_speedtest run without
errors. nandbiterrs, nandpagetest and nandsubpagetest userspace tests
from mtdutils run without errors and UBIFS can successfully be mounted.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2019-06-27 20:05:30 +02:00
..
atmel treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
bcm47xxnflash treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
brcmnand mtd: rawnand: brcmnand: Fix BCH ECC layout for large page NAND parts 2019-06-27 20:05:24 +02:00
gpmi-nand mtd: rawnand: gpmi: Implement exec_op 2019-06-27 20:05:30 +02:00
ingenic treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 151 2019-05-30 11:26:28 -07:00
ams-delta.c mtd: rawnand: ams-delta: Use GPIO API for data I/O 2018-12-07 10:38:27 +01:00
au1550nd.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
cafe_nand.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
cmx270_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
cs553x_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
davinci_nand.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
denali_dt.c mtd: rawnand: denali: decouple controller and NAND chips 2019-04-18 08:54:03 +02:00
denali_pci.c mtd: rawnand: denali: decouple controller and NAND chips 2019-04-18 08:54:03 +02:00
denali.c mtd: rawnand: denali: clean up coding style 2019-04-18 08:54:04 +02:00
denali.h mtd: rawnand: denali: decouple controller and NAND chips 2019-04-18 08:54:03 +02:00
diskonchip.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
fsl_elbc_nand.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
fsl_ifc_nand.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
fsl_upm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
fsmc_nand.c mtd: rawnand: fsmc: Use nand_op_trace for operation tracing 2019-06-27 20:05:26 +02:00
gpio.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
hisi504_nand.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
internals.h mtd: rawnand: Support bad block markers in first, second or last page 2019-04-18 08:54:08 +02:00
Kconfig treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
lpc32xx_mlc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
lpc32xx_slc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
Makefile mtd: rawnand: fix build dependency 2019-04-18 08:54:01 +02:00
marvell_nand.c This pull request contains the following changes for MTD: 2019-05-12 17:57:52 -04:00
meson_nand.c mtd: rawnand: meson: only initialize the RB completion once 2019-04-18 08:54:07 +02:00
mpc5121_nfc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 1 2019-05-21 11:28:39 +02:00
mtk_ecc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
mtk_ecc.h
mtk_nand.c mtd: rawnand: mtk: Fix wrongly assigned OOB buffer pointer issue 2019-06-27 20:05:25 +02:00
mxc_nand.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
nand_amd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_base.c mtd: rawnand: export NAND operation tracer 2019-06-27 20:05:25 +02:00
nand_bbt.c mtd: rawnand: Support bad block markers in first, second or last page 2019-04-18 08:54:08 +02:00
nand_bch.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 49 2019-05-24 17:27:13 +02:00
nand_ecc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 49 2019-05-24 17:27:13 +02:00
nand_esmt.c mtd: rawnand: ESMT: Also use the last page for bad block markers 2019-04-18 08:54:08 +02:00
nand_hynix.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_ids.c mtd: rawnand: ESMT: retrieve ECC requirements from 5th id byte 2018-10-03 11:12:25 +02:00
nand_jedec.c mtd: rawnand: Get rid of chip->ecc_{strength,step}_ds 2019-04-08 10:21:16 +02:00
nand_legacy.c mtd: rawnand: Annotate implicit fall through in nand_command/nand_command_lp 2019-02-05 16:56:10 +01:00
nand_macronix.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_micron.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_onfi.c mtd: rawnand: Get rid of chip->ecc_{strength,step}_ds 2019-04-08 10:21:16 +02:00
nand_samsung.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nand_timings.c mtd: rawnand: Keep all internal stuff private 2018-10-03 11:12:25 +02:00
nand_toshiba.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
nandsim.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 150 2019-05-30 11:25:19 -07:00
ndfc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
nuc900_nand.c mtd: rawnand: Mark expected switch fall-throughs 2019-03-21 16:44:55 +01:00
omap2.c mtd: nand: Clarify Kconfig entry for software BCH ECC algorithm 2019-04-18 08:54:00 +02:00
omap_elm.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
orion_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
oxnas_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
pasemi_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
plat_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00
qcom_nandc.c mtd: rawnand: Provide a helper to get chip->data_buf 2019-04-08 10:21:13 +02:00
r852.c drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
r852.h mtd: rawnand: r852: fix spelling mistake "card_registred" -> "card_registered" 2018-10-08 10:00:10 +02:00
s3c2410.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
sh_flctl.c mtd: nand: Make flags for bad block marker position more granular 2019-04-18 08:54:07 +02:00
sharpsl.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
sm_common.c mtd: rawnand: Deprecate the dummy_controller field 2018-12-07 10:58:11 +01:00
sm_common.h
socrates_nand.c mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
stm32_fmc2_nand.c mtd: rawnand: stm32_fmc2: manage the get_irq error case 2019-06-27 20:05:23 +02:00
sunxi_nand.c mtd: rawnand: sunxi: Add A23/A33 DMA support 2019-04-18 08:54:05 +02:00
tango_nand.c mtd: rawnand: Move ->setup_data_interface() to nand_controller_ops 2018-12-07 10:38:27 +01:00
tegra_nand.c mtd: rawnand: Get rid of chip->ecc_{strength,step}_ds 2019-04-08 10:21:16 +02:00
tmio_nand.c mtd: rawnand: Stop using chip->state in drivers 2019-02-05 15:39:40 +01:00
txx9ndfmc.c drivers: Remove explicit invocations of mmiowb() 2019-04-08 12:01:02 +01:00
vf610_nfc.c mtd: rawnand: vf610_nfc: add initializer to avoid -Wmaybe-uninitialized 2019-05-14 19:52:48 -07:00
xway_nand.c mtd: rawnand: Deprecate the ->select_chip() hook 2018-12-07 10:38:27 +01:00