openwrt/staging/blogic.git
8 years agoDocumentation: devicetree: deprecate "soft_bch" nand-ecc-mode value
Rafał Miłecki [Fri, 22 Apr 2016 11:23:14 +0000 (13:23 +0200)]
Documentation: devicetree: deprecate "soft_bch" nand-ecc-mode value

Now that we support nand-ecc-algo property it should be used together
with "soft" to specify software BCH ECC.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: add support for "nand-ecc-algo" DT property
Rafał Miłecki [Fri, 22 Apr 2016 11:23:13 +0000 (13:23 +0200)]
mtd: nand: add support for "nand-ecc-algo" DT property

So far it was only possible to specify ECC algorithm using "soft" and
"soft_bch" values of nand-ecc-mode prop. There wasn't a way to specify
it for a hardware ECC mode.

Now that we have independent field in NAND subsystem for storing info
about ECC algorithm we may also add support for this new DT property.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: mtd: drop NAND_ECC_SOFT_BCH enum value
Rafał Miłecki [Sun, 17 Apr 2016 20:53:07 +0000 (22:53 +0200)]
mtd: mtd: drop NAND_ECC_SOFT_BCH enum value

This value should not be part of nand_ecc_modes_t as it specifies
algorithm not a mode. We successfully managed to introduce new "algo"
field which is respected now.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: drop support for NAND_ECC_SOFT_BCH as "soft_bch" mapping
Rafał Miłecki [Sun, 17 Apr 2016 20:53:06 +0000 (22:53 +0200)]
mtd: drop support for NAND_ECC_SOFT_BCH as "soft_bch" mapping

There isn't any difference between handling NAND_ECC_SOFT and
NAND_ECC_SOFT_BCH now. What matters is the new field called "algo".
Please note we're keeping backward DT compatibility. We are still
treating "soft_bch" value as the one setting Hamming algorithm, it's
just handled in of_get_nand_ecc_algo now.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: read ECC algorithm from the new field
Rafał Miłecki [Sun, 17 Apr 2016 20:53:05 +0000 (22:53 +0200)]
mtd: nand: read ECC algorithm from the new field

Now we have all drivers properly setting this new field we can start
using it. For a very short period of time we should support both values:
NAND_ECC_SOFT and NAND_ECC_SOFT_BCH treating them the same. It's because
of_get_nand_ecc_mode may still be setting NAND_ECC_SOFT_BCH.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsmc: validate ECC setup by checking algorithm directly
Rafał Miłecki [Sun, 17 Apr 2016 20:53:04 +0000 (22:53 +0200)]
mtd: nand: fsmc: validate ECC setup by checking algorithm directly

NAND core sets ECC algorithm in algo field now and it should be
preferred over the mode field. This also prepares driver for dropping
NAND_ECC_SOFT_BCH.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: set ECC algorithm to Hamming on fallback
Rafał Miłecki [Sun, 17 Apr 2016 20:53:02 +0000 (22:53 +0200)]
mtd: nand: set ECC algorithm to Hamming on fallback

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agostaging: mt29f_spinand: set ECC algorithm explicitly
Rafał Miłecki [Sun, 17 Apr 2016 20:53:01 +0000 (22:53 +0200)]
staging: mt29f_spinand: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agoCRIS v32: nand: set ECC algorithm explicitly
Rafał Miłecki [Sun, 17 Apr 2016 20:53:00 +0000 (22:53 +0200)]
CRIS v32: nand: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Acked-by: Mikael Starvik <starvik@axis.com>
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: atmel: set ECC algorithm explicitly
Rafał Miłecki [Sun, 17 Apr 2016 20:52:59 +0000 (22:52 +0200)]
mtd: nand: atmel: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: davinci: set ECC algorithm explicitly
Rafał Miłecki [Sun, 17 Apr 2016 20:52:58 +0000 (22:52 +0200)]
mtd: nand: davinci: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: bf5xx: set ECC algorithm explicitly
Rafał Miłecki [Sun, 17 Apr 2016 20:52:57 +0000 (22:52 +0200)]
mtd: nand: bf5xx: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: omap2: Fix high memory dma prefetch transfer
Cooper Jr., Franklin [Fri, 15 Apr 2016 20:28:59 +0000 (15:28 -0500)]
mtd: nand: omap2: Fix high memory dma prefetch transfer

