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