[PATCH 2/2] ARM: OMAP2+: cleaned-up DT support of various ECC schemes

jean-philippe francois jp.francois at cynove.com
Thu May 16 03:26:43 EDT 2013


2013/5/16 Gupta, Pekon <pekon at ti.com>:
> From: "Gupta, Pekon" <pekon at ti.com>
>
> ECC scheme on NAND devices can be implemented in multiple ways.Some using
> Software algorithm, while others using in-build Hardware engines.
> omap2-nand driver currently supports following flavours of ECC schemes,
> selectable via DTB.
>
> +---------------------------------------+---------------+---------------+
> | ECC scheme                            |ECC calculation|Error detection|
> +---------------------------------------+---------------+---------------+
> |OMAP_ECC_HAMMING_CODE_DEFAULT          |S/W            |S/W            |
> |OMAP_ECC_HAMMING_CODE_HW               |H/W (GPMC)     |S/W            |
> |OMAP_ECC_HAMMING_CODE_HW_ROMCODE       |H/W (GPMC)     |S/W            |
> +---------------------------------------+---------------+---------------+
> |(requires CONFIG_MTD_NAND_ECC_BCH)     |               |               |
> |OMAP_ECC_BCH8_CODE_HW_DETECTION_SW     |H/W (GPMC)     |S/W            |
> +---------------------------------------+---------------+---------------+
> |(requires CONFIG_MTD_NAND_OMAP_BCH)    |               |               |
> |OMAP_ECC_BCH8_CODE_HW                  |H/W (GPMC)     |H/W (ELM)      |
> +---------------------------------------+---------------+---------------+
>
> Selection of some ECC schemes also require enabling following Kconfig options.
> This was done to optimize footprint of omap2-nand driver.
> -Kconfig:CONFIG_MTD_NAND_ECC_BCH        enables S/W based BCH ECC algorithm
> -Kconfig:CONFIG_MTD_NAND_OMAP_BCH       enables H/W based BCH ECC algorithm
>

OMAP_ECC_BCH4_CODE_HW_DETECTION_SW and  OMAP_ECC_BCH4_CODE_HW
seems to exist in the code, but are not in the changelog, and not in
the device tree binding documentation.


> Signed-off-by: Gupta, Pekon <pekon at ti.com>
> ---
>  .../devicetree/bindings/mtd/gpmc-nand.txt          | 37 +++++++++++++++-------
>  arch/arm/boot/dts/am335x-evm.dts                   |  2 +-
>  arch/arm/mach-omap2/gpmc.c                         | 12 ++++---
>  3 files changed, 34 insertions(+), 17 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/mtd/gpmc-nand.txt b/Documentation/devicetree/bindings/mtd/gpmc-nand.txt
> index e7f8d7e..de180be 100644
> --- a/Documentation/devicetree/bindings/mtd/gpmc-nand.txt
> +++ b/Documentation/devicetree/bindings/mtd/gpmc-nand.txt
> @@ -17,20 +17,35 @@ Required properties:
>
>  Optional properties:
>
> - - nand-bus-width:             Set this numeric value to 16 if the hardware
> -                               is wired that way. If not specified, a bus
> -                               width of 8 is assumed.
> + - nand-bus-width:             Determines data-width of the connected device
> +                               x16 = "16"
> +                               x8  = "8" (default)
>
> - - ti,nand-ecc-opt:            A string setting the ECC layout to use. One of:
>
> -               "sw"            Software method (default)
> -               "hw"            Hardware method
> -               "hw-romcode"    gpmc hamming mode method & romcode layout
> -               "bch4"          4-bit BCH ecc code
> -               "bch8"          8-bit BCH ecc code
> + - ti,nand-ecc-opt:            Determines the ECC scheme used by driver.
> +                               It can be any of the following strings:
> +
> +       "hamming_sw"            1-bit Hamming ECC using software
> +
> +       "hamming_hw"            1-bit Hamming ECC using hardware
> +
> +       "hamming_hw_romcode"    1-bit Hamming ECC using hardware
> +                               - ECC layout compatible to ROM code
> +
> +       "bch8_hw_detection_sw"  8-bit BCH with ECC calculation in hardware
> +                               and error detection in software
> +                               - requires Kconfig CONFIG_MTD_NAND_ECC_BCH
> +
> +       "bch8_hw"               8-bit BCH with ECC calculation in hardware
> +                               and error detection in hardware
> +                               - requires <elm_id> to be specified
> +                               - requires Kconfig CONFIG_MTD_NAND_OMAP_BCH
> +
> +
> +
> + - elm_id:                     Specifies elm device node. This is required to
> +                               support some BCH ECC schemes mentioned above.
>
> - - elm_id:     Specifies elm device node. This is required to support BCH
> -               error correction using ELM module.
>
>  For inline partiton table parsing (optional):
>
> diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts
> index 0b8f161..60e8f59 100644
> --- a/arch/arm/boot/dts/am335x-evm.dts
> +++ b/arch/arm/boot/dts/am335x-evm.dts
> @@ -135,7 +135,7 @@
>                         nand at 0,0 {
>                                 reg = <0 0 0>; /* CS0, offset 0 */
>                                 nand-bus-width = <8>;
> -                               ti,nand-ecc-opt = "bch8";
> +                               ti,nand-ecc-opt = "bch8_hw";
>
>                                 gpmc,sync-clk = <0>;
>                                 gpmc,cs-on = <0>;
> diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
> index 410e1ba..03b8027 100644
> --- a/arch/arm/mach-omap2/gpmc.c
> +++ b/arch/arm/mach-omap2/gpmc.c
> @@ -1205,11 +1205,13 @@ static void __maybe_unused gpmc_read_timings_dt(struct device_node *np,
>  #ifdef CONFIG_MTD_NAND
>
>  static const char * const nand_ecc_opts[] = {
> -       [OMAP_ECC_HAMMING_CODE_DEFAULT]         = "sw",
> -       [OMAP_ECC_HAMMING_CODE_HW]              = "hw",
> -       [OMAP_ECC_HAMMING_CODE_HW_ROMCODE]      = "hw-romcode",
> -       [OMAP_ECC_BCH4_CODE_HW]                 = "bch4",
> -       [OMAP_ECC_BCH8_CODE_HW]                 = "bch8",
> +       [OMAP_ECC_HAMMING_CODE_DEFAULT]         = "hamming_sw",
> +       [OMAP_ECC_HAMMING_CODE_HW]              = "hamming_hw",
> +       [OMAP_ECC_HAMMING_CODE_HW_ROMCODE]      = "hamming_hw_romcode",
> +       [OMAP_ECC_BCH4_CODE_HW]                 = "bch4_hw",
> +       [OMAP_ECC_BCH4_CODE_HW_DETECTION_SW]    = "bch4_hw_detection_sw",
> +       [OMAP_ECC_BCH8_CODE_HW]                 = "bch8_hw",
> +       [OMAP_ECC_BCH8_CODE_HW_DETECTION_SW]    = "bch8_hw_detection_sw"
>  };
>
>  static int gpmc_probe_nand_child(struct platform_device *pdev,
> --
> 1.8.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the linux-mtd mailing list