Based on DMA documentation and testing using high memory buffer when doing
dma transfers can lead to various issues including kernel panics.

To workaround this simply use cpu copy.

Signed-off-by: Franklin S Cooper Jr <fcooper@ti.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: omap2: Start dma request before enabling prefetch
Cooper Jr., Franklin [Fri, 15 Apr 2016 20:28:58 +0000 (15:28 -0500)]
mtd: nand: omap2: Start dma request before enabling prefetch

The prefetch engine sends a dma request once a FIFO threshold has
been met. No other requests are received until the previous request
is handled.

Starting a dma transfer (dma_async_issue_pending) results in any
previous event for the dma channel to be cleared. Therefore, starting
the prefetch engine before initiating the dma transfer may result in
the prefetch triggering a dma request but instead of it being handled
it can end up being cleared. This will result in a hang since the code
will continue to wait for the dma request to complete.

By initiating the dma request before enabling the prefetch engine this
race condition is avoided and no dma request are missed/cleared.

Signed-off-by: Franklin S Cooper Jr <fcooper@ti.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nandsim: add __init attribute
Julia Lawall [Tue, 19 Apr 2016 12:33:35 +0000 (14:33 +0200)]
mtd: nandsim: add __init attribute

Add __init attribute on functions that are only called from other __init
functions and that are not inlined, at least with gcc version 4.8.4 on an
x86 machine with allyesconfig.  Currently, the functions are put in the
.text.unlikely segment.  Declaring them as __init will cause them to be
put in the .init.text and to disappear after initialization.

The result of objdump -x on the functions before the change is as follows:

000000000000059a l     F .text.unlikely 0000000000000239 alloc_device
000000000000034e l     F .text.unlikely 000000000000002e get_partition_name
00000000000007d3 l     F .text.unlikely 00000000000005da init_nandsim

And after the change it is as follows:

0000000000000029 l     F .init.text 0000000000000234 alloc_device
0000000000000000 l     F .init.text 0000000000000029 get_partition_name
000000000000025d l     F .init.text 00000000000005d5 init_nandsim

Done with the help of Coccinelle.  The semantic patch checks for local
static non-init functions that are called from an __init function and are
not called from any other function.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: move of_get_nand_xxx() helpers into nand_base.c
Boris Brezillon [Fri, 1 Apr 2016 12:54:32 +0000 (14:54 +0200)]
mtd: nand: move of_get_nand_xxx() helpers into nand_base.c

Now that all drivers go through nand_set_flash_node() to parse the generic
NAND properties, we can move all of_get_nand_xxx() helpers in to
nand_base.c, make them static and remove of_mtd.c and of_mtd.h.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sh_flctl: rely on generic DT parsing done in nand_scan_ident()
Boris Brezillon [Fri, 1 Apr 2016 12:54:31 +0000 (14:54 +0200)]
mtd: nand: sh_flctl: rely on generic DT parsing done in nand_scan_ident()

The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: mxc: rely on generic DT parsing done in nand_scan_ident()
Boris Brezillon [Fri, 1 Apr 2016 12:54:29 +0000 (14:54 +0200)]
mtd: nand: mxc: rely on generic DT parsing done in nand_scan_ident()

The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: lpc32xx: rely on generic DT parsing done in nand_scan_ident()
Boris Brezillon [Fri, 1 Apr 2016 12:54:28 +0000 (14:54 +0200)]
mtd: nand: lpc32xx: rely on generic DT parsing done in nand_scan_ident()

The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: hisi504: rely on generic DT parsing done in nand_scan_ident()
Boris Brezillon [Fri, 1 Apr 2016 12:54:27 +0000 (14:54 +0200)]
mtd: nand: hisi504: rely on generic DT parsing done in nand_scan_ident()

