[PATCH 01/12] mtd: nand_bbt: new header for nand family BBT

Peter Pan 潘栋 (peterpandong) peterpandong at micron.com
Fri Sep 25 01:30:55 PDT 2015


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 at micron.com> wrote:

> Migrating existing BBT definitions from bbm.h to nand_bbt.h
> 
> Signed-off-by: Brian Norris <computersforpeace at gmail.com>
> [Peter: correct misspelling. s/neccecary/necessary/]
> Signed-off-by: Peter Pan <peterpandong at micron.com>
> ---
>  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 at gmail.com>
> + *
> + * 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


More information about the linux-mtd mailing list