David Brownell <[email protected]> writes:

> From: David Brownell <[email protected]>
>
> Minor ECC cleanup for the DaVinci NAND driver:
>
>  - Clarify Kconfig:  this HW_ECC is just the 1-bit flavor
>  - Remove needless non-mainline NAND_ECC_HWx_y constants
>  - Use BIT(n) in a few places for clarity
>
> And remove pointless DRIVER_NAME define, correcting MODULE_ALIAS
> so it could really trigger hotplugging.
>
> Signed-off-by: David Brownell <[email protected]>

Thanks, pushing today.

Kevin

> ---
>  drivers/mtd/nand/Kconfig        |    6 ++-
>  drivers/mtd/nand/davinci_nand.c |   75 +++++---------------------------------
>  2 files changed, 14 insertions(+), 67 deletions(-)
>
> --- a/drivers/mtd/nand/Kconfig
> +++ b/drivers/mtd/nand/Kconfig
> @@ -453,9 +453,11 @@ config MTD_NAND_DAVINCI
>            Support for NAND flash on Texas Instruments DaVinci SoC.
>  
>  config NAND_FLASH_HW_ECC
> -        bool "Hardware ECC Support on NAND Device for DaVinci"
> +        bool "1-Bit Hardware ECC on NAND Device for DaVinci"
>          depends on MTD_NAND_DAVINCI
>          help
> -          Support for Hardware ECC on NAND device for DaVinci.
> +       Support the single bit Hardware ECC on NAND devices
> +       for DaVinci.  This uses three bytes of OOB data for
> +       each 512 bytes of data.
>  
>  endif # MTD_NAND
> --- a/drivers/mtd/nand/davinci_nand.c
> +++ b/drivers/mtd/nand/davinci_nand.c
> @@ -78,14 +78,8 @@ static inline int mtd_has_cmdlinepart(vo
>  static inline int is_hw_ecc_1bit(void) { return 1; }
>  #else
>  static inline int is_hw_ecc_1bit(void) { return 0; }
> -#define NAND_ECC_HW3_256     100
> -#define NAND_ECC_HW3_512     101
> -#define NAND_ECC_HW6_512     102
> -#define NAND_ECC_HW8_512     103
> -#define NAND_ECC_HW12_2048   104
>  #endif
>  
> -#define DRIVER_NAME "davinci_nand"
>  
>  struct davinci_nand_info {
>       struct mtd_info         mtd;
> @@ -179,7 +173,7 @@ static void nand_davinci_enable_hwecc_1b
>  
>       /* Restart ECC hardware */
>       retval = davinci_nand_readl(info, NANDFCR_OFFSET);
> -     retval |= (1 << 8);
> +     retval |= BIT(8);
>       davinci_nand_writel(info, NANDFCR_OFFSET, retval);
>  }
>  
> @@ -226,7 +220,7 @@ static int nand_davinci_correct_data_1bi
>               if ((((diff >> 12) ^ diff) & 0xfff) == 0xfff) {
>                       /* Correctable error */
>                       if ((diff >> (12 + 3)) < chip->ecc.size) {
> -                             dat[diff >> (12 + 3)] ^= (1 << ((diff >> 12) & 
> 7));
> +                             dat[diff >> (12 + 3)] ^= BIT((diff >> 12) & 7);
>                               return 1;
>                       } else {
>                               return -1;
> @@ -425,53 +419,6 @@ static int nand_davinci_dev_ready(struct
>       return davinci_nand_readl(info, NANDFSR_OFFSET) & NAND_BUSY_FLAG;
>  }
>  
> -static void __init nand_davinci_set_eccsize(struct nand_chip *chip)
> -{
> -     chip->ecc.size = 256;
> -
> -     if (!is_hw_ecc_1bit())
> -             return;
> -
> -     switch (chip->ecc.mode) {
> -     case NAND_ECC_HW12_2048:
> -             chip->ecc.size = 2048;
> -             break;
> -
> -     case NAND_ECC_HW3_512:
> -     case NAND_ECC_HW6_512:
> -     case NAND_ECC_HW8_512:
> -             chip->ecc.size = 512;
> -             break;
> -
> -     case NAND_ECC_HW3_256:
> -     default:
> -             /* do nothing */
> -             break;
> -     }
> -}
> -
> -static void __init nand_davinci_set_eccbytes(struct nand_chip *chip)
> -{
> -     chip->ecc.bytes = 3;
> -
> -     if (!is_hw_ecc_1bit())
> -             return;
> -
> -     switch (chip->ecc.mode) {
> -     case NAND_ECC_HW12_2048:
> -             chip->ecc.bytes += 4;
> -     case NAND_ECC_HW8_512:
> -             chip->ecc.bytes += 2;
> -     case NAND_ECC_HW6_512:
> -             chip->ecc.bytes += 3;
> -     case NAND_ECC_HW3_512:
> -     case NAND_ECC_HW3_256:
> -     default:
> -             /* do nothing */
> -             break;
> -     }
> -}
> -
>  static void __init nand_dm355evm_flash_init(struct davinci_nand_info *info)
>  {
>       u32 val, tmp;
> @@ -672,12 +619,14 @@ static int __init nand_davinci_probe(str
>        * fixed?):  Linux seemed to limit ECC data to 32 bytes.
>        */
>       if (is_hw_ecc_1bit()) {
> -             info->chip.ecc.mode      = NAND_ECC_HW3_512;
> +             info->chip.ecc.mode = NAND_ECC_HW;
>               info->chip.ecc.calculate = nand_davinci_calculate_ecc_1bit;
> -             info->chip.ecc.correct   = nand_davinci_correct_data_1bit;
> -             info->chip.ecc.hwctl     = nand_davinci_enable_hwecc_1bit;
> +             info->chip.ecc.correct = nand_davinci_correct_data_1bit;
> +             info->chip.ecc.hwctl = nand_davinci_enable_hwecc_1bit;
> +             info->chip.ecc.size = 512;
> +             info->chip.ecc.bytes = 3;
>       } else {
> -             info->chip.ecc.mode      = NAND_ECC_SOFT;
> +             info->chip.ecc.mode = NAND_ECC_SOFT;
>       }
>  
>       info->clk = clk_get(&pdev->dev, "AEMIFCLK");
> @@ -693,10 +642,6 @@ static int __init nand_davinci_probe(str
>               goto err_clk_enable;
>       }
>  
> -     /* Set ECC size and bytes */
> -     nand_davinci_set_eccsize(&info->chip);
> -     nand_davinci_set_eccbytes(&info->chip);
> -
>       /* FIXME these don't belong here ... */
>       if (machine_is_davinci_dm355_evm())
>               nand_dm355evm_flash_init(info);
> @@ -817,9 +762,10 @@ static int __exit nand_davinci_remove(st
>  static struct platform_driver nand_davinci_driver = {
>       .remove         = __exit_p(nand_davinci_remove),
>       .driver         = {
> -             .name   = DRIVER_NAME,
> +             .name   = "davinci_nand",
>       },
>  };
> +MODULE_ALIAS("platform:davinci_nand");
>  
>  static int __init nand_davinci_init(void)
>  {
> @@ -833,7 +779,6 @@ static void __exit nand_davinci_exit(voi
>  }
>  module_exit(nand_davinci_exit);
>  
> -MODULE_ALIAS(DRIVER_NAME);
>  MODULE_LICENSE("GPL");
>  MODULE_AUTHOR("Texas Instruments");
>  MODULE_DESCRIPTION("Davinci NAND flash driver");
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to