The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: davinci: rely on generic DT parsing done in nand_scan_ident()
Boris Brezillon [Fri, 1 Apr 2016 12:54:25 +0000 (14:54 +0200)]
mtd: nand: davinci: rely on generic DT parsing done in nand_scan_ident()

The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: gpmi: rely on generic DT parsing done in nand_scan_ident()
Boris Brezillon [Fri, 1 Apr 2016 12:54:26 +0000 (14:54 +0200)]
mtd: nand: gpmi: rely on generic DT parsing done in nand_scan_ident()

The core now takes care of parsing generic DT properties in
nand_scan_ident() when nand_set_flash_node() has been called.
Rely on this initialization instead of calling of_get_nand_xxx()
manually.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Han xu <han.xu@nxp.com>
8 years agomtd: nand: omap2: fix compare_const_fl.cocci warnings
Julia Lawall [Thu, 14 Apr 2016 06:54:30 +0000 (08:54 +0200)]
mtd: nand: omap2: fix compare_const_fl.cocci warnings

Move constants to the right of binary operators.

Generated by: scripts/coccinelle/misc/compare_const_fl.cocci

CC: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: jz4740: Remove unused local variable
Maarten ter Huurne [Mon, 18 Apr 2016 16:04:56 +0000 (18:04 +0200)]
mtd: nand: jz4740: Remove unused local variable

Signed-off-by: Maarten ter Huurne <maarten@treewalker.org>
Acked-by: Harvey Hunt <harvey.hunt@imgtec.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsl_elbc: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:07:02 +0000 (14:07 +0200)]
mtd: nand: fsl_elbc: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsl_ifc: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:07:01 +0000 (14:07 +0200)]
mtd: nand: fsl_ifc: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsl_upm: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:07:00 +0000 (14:07 +0200)]
mtd: nand: fsl_upm: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: cmx270: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:06:59 +0000 (14:06 +0200)]
mtd: nand: cmx270: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: mpc5121_nfc: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:06:58 +0000 (14:06 +0200)]
mtd: nand: mpc5121_nfc: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: au1550nd: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:06:57 +0000 (14:06 +0200)]
mtd: nand: au1550nd: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sh_flctl: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:06:56 +0000 (14:06 +0200)]
mtd: nand: sh_flctl: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: s3c2410: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:06:55 +0000 (14:06 +0200)]
mtd: nand: s3c2410: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: omap2: set ECC algorithm explicitly
Rafał Miłecki [Wed, 13 Apr 2016 12:06:54 +0000 (14:06 +0200)]
mtd: nand: omap2: set ECC algorithm explicitly

This is part of process deprecating NAND_ECC_SOFT_BCH (and switching to
enum nand_ecc_algo).

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: kill the nand_ecclayout struct
Boris Brezillon [Thu, 4 Feb 2016 09:16:18 +0000 (10:16 +0100)]
mtd: kill the nand_ecclayout struct

Now that all MTD drivers have moved to the mtd_ooblayout_ops model we can
safely remove the struct nand_ecclayout definition, and all the remaining
places where it was still used.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: kill the ecc->layout field
Boris Brezillon [Wed, 3 Feb 2016 18:24:10 +0000 (19:24 +0100)]
mtd: nand: kill the ecc->layout field

Now that all NAND drivers have switched to mtd_ooblayout_ops, we can kill
the ecc->layout field.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agostaging: mt29f_spinand: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:13:39 +0000 (19:13 +0100)]
staging: mt29f_spinand: switch to mtd_ooblayout_ops

