mtd: nand: raw: allow to disable unneeded ECC layouts
authorStefan Agner <stefan.agner@toradex.com>
Thu, 6 Dec 2018 13:57:09 +0000 (14:57 +0100)
committerTom Rini <trini@konsulko.com>
Wed, 16 Jan 2019 21:14:45 +0000 (16:14 -0500)
Each ECC layout consumes about 2984 bytes in the .data section. Allow
to disable the default ECC layouts if a driver is known to provide its
own ECC layout.

Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/Kconfig
drivers/mtd/nand/raw/nand_base.c

index fd1723fedadfea17fdf3067c09a75ba740931b64..ffc6cc98aa024b613bb73b4fbb7bf493ee5e806c 100644 (file)
@@ -9,6 +9,12 @@ config SYS_NAND_SELF_INIT
          This option, if enabled, provides more flexible and linux-like
          NAND initialization process.
 
+config SYS_NAND_DRIVER_ECC_LAYOUT
+       bool
+       help
+         Omit standard ECC layouts to safe space. Select this if your driver
+         is known to provide its own ECC layout.
+
 config NAND_ATMEL
        bool "Support Atmel NAND controller"
        imply SYS_NAND_USE_FLASH_BBT
@@ -81,6 +87,7 @@ config NAND_OMAP_ELM
 config NAND_VF610_NFC
        bool "Support for Freescale NFC for VF610"
        select SYS_NAND_SELF_INIT
+       select SYS_NAND_DRIVER_ECC_LAYOUT
        imply CMD_NAND
        help
          Enables support for NAND Flash Controller on some Freescale
index 92daebe120bffb496e0d6614a5921c8d3a75f358..6d2ff58d86a557a1f64ad01f3385f6c033d5c5d0 100644 (file)
@@ -47,6 +47,7 @@
 #include <linux/errno.h>
 
 /* Define default oob placement schemes for large and small page devices */
+#ifdef CONFIG_SYS_NAND_DRIVER_ECC_LAYOUT
 static struct nand_ecclayout nand_oob_8 = {
        .eccbytes = 3,
        .eccpos = {0, 1, 2},
@@ -89,6 +90,7 @@ static struct nand_ecclayout nand_oob_128 = {
                {.offset = 2,
                 .length = 78} }
 };
+#endif
 
 static int nand_get_device(struct mtd_info *mtd, int new_state);
 
@@ -4339,6 +4341,7 @@ int nand_scan_tail(struct mtd_info *mtd)
         */
        if (!ecc->layout && (ecc->mode != NAND_ECC_SOFT_BCH)) {
                switch (mtd->oobsize) {
+#ifdef CONFIG_SYS_NAND_DRIVER_ECC_LAYOUT
                case 8:
                        ecc->layout = &nand_oob_8;
                        break;
@@ -4351,6 +4354,7 @@ int nand_scan_tail(struct mtd_info *mtd)
                case 128:
                        ecc->layout = &nand_oob_128;
                        break;
+#endif
                default:
                        pr_warn("No oob scheme defined for oobsize %d\n",
                                   mtd->oobsize);