All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthieu CASTET <matthieu.castet@parrot.com>
To: linux-mtd <linux-mtd@lists.infradead.org>
Subject: [PATCH] write bad block marker even with BBT
Date: Mon, 25 Oct 2010 10:38:59 +0200	[thread overview]
Message-ID: <4CC54223.2050401@parrot.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 209 bytes --]

Add a new flag to force writing bad block marker if we use bad block table.
This allow to solve problem where bootloader don't support reading BBT.

Signed-off-by: Matthieu CASTET <matthieu.castet@parrot.com>

[-- Attachment #2: mtd_btt.diff --]
[-- Type: text/x-diff, Size: 1574 bytes --]

diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index ddffe76..4d79a8d 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -396,7 +396,7 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
 {
 	struct nand_chip *chip = mtd->priv;
 	uint8_t buf[2] = { 0, 0 };
-	int block, ret, i = 0;
+	int block, ret = 0, i = 0;
 
 	if (chip->options & NAND_BBT_SCANLASTPAGE)
 		ofs += mtd->erasesize - mtd->writesize;
@@ -409,7 +409,12 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
 	/* Do we have a flash based bad block table ? */
 	if (chip->options & NAND_USE_FLASH_BBT)
 		ret = nand_update_bbt(mtd, ofs);
-	else {
+
+	/* Write the bad block marker if we don't have BBT, or driver
+	 * request it (in case the bootloader doesn't support reading it
+	 * or we loose BBT).
+	 */
+	if (!(chip->options & NAND_USE_FLASH_BBT) || chip->options & NAND_WRITE_BB) {
 		nand_get_device(chip, mtd, FL_WRITING);
 
 		/* Write to first two pages and to byte 1 and 6 if necessary.
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index 102e12c..2efd2f9 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -215,6 +215,8 @@ typedef enum {
 #define NAND_OWN_BUFFERS	0x00040000
 /* Chip may not exist, so silence any errors in scan */
 #define NAND_SCAN_SILENT_NODEV	0x00080000
+/* in case of NAND_USE_FLASH_BBT, write also bad block marker */
+#define NAND_WRITE_BB	0x00100000
 
 /* Options set by nand scan */
 /* Nand scan has allocated controller struct */

             reply	other threads:[~2010-10-25  8:39 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-25  8:38 Matthieu CASTET [this message]
2010-10-27 18:26 ` [PATCH] write bad block marker even with BBT Artem Bityutskiy

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=4CC54223.2050401@parrot.com \
    --to=matthieu.castet@parrot.com \
    --cc=linux-mtd@lists.infradead.org \
    /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.