Replace the nand_ecclayout definition by the equivalent mtd_ooblayout_ops
definition.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: onenand: switch to mtd_ooblayout_ops
Boris Brezillon [Mon, 7 Dec 2015 21:46:45 +0000 (22:46 +0100)]
mtd: onenand: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users. Modify the onenand drivers to switch to this
approach.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: qcom: switch to mtd_ooblayout_ops
Boris Brezillon [Fri, 18 Mar 2016 16:54:27 +0000 (17:54 +0100)]
mtd: nand: qcom: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Tested-by: Archit Taneja <architt@codeaurora.org>
8 years agomtd: nand: vf610: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:05:45 +0000 (20:05 +0100)]
mtd: nand: vf610: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Tested-by: Stefan Agner <stefan@agner.ch>
Acked-by: Stefan Agner <stefan@agner.ch>
8 years agomtd: nand: sunxi: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:05:13 +0000 (20:05 +0100)]
mtd: nand: sunxi: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sm_common: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:04:59 +0000 (20:04 +0100)]
mtd: nand: sm_common: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sh_flctl: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:03:47 +0000 (20:03 +0100)]
mtd: nand: sh_flctl: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: s3c2410: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:03:30 +0000 (20:03 +0100)]
mtd: nand: s3c2410: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: pxa3xx: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:03:18 +0000 (20:03 +0100)]
mtd: nand: pxa3xx: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: omap2: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:03:04 +0000 (20:03 +0100)]
mtd: nand: omap2: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: mxc: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:02:54 +0000 (20:02 +0100)]
mtd: nand: mxc: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: lpc32xx: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:02:41 +0000 (20:02 +0100)]
mtd: nand: lpc32xx: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: jz4780: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:02:22 +0000 (20:02 +0100)]
mtd: nand: jz4780: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Tested-by: Harvey Hunt <harvey.hunt@imgtec.com>
8 years agomtd: nand: hisi504: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:02:09 +0000 (20:02 +0100)]
mtd: nand: hisi504: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: gpmi: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:01:54 +0000 (20:01 +0100)]
mtd: nand: gpmi: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Han Xu <han.xu@nxp.com>
Tested-by: Han Xu <han.xu@nxp.com>
8 years agomtd: nand: fsmc: get rid of the fsmc_nand_eccplace struct
Boris Brezillon [Tue, 9 Feb 2016 14:01:21 +0000 (15:01 +0100)]
mtd: nand: fsmc: get rid of the fsmc_nand_eccplace struct

Now that mtd_ooblayout_ecc() returns the ECC byte position using the
OOB free method, we can get rid of the fsmc_nand_eccplace struct.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsmc: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:01:42 +0000 (20:01 +0100)]
mtd: nand: fsmc: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsl_ifc: switch to mtd_ooblayout_ops
Boris Brezillon [Tue, 9 Feb 2016 16:01:57 +0000 (17:01 +0100)]
mtd: nand: fsl_ifc: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsl_elbc: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:01:04 +0000 (20:01 +0100)]
mtd: nand: fsl_elbc: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: docg4: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:00:35 +0000 (20:00 +0100)]
mtd: nand: docg4: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: diskonchip: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:00:23 +0000 (20:00 +0100)]
mtd: nand: diskonchip: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: denali: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 19:00:11 +0000 (20:00 +0100)]
mtd: nand: denali: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: davinci: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:59:58 +0000 (19:59 +0100)]
mtd: nand: davinci: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: cafe: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:59:47 +0000 (19:59 +0100)]
mtd: nand: cafe: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: brcm: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:59:36 +0000 (19:59 +0100)]
mtd: nand: brcm: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: bf5xx: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:59:25 +0000 (19:59 +0100)]
mtd: nand: bf5xx: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: atmel: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:59:11 +0000 (19:59 +0100)]
mtd: nand: atmel: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Nicolas Ferre <nicolas.ferre@atmel.com>
8 years agomtd: nand: jz4740: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:58:55 +0000 (19:58 +0100)]
mtd: nand: jz4740: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
8 years agomtd: nand: sharpsl: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:58:11 +0000 (19:58 +0100)]
mtd: nand: sharpsl: switch to mtd_ooblayout_ops

