RE: [PATCH 01/12] mtd: nand_bbt: new header for nand family BBT
From: Peter Pan 潘栋 (peterpandong)
Date: Fri Sep 25 2015 - 04:31:56 EST
Sorry for send the patch 1 twice.
Since I cannot send mail using 'git send-email' right now. I send this series
by outlook. This may cause copyright symbol wrong. Patch 1 and 12 got this
problem and patch 12 cannot be applied. Please ignore this error.
Peter Pan
On Fri, 25 Sep 2015 14:37:35 +0000
Peter Pan 潘栋 (peterpandong) <peterpandong@xxxxxxxxxx> wrote:
> Migrating existing BBT definitions from bbm.h to nand_bbt.h
>
> Signed-off-by: Brian Norris <computersforpeace@xxxxxxxxx>
> [Peter: correct misspelling. s/neccecary/necessary/]
> Signed-off-by: Peter Pan <peterpandong@xxxxxxxxxx>
> ---
> include/linux/mtd/bbm.h | 96 +----------------------------------
> include/linux/mtd/nand_bbt.h | 118
> +++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 119 insertions(+), 95 deletions(-)
> create mode 100644 include/linux/mtd/nand_bbt.h
>
> diff --git a/include/linux/mtd/bbm.h b/include/linux/mtd/bbm.h
> index 36bb6a5..fb751d9 100644
> --- a/include/linux/mtd/bbm.h
> +++ b/include/linux/mtd/bbm.h
> @@ -28,102 +28,8 @@
> #ifndef __LINUX_MTD_BBM_H
> #define __LINUX_MTD_BBM_H
>
> -/* The maximum number of NAND chips in an array */
> -#define NAND_MAX_CHIPS 8
> +#include <linux/mtd/nand_bbt.h>
>
> -/**
> - * struct nand_bbt_descr - bad block table descriptor
> - * @options: options for this descriptor
> - * @pages: the page(s) where we find the bbt, used with option
> BBT_ABSPAGE
> - * when bbt is searched, then we store the found bbts pages here.
> - * Its an array and supports up to 8 chips now
> - * @offs: offset of the pattern in the oob area of the page
> - * @veroffs: offset of the bbt version counter in the oob are of the page
> - * @version: version read from the bbt page during scan
> - * @len: length of the pattern, if 0 no pattern check is performed
> - * @maxblocks: maximum number of blocks to search for a bbt. This
> number of
> - * blocks is reserved at the end of the device where the tables are
> - * written.
> - * @reserved_block_code: if non-0, this pattern denotes a reserved (rather
> than
> - * bad) block in the stored bbt
> - * @pattern: pattern to identify bad block table or factory marked good /
> - * bad blocks, can be NULL, if len = 0
> - *
> - * Descriptor for the bad block table marker and the descriptor for the
> - * pattern which identifies good and bad blocks. The assumption is made
> - * that the pattern and the version count are always located in the oob area
> - * of the first block.
> - */
> -struct nand_bbt_descr {
> - int options;
> - int pages[NAND_MAX_CHIPS];
> - int offs;
> - int veroffs;
> - uint8_t version[NAND_MAX_CHIPS];
> - int len;
> - int maxblocks;
> - int reserved_block_code;
> - uint8_t *pattern;
> -};
> -
> -/* Options for the bad block table descriptors */
> -
> -/* The number of bits used per block in the bbt on the device */
> -#define NAND_BBT_NRBITS_MSK 0x0000000F
> -#define NAND_BBT_1BIT 0x00000001
> -#define NAND_BBT_2BIT 0x00000002
> -#define NAND_BBT_4BIT 0x00000004
> -#define NAND_BBT_8BIT 0x00000008
> -/* The bad block table is in the last good block of the device */
> -#define NAND_BBT_LASTBLOCK 0x00000010
> -/* The bbt is at the given page, else we must scan for the bbt */
> -#define NAND_BBT_ABSPAGE 0x00000020
> -/* bbt is stored per chip on multichip devices */
> -#define NAND_BBT_PERCHIP 0x00000080
> -/* bbt has a version counter at offset veroffs */
> -#define NAND_BBT_VERSION 0x00000100
> -/* Create a bbt if none exists */
> -#define NAND_BBT_CREATE 0x00000200
> -/*
> - * Create an empty BBT with no vendor information. Vendor's information
> may be
> - * unavailable, for example, if the NAND controller has a different data and
> OOB
> - * layout or if this information is already purged. Must be used in
> conjunction
> - * with NAND_BBT_CREATE.
> - */
> -#define NAND_BBT_CREATE_EMPTY 0x00000400
> -/* Write bbt if neccecary */
> -#define NAND_BBT_WRITE 0x00002000
> -/* Read and write back block contents when writing bbt */
> -#define NAND_BBT_SAVECONTENT 0x00004000
> -/* Search good / bad pattern on the first and the second page */
> -#define NAND_BBT_SCAN2NDPAGE 0x00008000
> -/* Search good / bad pattern on the last page of the eraseblock */
> -#define NAND_BBT_SCANLASTPAGE 0x00010000
> -/*
> - * Use a flash based bad block table. By default, OOB identifier is saved in
> - * OOB area. This option is passed to the default bad block table function.
> - */
> -#define NAND_BBT_USE_FLASH 0x00020000
> -/*
> - * Do not store flash based bad block table marker in the OOB area; store it
> - * in-band.
> - */
> -#define NAND_BBT_NO_OOB 0x00040000
> -/*
> - * Do not write new bad block markers to OOB; useful, e.g., when ECC covers
> - * entire spare area. Must be used with NAND_BBT_USE_FLASH.
> - */
> -#define NAND_BBT_NO_OOB_BBM 0x00080000
> -
> -/*
> - * Flag set by nand_create_default_bbt_descr(), marking that the
> nand_bbt_descr
> - * was allocated dynamicaly and must be freed in nand_release(). Has no
> meaning
> - * in nand_chip.bbt_options.
> - */
> -#define NAND_BBT_DYNAMICSTRUCT 0x80000000
> -
> -/* The maximum number of blocks to scan for a bbt */
> -#define NAND_BBT_SCAN_MAXBLOCKS 4
>
> /*
> * Constants for oob configuration
> diff --git a/include/linux/mtd/nand_bbt.h b/include/linux/mtd/nand_bbt.h
> new file mode 100644
> index 0000000..5a65230
> --- /dev/null
> +++ b/include/linux/mtd/nand_bbt.h
> @@ -0,0 +1,118 @@
> +/*
> + * NAND family Bad Block Table support
> + *
> + * Copyright ? 2015 Broadcom Corporation
> + * Brian Norris <computersforpeace@xxxxxxxxx>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + */
> +#ifndef __LINUX_MTD_NAND_BBT_H
> +#define __LINUX_MTD_NAND_BBT_H
> +
> +/* The maximum number of NAND chips in an array */
> +#define NAND_MAX_CHIPS 8
> +
> +/**
> + * struct nand_bbt_descr - bad block table descriptor
> + * @options: options for this descriptor
> + * @pages: the page(s) where we find the bbt, used with option
> BBT_ABSPAGE
> + * when bbt is searched, then we store the found bbts pages here.
> + * Its an array and supports up to 8 chips now
> + * @offs: offset of the pattern in the oob area of the page
> + * @veroffs: offset of the bbt version counter in the oob are of the page
> + * @version: version read from the bbt page during scan
> + * @len: length of the pattern, if 0 no pattern check is performed
> + * @maxblocks: maximum number of blocks to search for a bbt. This
> number of
> + * blocks is reserved at the end of the device where the tables are
> + * written.
> + * @reserved_block_code: if non-0, this pattern denotes a reserved (rather
> than
> + * bad) block in the stored bbt
> + * @pattern: pattern to identify bad block table or factory marked good /
> + * bad blocks, can be NULL, if len = 0
> + *
> + * Descriptor for the bad block table marker and the descriptor for the
> + * pattern which identifies good and bad blocks. The assumption is made
> + * that the pattern and the version count are always located in the oob area
> + * of the first block.
> + */
> +struct nand_bbt_descr {
> + int options;
> + int pages[NAND_MAX_CHIPS];
> + int offs;
> + int veroffs;
> + uint8_t version[NAND_MAX_CHIPS];
> + int len;
> + int maxblocks;
> + int reserved_block_code;
> + uint8_t *pattern;
> +};
> +
> +/* Options for the bad block table descriptors */
> +
> +/* The number of bits used per block in the bbt on the device */
> +#define NAND_BBT_NRBITS_MSK 0x0000000F
> +#define NAND_BBT_1BIT 0x00000001
> +#define NAND_BBT_2BIT 0x00000002
> +#define NAND_BBT_4BIT 0x00000004
> +#define NAND_BBT_8BIT 0x00000008
> +/* The bad block table is in the last good block of the device */
> +#define NAND_BBT_LASTBLOCK 0x00000010
> +/* The bbt is at the given page, else we must scan for the bbt */
> +#define NAND_BBT_ABSPAGE 0x00000020
> +/* bbt is stored per chip on multichip devices */
> +#define NAND_BBT_PERCHIP 0x00000080
> +/* bbt has a version counter at offset veroffs */
> +#define NAND_BBT_VERSION 0x00000100
> +/* Create a bbt if none exists */
> +#define NAND_BBT_CREATE 0x00000200
> +/*
> + * Create an empty BBT with no vendor information. Vendor's information
> may be
> + * unavailable, for example, if the NAND controller has a different data and
> OOB
> + * layout or if this information is already purged. Must be used in
> conjunction
> + * with NAND_BBT_CREATE.
> + */
> +#define NAND_BBT_CREATE_EMPTY 0x00000400
> +/* Write bbt if necessary */
> +#define NAND_BBT_WRITE 0x00002000
> +/* Read and write back block contents when writing bbt */
> +#define NAND_BBT_SAVECONTENT 0x00004000
> +/* Search good / bad pattern on the first and the second page */
> +#define NAND_BBT_SCAN2NDPAGE 0x00008000
> +/* Search good / bad pattern on the last page of the eraseblock */
> +#define NAND_BBT_SCANLASTPAGE 0x00010000
> +/*
> + * Use a flash based bad block table. By default, OOB identifier is saved in
> + * OOB area. This option is passed to the default bad block table function.
> + */
> +#define NAND_BBT_USE_FLASH 0x00020000
> +/*
> + * Do not store flash based bad block table marker in the OOB area; store it
> + * in-band.
> + */
> +#define NAND_BBT_NO_OOB 0x00040000
> +/*
> + * Do not write new bad block markers to OOB; useful, e.g., when ECC
> covers
> + * entire spare area. Must be used with NAND_BBT_USE_FLASH.
> + */
> +#define NAND_BBT_NO_OOB_BBM 0x00080000
> +
> +/*
> + * Flag set by nand_create_default_bbt_descr(), marking that the
> nand_bbt_descr
> + * was allocated dynamicaly and must be freed in nand_release(). Has no
> meaning
> + * in nand_chip.bbt_options.
> + */
> +#define NAND_BBT_DYNAMICSTRUCT 0x80000000
> +
> +/* The maximum number of blocks to scan for a bbt */
> +#define NAND_BBT_SCAN_MAXBLOCKS 4
> +
> +#endif /* __LINUX_MTD_NAND_BBT_H */
> --
> 1.9.1
N?叉??y??b??千v??藓{.n???{?赙zXФ?塄}?财??j:+v???赙zZ+€?zf"?????i????ア??璀??撷f?^j谦y??@A?囤?0鹅h??i