linux_dsm_epyc7002/drivers/mtd/nand
Masahiro Yamada 7de117fd5b mtd: nand: denali: avoid hard-coding ECC step, strength, bytes
This driver was originally written for the Intel MRST platform with
several platform-specific parameters hard-coded.

Currently, the ECC settings are hard-coded as follows:

  #define ECC_SECTOR_SIZE 512
  #define ECC_8BITS       14
  #define ECC_15BITS      26

Therefore, the driver can only support two cases.
 - ecc.size = 512, ecc.strength = 8    --> ecc.bytes = 14
 - ecc.size = 512, ecc.strength = 15   --> ecc.bytes = 26

However, these are actually customizable parameters, for example,
UniPhier platform supports the following:

 - ecc.size = 1024, ecc.strength = 8   --> ecc.bytes = 14
 - ecc.size = 1024, ecc.strength = 16  --> ecc.bytes = 28
 - ecc.size = 1024, ecc.strength = 24  --> ecc.bytes = 42

So, we need to handle the ECC parameters in a more generic manner.
Fortunately, the Denali User's Guide explains how to calculate the
ecc.bytes.  The formula is:

  ecc.bytes = 2 * CEIL(13 * ecc.strength / 16)  (for ecc.size = 512)
  ecc.bytes = 2 * CEIL(14 * ecc.strength / 16)  (for ecc.size = 1024)

For DT platforms, it would be reasonable to allow DT to specify ECC
strength by either "nand-ecc-strength" or "nand-ecc-maximize".  If
none of them is specified, the driver will try to meet the chip's ECC
requirement.

For PCI platforms, the max ECC strength is used to keep the original
behavior.

Newer versions of this IP need ecc.size and ecc.steps explicitly
set up via the following registers:
  CFG_DATA_BLOCK_SIZE       (0x6b0)
  CFG_LAST_DATA_BLOCK_SIZE  (0x6c0)
  CFG_NUM_DATA_BLOCKS       (0x6d0)