Implementing the mtd_ooblayout_ops interface is the new way of exposing
ECC/OOB layout to MTD users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: bch: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:53:40 +0000 (19:53 +0100)]
mtd: nand: bch: switch to mtd_ooblayout_ops

Replace the nand_ecclayout definition by the equivalent mtd_ooblayout_ops
definition.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: implement the default mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:06:15 +0000 (19:06 +0100)]
mtd: nand: implement the default mtd_ooblayout_ops

Replace the default nand_ecclayout definitions for large and small page
devices with the equivalent mtd_ooblayout_ops.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: docg3: switch to mtd_ooblayout_ops
Boris Brezillon [Wed, 3 Feb 2016 18:05:04 +0000 (19:05 +0100)]
mtd: docg3: switch to mtd_ooblayout_ops

Replace the nand_ecclayout definition by the equivalent mtd_ooblayout_ops
definition.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
8 years agomtd: create an mtd_ooblayout_ops struct to ease ECC layout definition
Boris Brezillon [Wed, 3 Feb 2016 18:01:31 +0000 (19:01 +0100)]
mtd: create an mtd_ooblayout_ops struct to ease ECC layout definition

ECC layout definitions are currently exposed using the nand_ecclayout
struct which embeds oobfree and eccpos arrays with predefined size.
This approach was acceptable when NAND chips were providing relatively
small OOB regions, but MLC and TLC now provide OOB regions of several
hundreds of bytes, which implies a non negligible overhead for everybody
even those who only need to support legacy NANDs.

Create an mtd_ooblayout_ops interface providing the same functionality
(expose the ECC and oobfree layout) without the need for this huge
structure.

The mtd->ecclayout is now deprecated and should be replaced by the
equivalent mtd_ooblayout_ops. In the meantime we provide a wrapper around
the ->ecclayout field to ease migration to this new model.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: docg3: use mtd_set_ecclayout() where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:14:14 +0000 (20:14 +0100)]
mtd: docg3: use mtd_set_ecclayout() where appropriate

Use the mtd_set_ecclayout() helper instead of directly assigning the
mtd->ecclayout field.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
8 years agomtd: onenand: use mtd_set_ecclayout() where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:14:03 +0000 (20:14 +0100)]
mtd: onenand: use mtd_set_ecclayout() where appropriate

Use the mtd_set_ecclayout() helper instead of directly assigning the
mtd->ecclayout field.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: use mtd_set_ecclayout() where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:13:50 +0000 (20:13 +0100)]
mtd: nand: use mtd_set_ecclayout() where appropriate

Use the mtd_set_ecclayout() helper instead of directly assigning the
mtd->ecclayout field.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: use mtd_set_ecclayout() where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:13:26 +0000 (20:13 +0100)]
mtd: use mtd_set_ecclayout() where appropriate

Use the mtd_set_ecclayout() helper instead of directly assigning the
mtd->ecclayout field.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: add mtd_set_ecclayout() helper function
Boris Brezillon [Wed, 3 Feb 2016 17:53:44 +0000 (18:53 +0100)]
mtd: add mtd_set_ecclayout() helper function

Add an mtd_set_ecclayout() helper function to avoid direct accesses to the
mtd->ecclayout field. This will ease future reworks of ECC layout
definition.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: onenand: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:12:31 +0000 (20:12 +0100)]
mtd: onenand: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: qcom: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Fri, 18 Mar 2016 16:53:31 +0000 (17:53 +0100)]
mtd: nand: qcom: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to ecclayout fields, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Tested-by: Archit Taneja <architt@codeaurora.org>
8 years agomtd: nand: omap2: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:12:19 +0000 (20:12 +0100)]
mtd: nand: omap2: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: lpc32xx: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:12:04 +0000 (20:12 +0100)]
mtd: nand: lpc32xx: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: gpmi: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:11:44 +0000 (20:11 +0100)]
mtd: nand: gpmi: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: fsl_ifc: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:11:32 +0000 (20:11 +0100)]
mtd: nand: fsl_ifc: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: atmel: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:11:14 +0000 (20:11 +0100)]
mtd: nand: atmel: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reviewed-by: Nicolas Ferre <nicolas.ferre@atmel.com>
8 years agomtd: nand: core: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:11:00 +0000 (20:11 +0100)]
mtd: nand: core: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: use mtd_ooblayout_xxx() helpers where appropriate
Boris Brezillon [Wed, 3 Feb 2016 19:10:30 +0000 (20:10 +0100)]
mtd: use mtd_ooblayout_xxx() helpers where appropriate

