From: Peter Pan <peterpansjtu@gmail.com>
To: computersforpeace@gmail.com, dwmw2@infradead.org,
boris.brezillon@free-electrons.com, fransklaver@gmail.com
Cc: linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,
karlzhang@micron.com, beanhuo@micron.com,
Peter Pan <peterpandong@micron.com>
Subject: [PATCH v2 02/12] mtd: nand_bbt: introduce struct nand_bbt
Date: Tue, 15 Dec 2015 05:59:28 +0000 [thread overview]
Message-ID: <1450159178-29895-3-git-send-email-peterpandong@micron.com> (raw)
In-Reply-To: <1450159178-29895-1-git-send-email-peterpandong@micron.com>
From: Brian Norris <computersforpeace@gmail.com>
Currently nand_bbt.c is tied with struct nand_chip, and it makes other
NAND family chips hard to use nand_bbt.c. Maybe it's the reason why
onenand has own bbt(onenand_bbt.c).
Separate struct nand_chip from BBT code can make current BBT shareable.
We create struct nand_bbt to take place of nand_chip in nand_bbt.c
Below is mtd folder structure we want:
mtd
├── Kconfig
├── Makefile
├── ...
├── nand_bbt.c
├── nand
│ ├── Kconfig
│ ├── Makefile
│ ├── nand_base.c
│ ├── nand_ids.c
│ ├── ...
│ └── xway_nand.c
├── spi-nand
│ ├── Kconfig
│ ├── Makefile
│ ├── spi-nand-base.c
│ ├── ...
│ └── spi-nand-device.c
└── ...
We put every information nand_bbt.c needed from outside into struct
nand_bbt, include:
@mtd: pointer to MTD device structure
@is_bad_bbm: check if a block is factory bad block
@mark_bad_bbm: imitate a block as factory bad block
@erase: erase block bypassing resvered checks
@bbt_options: bad block specific options. All options used
here must come from nand_bbt.h.
@numchips: number of physical chips, required for NAND_BBT_PERCHIP
@bbt_td: bad block table descriptor for flash lookup.
@bbt_md: bad block table mirror descriptor
@chipsize: the size of one chip for multichip arrays
@chip_shift: number of address bits in one chip
@bbt_erase_shift: number of address bits in a bbt entry
@page_shift: number of address bits in a page
@bbt: bad block table pointer
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
[Peter: correct comment style]
Signed-off-by: Peter Pan <peterpandong@micron.com>
---
include/linux/mtd/nand_bbt.h | 59 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/include/linux/mtd/nand_bbt.h b/include/linux/mtd/nand_bbt.h
index 5a65230..e468571 100644
--- a/include/linux/mtd/nand_bbt.h
+++ b/include/linux/mtd/nand_bbt.h
@@ -18,6 +18,8 @@
#ifndef __LINUX_MTD_NAND_BBT_H
#define __LINUX_MTD_NAND_BBT_H
+struct mtd_info;
+
/* The maximum number of NAND chips in an array */
#define NAND_MAX_CHIPS 8
@@ -115,4 +117,61 @@ struct nand_bbt_descr {
/* The maximum number of blocks to scan for a bbt */
#define NAND_BBT_SCAN_MAXBLOCKS 4
+/**
+ * struct nand_bbt - bad block table structure
+ * @mtd: pointer to MTD device structure
+ * @is_bad_bbm: check if a block is factory bad block
+ * @mark_bad_bbm: imitate a block as factory bad block
+ * @erase: erase block bypassing resvered checks
+ * @bbt_options: bad block specific options. All options used
+ * here must come from nand_bbt.h.
+ * @numchips: number of physical chips, required for NAND_BBT_PERCHIP
+ * @bbt_td: bad block table descriptor for flash lookup.
+ * @bbt_md: bad block table mirror descriptor
+ * @chipsize: the size of one chip for multichip arrays
+ * @chip_shift: number of address bits in one chip
+ * @bbt_erase_shift: number of address bits in a bbt entry
+ * @page_shift: number of address bits in a page
+ * @bbt: bad block table pointer
+ *
+ */
+struct nand_bbt {
+ struct mtd_info *mtd;
+
+ /*
+ * This is important to abstract out of nand_bbt.c and provide
+ * separately in nand_base.c and spi-nand-base.c -- it's sort of
+ * duplicated in nand_block_bad() (nand_base) and
+ * scan_block_fast() (nand_bbt) right now
+ *
+ * Note that this also means nand_chip.badblock_pattern should
+ * be removed from nand_bbt.c
+ */
+ int (*is_bad_bbm)(struct mtd_info *mtd, loff_t ofs);
+
+ /*
+ * Only required if the driver wants to attempt to program new
+ * bad block markers that imitate the factory-marked BBMs
+ */
+ int (*mark_bad_bbm)(struct mtd_info *mtd, loff_t ofs);
+
+ /* Erase a block, bypassing reserved checks */
+ int (*erase)(struct mtd_info *mtd, loff_t ofs);
+
+ unsigned int bbt_options;
+ int numchips;
+
+ /*
+ * Discourage new custom usages here; suggest usage of the
+ * relevant NAND_BBT_* options instead
+ */
+ struct nand_bbt_descr *bbt_td;
+ struct nand_bbt_descr *bbt_md;
+ u64 chipsize;
+ int chip_shift;
+ int bbt_erase_shift;
+ int page_shift;
+ u8 *bbt;
+};
+
#endif /* __LINUX_MTD_NAND_BBT_H */
--
1.9.1
next prev parent reply other threads:[~2015-12-15 6:01 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 5:59 [PATCH v2 00/12] mtd: nand_bbt: introduce independent nand BBT Peter Pan
2015-12-15 5:59 ` [PATCH v2 01/12] mtd: nand_bbt: new header for nand family BBT Peter Pan
2015-12-15 5:59 ` Peter Pan [this message]
2016-01-06 13:12 ` [PATCH v2 02/12] mtd: nand_bbt: introduce struct nand_bbt Boris Brezillon
2015-12-15 5:59 ` [PATCH v2 03/12] mtd: nand_bbt: add new API definitions Peter Pan
2015-12-15 5:59 ` [PATCH v2 04/12] mtd: nand_bbt: add nand_bbt_markbad_factory() interface Peter Pan
2015-12-15 5:59 ` [PATCH v2 05/12] mtd: nand: use new BBT API instead of old ones Peter Pan
2016-01-06 13:36 ` Boris Brezillon
2016-01-06 14:38 ` Boris Brezillon
2016-01-06 15:22 ` Boris Brezillon
2016-01-07 6:03 ` Peter Pan
2015-12-15 5:59 ` [PATCH v2 06/12] mtd: nand_bbt: use erase() and is_bad_bbm() hook in BBT Peter Pan
2016-01-06 13:49 ` Boris Brezillon
2015-12-15 5:59 ` [PATCH v2 07/12] mtd: nand: make nand_erase_nand() static Peter Pan
2015-12-15 5:59 ` [PATCH v2 08/12] mtd: nand_bbt: remove struct nand_chip from nand_bbt.c Peter Pan
2016-01-06 15:16 ` Boris Brezillon
2016-01-07 6:04 ` Peter Pan
2015-12-15 5:59 ` [PATCH v2 09/12] mtd: nand_bbt: remove old API definitions Peter Pan
2015-12-15 5:59 ` [PATCH v2 10/12] mtd: nand_bbt: remove NAND_BBT_DYNAMICSTRUCT macro Peter Pan
2015-12-15 5:59 ` [PATCH v2 11/12] mtd: nand: remove nand_chip.bbt Peter Pan
2015-12-15 5:59 ` [PATCH v2 12/12] mtd: nand-bbt: move nand_bbt.c to mtd folder Peter Pan
2015-12-28 20:42 ` [PATCH v2 00/12] mtd: nand_bbt: introduce independent nand BBT Ezequiel Garcia
2015-12-29 9:35 ` Boris Brezillon
2015-12-29 15:07 ` Ezequiel Garcia
2015-12-29 15:11 ` Boris Brezillon
2015-12-30 7:18 ` 潘栋
2015-12-30 8:31 ` Boris Brezillon
2016-01-06 14:29 ` Boris Brezillon
2016-01-07 5:53 ` Peter Pan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1450159178-29895-3-git-send-email-peterpandong@micron.com \
--to=peterpansjtu@gmail.com \
--cc=beanhuo@micron.com \
--cc=boris.brezillon@free-electrons.com \
--cc=computersforpeace@gmail.com \
--cc=dwmw2@infradead.org \
--cc=fransklaver@gmail.com \
--cc=karlzhang@micron.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=peterpandong@micron.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.