For older IP versions, write accesses to these registers are just
ignored.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
2017-06-10 13:40:13 +02:00
..
atmel mtd: nand: atmel: mark resume function __maybe_unused 2017-06-01 10:09:35 +02:00
bcm47xxnflash mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
brcmnand mtd: nand: brcmnand: Check flash #WP pin status before nand erase/program 2017-04-25 14:18:42 +02:00
gpmi-nand mtd: nand: gpmi: fix typo in comment 2017-06-10 12:09:28 +02:00
ams-delta.c mtd: nand: ams-delta: return error code of nand_scan() on error 2016-11-07 14:48:41 +01:00
au1550nd.c mtd: nand: au1550nd: set ECC algorithm explicitly 2016-05-05 23:51:53 +02:00
bf5xx_nand.c mtd: nand: import nand_hw_control_init() 2016-09-23 09:35:16 +02:00
cafe_nand.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
cmx270_nand.c drivers/mtd: Convert remaining uses of pr_warning to pr_warn 2017-04-19 13:10:54 -07:00
cs553x_nand.c mtd: nand: cs553x: return error code of nand_scan() on error 2016-11-07 14:48:42 +01:00
davinci_nand.c mtd: nand: davinci: set ECC algorithm explicitly for HW based ECC 2017-05-15 12:00:46 +02:00
denali_dt.c mtd: nand: denali: avoid hard-coding ECC step, strength, bytes 2017-06-10 13:40:13 +02:00
denali_pci.c mtd: nand: denali: avoid hard-coding ECC step, strength, bytes 2017-06-10 13:40:13 +02:00
denali.c mtd: nand: denali: avoid hard-coding ECC step, strength, bytes 2017-06-10 13:40:13 +02:00
denali.h mtd: nand: denali: avoid hard-coding ECC step, strength, bytes 2017-06-10 13:40:13 +02:00
diskonchip.c mtd: nand: diskonchip: switch to mtd_ooblayout_ops 2016-05-05 23:51:40 +02:00
docg4.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
fsl_elbc_nand.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
fsl_ifc_nand.c mtd: nand: fsl_ifc: fix handing of bit flips in erased pages 2017-06-10 12:09:05 +02:00
fsl_upm.c mtd: nand: fsl_upm: set ECC algorithm explicitly 2016-05-05 23:51:54 +02:00
fsmc_nand.c mtd: nand: Pass the CS line to ->setup_data_interface() 2017-06-01 10:09:28 +02:00
gpio.c mtd: nand: gpio: make nCE GPIO optional 2017-03-16 10:34:27 +01:00
hisi504_nand.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
jz4740_nand.c mtd: nand: jz4740: Remove unused local variable 2016-05-05 23:51:56 +02:00
jz4780_bch.c mtd: nand: jz4780: Update MODULE_AUTHOR email address 2016-07-11 08:40:19 +02:00
jz4780_bch.h mtd: nand: jz4780: driver for NAND devices on JZ4780 SoCs 2016-01-07 09:35:11 -08:00
jz4780_nand.c mtd: nand: jz4780: Use mtd_set_ooblayout() to set the ooblayout 2017-05-15 12:00:36 +02:00
Kconfig mtd: nand: atmel: Add ->setup_data_interface() hooks 2017-06-01 10:09:29 +02:00
lpc32xx_mlc.c mtd: nand: lpc32xx: fix invalid error handling of a requested irq 2017-01-04 20:50:18 +01:00
lpc32xx_slc.c mtd: nand: lpc32xx_slc: Remove unneeded NULL check on 'rc' 2017-01-30 11:50:30 +01:00
Makefile mtd: nand: Cleanup/rework the atmel_nand driver 2017-04-25 14:18:29 +02:00
mpc5121_nfc.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
mtk_ecc.c mtd: nand: mediatek: add support for MT2712 NAND FLASH Controller 2017-06-01 10:09:38 +02:00
mtk_ecc.h mtd: nand: mediatek: add support for different MTK NAND FLASH Controller IP 2017-06-01 10:09:37 +02:00
mtk_nand.c mtd: nand: mediatek: add support for MT2712 NAND FLASH Controller 2017-06-01 10:09:38 +02:00
mxc_nand.c mtd: nand: Pass the CS line to ->setup_data_interface() 2017-06-01 10:09:28 +02:00
nand_amd.c mtd: nand: Move AMD/Spansion specific init/detection logic in nand_amd.c 2017-03-08 23:21:22 +01:00
nand_base.c mtd: nand: add generic helpers to check, match, maximize ECC settings 2017-06-10 13:40:07 +02:00
nand_bbt.c mtd: nand_bbt: scan for next free bbt block if writing bbt fails 2016-09-23 09:35:16 +02:00
nand_bch.c mtd: nand_bch: fix spelling of "probably" 2016-05-06 09:45:45 -07:00
nand_ecc.c mtd: nand: return consistent error codes in ecc.correct() implementations 2016-01-06 18:45:46 -08:00
nand_hynix.c mtd: nand: hynix: Fix an error code in init 2017-03-23 10:44:02 +01:00
nand_ids.c mtd: nand: Move Macronix specific initialization in nand_macronix.c 2017-03-08 23:21:23 +01:00
nand_macronix.c mtd: nand: Move Macronix specific initialization in nand_macronix.c 2017-03-08 23:21:23 +01:00
nand_micron.c mtd: nand: Wait for PAGEPROG to finish in drivers setting NAND_ECC_CUSTOM_PAGE_ACCESS 2017-06-01 10:09:33 +02:00
nand_samsung.c mtd: nand: samsung: Retrieve ECC requirements from extended ID 2017-03-08 23:21:23 +01:00
nand_timings.c mtd: nand: Add a few more timings to nand_sdr_timings 2016-11-07 14:48:37 +01:00
nand_toshiba.c mtd: nand: Move Toshiba specific init/detection logic in nand_toshiba.c 2017-03-08 23:21:21 +01:00
nandsim.c MTD updates for 4.12-rc1: 2017-05-11 10:44:22 -07:00
ndfc.c mtd: nand: import nand_hw_control_init() 2016-09-23 09:35:16 +02:00
nuc900_nand.c mtd: nand: nuc900: set ECC algorithm explicitly 2016-04-19 22:05:32 +02:00
omap2.c mtd: nand: omap2: Fix partition creation via cmdline mtdparts 2017-04-25 14:18:40 +02:00
omap_elm.c mtd: omap_elm: print interrupt resource using %pr 2015-12-18 10:16:17 -08:00
orion_nand.c mtd: nand: orion: Handle return value of clk_prepare_enable 2017-06-10 12:09:27 +02:00
oxnas_nand.c mtd: oxnas_nand: Allocating more than necessary in probe() 2017-05-02 15:54:49 -07:00
pasemi_nand.c mtd: nand: pasemi: return error code of nand_scan() on error 2016-11-07 14:48:45 +01:00
plat_nand.c mtd: nand: plat_nand: return error code of nand_scan() on error 2016-11-07 14:48:45 +01:00
pxa3xx_nand.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
qcom_nandc.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
r852.c mtd: nand: make use of nand_set/get_controller_data() helpers 2016-01-07 10:23:41 -08:00
r852.h mtd: nand: r852: use the mtd instance embedded in struct nand_chip 2015-12-18 10:54:41 -08:00
s3c2410.c mtd: nand: Pass the CS line to ->setup_data_interface() 2017-06-01 10:09:28 +02:00
sh_flctl.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
sharpsl.c mtd: nand: sharpsl: switch to mtd_ooblayout_ops 2016-05-05 23:51:36 +02:00
sm_common.c mtd: nand: sm_common: switch to mtd_ooblayout_ops 2016-05-05 23:51:48 +02:00
sm_common.h mtd: use __packed shorthand 2014-08-19 11:53:08 -07:00
socrates_nand.c mtd: nand: socrates: use nand_scan() for nand_scan_ident/tail() combo 2016-11-07 14:48:53 +01:00
sunxi_nand.c mtd: nand: sunxi: Remove unneeded ->cmdfunc(NAND_CMD_READ0, 0, page) 2017-06-01 10:09:32 +02:00
tango_nand.c mtd: nand: Wait for PAGEPROG to finish in drivers setting NAND_ECC_CUSTOM_PAGE_ACCESS 2017-06-01 10:09:33 +02:00
tmio_nand.c mtd: nand: tmio: return error code of nand_scan() on error 2016-11-07 14:48:44 +01:00
txx9ndfmc.c mtd: nand: import nand_hw_control_init() 2016-09-23 09:35:16 +02:00
vf610_nfc.c mtd: nand: Make sure drivers not supporting SET/GET_FEATURES return -ENOTSUPP 2017-05-30 08:59:26 +02:00
xway_nand.c mtd: update my email address 2017-02-08 12:49:27 -08:00