The mtd_ooblayout_xxx() helper functions have been added to avoid direct
accesses to the ecclayout field, and thus ease for future reworks.
Use these helpers in all places where the oobfree[] and eccpos[] arrays
where directly accessed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: add mtd_ooblayout_xxx() helper functions
Boris Brezillon [Thu, 4 Feb 2016 08:52:30 +0000 (09:52 +0100)]
mtd: add mtd_ooblayout_xxx() helper functions

In order to make the ecclayout definition completely dynamic we need to
rework the way the OOB layout are defined and iterated.

Create a few mtd_ooblayout_xxx() helpers to ease OOB bytes manipulation
and hide ecclayout internals to their users.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: make cur_off parameter optional in extra oob helpers
Boris Brezillon [Fri, 4 Mar 2016 17:13:10 +0000 (18:13 +0100)]
mtd: nand: sunxi: make cur_off parameter optional in extra oob helpers

Allow for NULL cur_offs values when the caller does not know where the
NAND page register pointer points to.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: make OOB retrieval optional
Boris Brezillon [Fri, 4 Mar 2016 17:09:21 +0000 (18:09 +0100)]
mtd: nand: sunxi: make OOB retrieval optional

sunxi_nfc_hw_ecc_read_chunk() always retrieves the ECC and protected free
bytes, no matter if the user really asked for it or not. This can take a
non negligible amount of time, especially on NAND chips exposing large OOB
areas (> 1KB). Make it optional.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: move some ECC related operations to their own functions
Boris Brezillon [Fri, 4 Mar 2016 16:56:47 +0000 (17:56 +0100)]
mtd: nand: sunxi: move some ECC related operations to their own functions

In order to support DMA operations in a clean way we need to extract some
of the logic coded in sunxi_nfc_hw_ecc_read/write_page() into their own
function.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: poll for events instead of using interrupts
Boris Brezillon [Mon, 7 Mar 2016 14:34:39 +0000 (15:34 +0100)]
mtd: nand: sunxi: poll for events instead of using interrupts

Some NAND operations are so fast that it doesn't make any sense to use
interrupt based waits (the scheduling overhead is not worth it).
Rename sunxi_nfc_wait_int() into sunxi_nfc_wait_events() and add a
parameter to specify whether polling should be used or not.

Note that all sunxi_nfc_wait_int() are moved to the polling approach now,
but this should change as soon as we have more information about the
approximate time we are about to wait (can be extracted from the NAND
timings, and the type of operation).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: make use of readl_poll_timeout()
Boris Brezillon [Mon, 7 Mar 2016 14:25:17 +0000 (15:25 +0100)]
mtd: nand: sunxi: make use of readl_poll_timeout()

Replace open coded polling loops by readl_poll_timeout() calls.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: fix ->dev_ready() implementation
Boris Brezillon [Mon, 7 Mar 2016 14:10:28 +0000 (15:10 +0100)]
mtd: nand: sunxi: fix ->dev_ready() implementation

->dev_ready() is not supposed to wait for busy to ready solution (this is
the role of ->waitfunc()).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: enable ECC pipelining
Boris Brezillon [Fri, 4 Mar 2016 16:33:10 +0000 (17:33 +0100)]
mtd: nand: enable ECC pipelining

When the NAND controller operates in DMA mode it can pipeline ECC
operations which improves the throughput.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: disable clks on device removal
Boris Brezillon [Fri, 4 Mar 2016 17:26:40 +0000 (18:26 +0100)]
mtd: nand: sunxi: disable clks on device removal

