mtd: nand_bbt: kill NAND_BBT_SCANALLPAGES
Subsystems (3)
PATCH 1/1 mtd: nand_bbt: kill NAND_BBT_SCANALLPAGES
Now that the last user of NAND_BBT_SCANALLPAGES has been removed, let's kill this peculiar BBT feature flag.
--- Documentation/DocBook/mtdnand.tmpl | 2 -- drivers/mtd/nand/nand_bbt.c | 37 +++---------------------------------- include/linux/mtd/bbm.h | 2 -- 3 files changed, 3 insertions(+), 38 deletions(-)
Documentation/DocBook/mtdnand.tmpl +0 -2
@@ -1222,8 +1222,6 @@ in this page</entry> #define NAND_BBT_VERSION 0x00000100 /* Create a bbt if none axists */ #define NAND_BBT_CREATE 0x00000200 -/* Search good / bad pattern through all pages of a block */ -#define NAND_BBT_SCANALLPAGES 0x00000400 /* Write bbt if neccecary */ #define NAND_BBT_WRITE 0x00001000 /* Read and write back block contents when writing bbt */
drivers/mtd/nand/nand_bbt.c +3 -34
@@ -412,25 +412,6 @@ static void read_abs_bbts(struct mtd_info *mtd, uint8_t *buf, } } -/* Scan a given block full */ -static int scan_block_full (struct mtd_info *mtd,struct nand_bbt_descr *bd, -loff_t offs,uint8_t *buf,size_t readlen, -int scanlen,int numpages) -{ -int ret, j; - - ret =scan_read_oob (mtd, buf, offs, readlen); -/* Ignore ECC errors when checking for BBM */ -if (ret && !mtd_is_bitflip_or_eccerr (ret)) -return ret; - -for (j =0 ; j < numpages; j++, buf += scanlen) { -if (check_pattern (buf, scanlen, mtd->writesize, bd)) -return 1 ; - } -return 0 ; -} -/* Scan a given block partially */ static int scan_block_fast (struct mtd_info *mtd,struct nand_bbt_descr *bd,loff_t offs,uint8_t *buf,int numpages)
@@ -477,24 +458,17 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *bd, int chip) {struct nand_chip *this = mtd->priv; -int i, numblocks, numpages, scanlen; +int i, numblocks, numpages;int startblock;loff_t from; -size_t readlen;pr_info ("Scanning device for bad blocks\n" ); -if (bd->options &NAND_BBT_SCANALLPAGES ) - numpages =1 << (this->bbt_erase_shift - this->page_shift); -else if (bd->options &NAND_BBT_SCAN2NDPAGE ) +if (bd->options &NAND_BBT_SCAN2NDPAGE ) numpages =2 ;else numpages =1 ; -/* We need only read few bytes from the OOB area */ - scanlen =0 ; - readlen = bd->len; -if (chip ==-1 ) { numblocks = mtd->size >> this->bbt_erase_shift; startblock =0 ;
@@ -519,12 +493,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,BUG_ON (bd->options &NAND_BBT_NO_OOB ); -if (bd->options &NAND_BBT_SCANALLPAGES ) - ret =scan_block_full (mtd, bd, from, buf, readlen, - scanlen, numpages); -else - ret =scan_block_fast (mtd, bd, from, buf, numpages); - + ret =scan_block_fast (mtd, bd, from, buf, numpages);if (ret <0 )return ret;
include/linux/mtd/bbm.h +0 -2
@@ -91,8 +91,6 @@ struct nand_bbt_descr {* with NAND_BBT_CREATE. */ #define NAND_BBT_CREATE_EMPTY 0x00000400 -/* Search good / bad pattern through all pages of a block */ -#define NAND_BBT_SCANALLPAGES 0x00000800/* Write bbt if neccecary */ #define NAND_BBT_WRITE 0x00002000/* Read and write back block contents when writing bbt */
Signature · 1 line
1.8.1.2
Quoted 3 lines · Brian Norris
Now that the last user of
NAND_BBT_SCANALLPAGEShas been removed, let's kill this peculiar BBT feature flag.
I must admit I also find this option a bit puzzling.
However, I'm wondering what happens if a manufacturer specifies the bad block mark is in some page at the middle of a block.
AFAIK, some of them do exactly that, and I've always thought this option was the solution for such cases.
So, is this really no longer needed?
Signature · 3 lines
Ezequiel García, Free Electrons Embedded Linux, Kernel and Android Engineering http://free-electrons.com
Quoted 5 lines · Ezequiel Garcia
Quoted 3 lines · Brian Norris
Now that the last user of
NAND_BBT_SCANALLPAGEShas been removed, let's kill this peculiar BBT feature flag.
Quoted 7 lines
I must admit I also find this option a bit puzzling.
However, I'm wondering what happens if a manufacturer specifies the bad block mark is in some page at the middle of a block.
AFAIK, some of them do exactly that, and I've always thought this option was the solution for such cases.
Well, it's not really a *good* solution for a marker in the middle of the page, as it's both inaccurate and heavily inefficient. But honestly, I've never heard of such a device. (There is a rare one or two that uses the 2nd-to-last or 3rd-to-last page.) Do you have any examples?
Quoted 1 line
So, is this really no longer needed?
I think it just adds unnecessary complexity to nand_bbt.c. Generally, the fewer (unused) options the better. Also, this helps clear the way for some nand_base/nand_bbt simplification that I have planned.
Additionally, I think its only users were either accidental (in the case of omap2.c) or lazy (which didn't want to figure out the correct pages to scan for bad block markers). And now there are no users.
Brian
Quoted 8 lines · Brian Norris
Quoted 7 lines · Ezequiel Garcia
Quoted 3 lines · Brian Norris
Now that the last user of
NAND_BBT_SCANALLPAGEShas been removed, let's kill this peculiar BBT feature flag.I must admit I also find this option a bit puzzling.
Quoted 8 lines
Quoted 5 lines
However, I'm wondering what happens if a manufacturer specifies the bad block mark is in some page at the middle of a block.
AFAIK, some of them do exactly that, and I've always thought this option was the solution for such cases.
Well, it's not really a *good* solution for a marker in the middle of the page, as it's both inaccurate and heavily inefficient.
Granted.
Quoted 3 lines
I've never heard of such a device. (There is a rare one or two that uses the 2nd-to-last or 3rd-to-last page.) Do you have any examples?
Not at hand.
Quoted 10 lines
Quoted 1 line
So, is this really no longer needed?
I think it just adds unnecessary complexity to
nand_bbt.c. Generally, the fewer (unused) options the better. Also, this helps clear the way for some nand_base/nand_bbt simplification that I have planned.Additionally, I think its only users were either accidental (in the case of
omap2.c) or lazy (which didn't want to figure out the correct pages to scan for bad block markers). And now there are no users.
Ok, agreed. But do we have any mechanism to scan a *particular* page?
Signature · 3 lines
Ezequiel García, Free Electrons Embedded Linux, Kernel and Android Engineering http://free-electrons.com
Quoted 2 lines · Ezequiel Garcia
But do we have any mechanism to scan a *particular* page?
No. But if we need it, we can develop a proper one. For instance, I think a properly flexible approach could involve some kind of bitmap, where each bit represents a particular page (e.g., a 32-bit bitmap where the first 16 bits represent the first 16 pages and the last 16 represent the last 16 pages).
I think, though, that modern NAND are converging to only a few types of bad block marker locations, and our currently available flags (without SCANALLPAGES) are sufficient.
Brian
Quoted 4 lines · Brian Norris
Now that the last user of
NAND_BBT_SCANALLPAGEShas been removed, let's kill this peculiar BBT feature flag.Signed-off-by Brian Norris <[email protected]>
Quoted 106 lines
--- Documentation/DocBook/mtdnand.tmpl | 2 -- drivers/mtd/nand/nand_bbt.c | 37 +++---------------------------------- include/linux/mtd/bbm.h | 2 -- 3 files changed, 3 insertions(+), 38 deletions(-)Documentation/DocBook/mtdnand.tmpl +0
-2@@ -1222,8 +1222,6 @@ in this page</entry> #define NAND_BBT_VERSION 0x00000100 /* Create a bbt if none axists */ #define NAND_BBT_CREATE 0x00000200 -/* Search good / bad pattern through all pages of a block */ -#define NAND_BBT_SCANALLPAGES 0x00000400 /* Write bbt if neccecary */ #define NAND_BBT_WRITE 0x00001000 /* Read and write back block contents when writing bbt */drivers/mtd/nand/nand_bbt.c +3
-34@@ -412,25 +412,6 @@ static void read_abs_bbts(struct mtd_info *mtd, uint8_t *buf, } } -/* Scan a given block full */ -static int scan_block_full (struct mtd_info *mtd,struct nand_bbt_descr *bd, -loff_t offs,uint8_t *buf,size_t readlen, -int scanlen,int numpages) -{ -int ret, j; - - ret =scan_read_oob (mtd, buf, offs, readlen); -/* Ignore ECC errors when checking for BBM */ -if (ret && !mtd_is_bitflip_or_eccerr (ret)) -return ret; - -for (j =0 ; j < numpages; j++, buf += scanlen) { -if (check_pattern (buf, scanlen, mtd->writesize, bd)) -return 1 ; - } -return 0 ; -} -/* Scan a given block partially */ static int scan_block_fast (struct mtd_info *mtd,struct nand_bbt_descr *bd,loff_t offs,uint8_t *buf,int numpages)@@ -477,24 +458,17 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *bd, int chip) {struct nand_chip *this = mtd->priv; -int i, numblocks, numpages, scanlen; +int i, numblocks, numpages;int startblock;loff_t from; -size_t readlen;pr_info ("Scanning device for bad blocks\n" ); -if (bd->options &NAND_BBT_SCANALLPAGES ) - numpages =1 << (this->bbt_erase_shift - this->page_shift); -else if (bd->options &NAND_BBT_SCAN2NDPAGE ) +if (bd->options &NAND_BBT_SCAN2NDPAGE ) numpages =2 ;else numpages =1 ; -/* We need only read few bytes from the OOB area */ - scanlen =0 ; - readlen = bd->len; -if (chip ==-1 ) { numblocks = mtd->size >> this->bbt_erase_shift; startblock =0 ;@@ -519,12 +493,7 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,BUG_ON (bd->options &NAND_BBT_NO_OOB ); -if (bd->options &NAND_BBT_SCANALLPAGES ) - ret =scan_block_full (mtd, bd, from, buf, readlen, - scanlen, numpages); -else - ret =scan_block_fast (mtd, bd, from, buf, numpages); - + ret =scan_block_fast (mtd, bd, from, buf, numpages);if (ret <0 )return ret;include/linux/mtd/bbm.h +0
-2@@ -91,8 +91,6 @@ struct nand_bbt_descr {* with NAND_BBT_CREATE. */ #define NAND_BBT_CREATE_EMPTY 0x00000400 -/* Search good / bad pattern through all pages of a block */ -#define NAND_BBT_SCANALLPAGES 0x00000800/* Write bbt if neccecary */ #define NAND_BBT_WRITE 0x00002000/* Read and write back block contents when writing bbt */ Signature · 1 line
1.8.1.2
Signature · 3 lines
Ezequiel García, Free Electrons Embedded Linux, Kernel and Android Engineering http://free-electrons.com
Quoted 7 lines · Ezequiel Garcia
Quoted 4 lines · Brian Norris
Now that the last user of
NAND_BBT_SCANALLPAGEShas been removed, let's kill this peculiar BBT feature flag.Signed-off-by Brian Norris <[email protected]>Reviewed-by Ezequiel Garcia <[email protected]>
Yes, I do agree that we do not need to keep dead code just in case.
Signature · 2 lines
Best Regards, Artem Bityutskiy
Brian Norris
AppliedQuoted 5 lines · Artem Bityutskiy
Quoted 4 lines · Ezequiel Garcia
Quoted 3 lines · Brian Norris
Now that the last user of
NAND_BBT_SCANALLPAGEShas been removed, let's kill this peculiar BBT feature flag.
Quoted 7 lines
Quoted 3 lines
Quoted 1 line
Signed-off-by Brian Norris <[email protected]>Reviewed-by Ezequiel Garcia <[email protected]>Yes, I do agree that we do not need to keep dead code just in case.
Signed-off-by Artem Bityutskiy <[email protected]>
Pushed to l2-mtd.git.
Brian