mtd: nand: raw: allow to disable unneeded ECC layouts
Subsystems (2)
PATCH 1/1 mtd: nand: raw: allow to disable unneeded ECC layouts
From: Stefan Agner <[email protected]>
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.
---
drivers/mtd/nand/raw/Kconfig | 7 +++++++ drivers/mtd/nand/raw/nand_base.c | 4 ++++ 2 files changed, 11 insertions(+)
drivers/mtd/nand/raw/Kconfig +7 -0
@@ -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
drivers/mtd/nand/raw/nand_base.c +4 -0
@@ -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);
Signature · 1 line
2.19.2
PATCH 1/1 mtd: nand: raw: allow to disable unneeded ECC layouts
Quoted 68 lines · On Thu, 6 Dec 2018 14:57:09 +0100 Stefan Agner <[email protected]> wrote:
From: Stefan Agner <[email protected]>
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 <[email protected]>---
drivers/mtd/nand/raw/Kconfig | 7 +++++++ drivers/mtd/nand/raw/nand_base.c | 4 ++++ 2 files changed, 11 insertions(+)(quoted diff) +0
-0b/drivers/mtd/nand/raw/Kconfig index
008f7b4b4b..b06c45788a100644drivers/mtd/nand/raw/Kconfig +0
-0@@ -9,6 +9,12 @@ config SYS_NAND_SELF_INIT This option, if enabled, provides more flexible andlinux-like NAND initialization process.
drivers/mtd/nand/raw/Kconfig +4
-0+config SYS_NAND_DRIVER_ECC_LAYOUT + bool + help + Omit standard ECC layouts to safe space. Select this ifyour driver
drivers/mtd/nand/raw/Kconfig +3
-0+ 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(quoted diff) +0
-0
b/drivers/mtd/nand/raw/nand_base.cindex92daebe120..6d2ff58d86100644drivers/mtd/nand/raw/nand_base.c +0
-0@@ -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 structnand_ecclayoutnand_oob_8= {drivers/mtd/nand/raw/nand_base.c +2
-0.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 ;
drivers/mtd/nand/raw/nand_base.c int nand_scan_tail(struct mtd_info *mtd) · line 4360
Quoted 7 lines
drivers/mtd/nand/raw/nand_base.c +1
-0@@ -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);
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181206/50d72c8f/attachment.sig>
Miquel Raynal
maintainerPATCH 1/1 mtd: nand: raw: allow to disable unneeded ECC layouts
In reply to Stefan AgnerHi Stefan,
Stefan Agner <[email protected]> wrote on Thu, 6 Dec 2018 14:57:09 +0100:
Quoted 18 lines
From: Stefan Agner <[email protected]>
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 <[email protected]>---
drivers/mtd/nand/raw/Kconfig | 7 +++++++ drivers/mtd/nand/raw/nand_base.c | 4 ++++ 2 files changed, 11 insertions(+)drivers/mtd/nand/raw/Kconfig +0
-0
drivers/mtd/nand/raw/Kconfig config SYS_NAND_SELF_INIT · line 15
Quoted 7 lines
drivers/mtd/nand/raw/Kconfig +4
-0@@ -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
s/safe/save/
drivers/mtd/nand/raw/Kconfig config SYS_NAND_SELF_INIT · line 16
Quoted 1 line
drivers/mtd/nand/raw/Kconfig +1
-0+ is known to provide its own ECC layout.
layout*s*?
Quoted 41 lines
drivers/mtd/nand/raw/Kconfig +2
-0+ 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 Freescaledrivers/mtd/nand/raw/nand_base.c +3
-0@@ -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 ;
drivers/mtd/nand/raw/nand_base.c int nand_scan_tail(struct mtd_info *mtd) · line 4360
Quoted 7 lines
drivers/mtd/nand/raw/nand_base.c +1
-0@@ -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);
I don't like very much the #ifdef approach to compile-out zones in the code. I don't have an alternative for now (maybe have the layouts in a different file?). I would also like to hear Boris' point of view.
Thanks,
Miquèl
Miquel Raynal
maintainerPATCH 1/1 mtd: nand: raw: allow to disable unneeded ECC layouts
Hello,
Miquel Raynal <[email protected]> wrote on Fri, 7 Dec 2018 11:06:24 +0100:
Quoted 80 lines
Hi Stefan,
Stefan Agner <[email protected]> wrote on Thu, 6 Dec 2018 14:57:09 +0100:
Quoted 18 lines
From: Stefan Agner <[email protected]>
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 <[email protected]>---
drivers/mtd/nand/raw/Kconfig | 7 +++++++ drivers/mtd/nand/raw/nand_base.c | 4 ++++ 2 files changed, 11 insertions(+)drivers/mtd/nand/raw/Kconfig +0
-0drivers/mtd/nand/raw/Kconfig config SYS_NAND_SELF_INIT · line 15
Quoted 7 lines
drivers/mtd/nand/raw/Kconfig +4
-0@@ -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 drivers/safe/save/
drivers/mtd/nand/raw/Kconfig config SYS_NAND_SELF_INIT · line 16
Quoted 1 line
drivers/mtd/nand/raw/Kconfig +1
-0+ is known to provide its own ECC layout.layout*s*?
Quoted 44 lines
drivers/mtd/nand/raw/Kconfig +2
-0+ 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 Freescaledrivers/mtd/nand/raw/nand_base.c +3
-0@@ -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 ;
Quoted 8 lines
drivers/mtd/nand/raw/nand_base.c int nand_scan_tail(struct mtd_info *mtd) · line 4360
Quoted 4 lines
drivers/mtd/nand/raw/nand_base.c +1
-0+#endif default :pr_warn ("No oob scheme defined for oobsize %d\n" , mtd->oobsize);I don't like very much the #ifdef approach to compile-out zones in the code. I don't have an alternative for now (maybe have the layouts in a different file?). I would also like to hear Boris' point of view.
I overlooked the headers, I thought you wanted that in Linux, that's why I was asking Boris. For U-Boot I agree with the idea and we already have a lot of #ifdef around there so unless someone else complains:
Thanks,
Miquèl
PATCH 1/1 mtd: nand: raw: allow to disable unneeded ECC layouts
In reply to Stefan AgnerQuoted 9 lines · Stefan Agner
From: Stefan Agner <[email protected]>
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 <[email protected]>Reviewed-by Lukasz Majewski <[email protected]>Reviewed-by Miquel Raynal <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: not available URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190117/57904027/attachment.sig>