mod and ahb clocks are not disabled when the NAND controller device is
removed.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: fix NFC_CTL setting
Boris Brezillon [Fri, 4 Mar 2016 16:29:20 +0000 (17:29 +0100)]
mtd: nand: sunxi: fix NFC_CTL setting

NFC_PAGE_SHIFT() already takes the real page_shift value and subtract 10
to it.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: fix the NFC_ECC_ERR_CNT() macro
Boris Brezillon [Fri, 4 Mar 2016 16:25:08 +0000 (17:25 +0100)]
mtd: nand: sunxi: fix the NFC_ECC_ERR_CNT() macro

NFC_ECC_ERR_CNT() is not taking into account the case when the NAND chip
contains more than 4 ECC blocks (NANDs with 4kB+ pages).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: let the NAND controller control the CE line
Boris Brezillon [Fri, 4 Mar 2016 16:21:35 +0000 (17:21 +0100)]
mtd: nand: sunxi: let the NAND controller control the CE line

We don't need to manually toggle the CE line since the controller handles
it for us. Moreover, keeping the CE line low when interacting with a DDR
NAND can be problematic (data loss in some corner cases).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: improve ->cmd_ctrl() function
Boris Brezillon [Wed, 16 Sep 2015 07:05:31 +0000 (09:05 +0200)]
mtd: nand: sunxi: improve ->cmd_ctrl() function

Try to pack address and command cycles into a single NAND controller
command to avoid polling the status register for each single change
on the NAND bus.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: implement ->read_subpage()
Boris Brezillon [Wed, 16 Sep 2015 07:01:45 +0000 (09:01 +0200)]
mtd: nand: sunxi: implement ->read_subpage()

Being able to read subpages can greatly improve read performances if the
MTD user is only interested in a small section of a NAND page.
This is particularly true with large pages (>= 8k).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: implement ->read_oob()/->write_oob()
Boris Brezillon [Wed, 2 Sep 2015 13:05:52 +0000 (15:05 +0200)]
mtd: nand: sunxi: implement ->read_oob()/->write_oob()

Allwinner's ECC engine is capable of protecting a few bytes of the OOB
area. Implement specific OOB functions to benefit from this capability.

Also, when in raw mode, the randomizer is disabled, which means you'll
only be able to retrieve randomized data, which is not really useful
for most applications.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: export default read/write oob functions
Boris Brezillon [Wed, 26 Aug 2015 14:08:12 +0000 (16:08 +0200)]
mtd: nand: export default read/write oob functions

Export the default read/write oob functions (for the standard and syndrome
scheme), so that drivers can use them for their raw implementation and
implement their own functions for the normal oob operation.

This is required if your ECC engine is capable of fixing some of the OOB
data. In this case you have to overload the ->read_oob() and ->write_oob(),
but if you don't specify the ->read/write_oob_raw() functions they are
assigned to the ->read/write_oob() implementation, which is not what you
want.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: adapt clk_rate to tWB, tADL, tWHR and tRHW timings
Boris Brezillon [Wed, 11 Nov 2015 21:30:30 +0000 (22:30 +0100)]
mtd: nand: sunxi: adapt clk_rate to tWB, tADL, tWHR and tRHW timings

Adapt the NAND controller clk rate to the tWB, tADL, tWHR and tRHW
timings instead of returning an error when the maximum clk divisor is
not big enough to provide an appropriate timing.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
8 years agomtd: nand: sunxi: fix EDO mode selection
Boris Brezillon [Wed, 2 Dec 2015 14:57:20 +0000 (15:57 +0100)]
mtd: nand: sunxi: fix EDO mode selection

The ONFI spec says that EDO should be enabled if the host drives tRC less
than 30ns, but the code just tests for the tRC_min value extracted from
the timings exposed by the NAND chip not the timings actually configured
in the NAND controller.
Fix that by first rounding down the requested clk_rate with
clk_round_rate() and then checking if tRC is actually smaller than 30ns.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>