All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [MTD] OneNAND: Invalidate bufferRAM after erase
@ 2007-02-08 10:03 Adrian Hunter
  2007-02-09  0:16 ` Kyungmin Park
  0 siblings, 1 reply; 4+ messages in thread
From: Adrian Hunter @ 2007-02-08 10:03 UTC (permalink / raw)
  To: linux-mtd

>From df9f430fa8198c7d60acdcf0c237a34916b5ac5b Mon Sep 17 00:00:00 2001
From: Adrian Hunter <ext-adrian.hunter@nokia.com>
Date: Wed, 7 Feb 2007 13:55:19 +0200
Subject: [MTD] OneNAND: Invalidate bufferRAM after erase

OneNAND has internal bufferRAMs.  The driver keeps track of
what is in the bufferRAM to save having to load from the
NAND core.  After an erase operation, the driver must
mark bufferRAM invalid if it refers to the erased block.

Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
---
 drivers/mtd/onenand/onenand_base.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index f690c19..cf66c93 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -628,6 +628,29 @@ static void onenand_update_bufferram(str
 }
 
 /**
+ * onenand_invalidate_bufferram_range - [GENERIC] Invalidate BufferRAM information
+ * @param mtd		MTD data structure
+ * @param addr		start address to invalidate
+ * @param len		length to invalidate
+ *
+ * Invalidate BufferRAM information
+ */
+static void onenand_invalidate_bufferram_range(struct mtd_info *mtd, loff_t addr,
+		unsigned int len)
+{
+	struct onenand_chip *this = mtd->priv;
+	int i;
+	loff_t end_addr = addr + len;
+
+	/* Invalidate BufferRAM */
+	for (i = 0; i < MAX_BUFFERRAM; i++) {
+		loff_t buf_addr = this->bufferram[i].blockpage << this->page_shift;
+		if (buf_addr >= addr && buf_addr < end_addr)
+			this->bufferram[i].blockpage = -1;
+	}
+}
+
+/**
  * onenand_get_device - [GENERIC] Get chip for selected access
  * @param mtd		MTD device structure
  * @param new_state	the state which is requested
@@ -1466,6 +1489,8 @@ static int onenand_erase(struct mtd_info
 			goto erase_exit;
 		}
 
+		onenand_invalidate_bufferram_range(mtd, addr, block_size);
+
 		this->command(mtd, ONENAND_CMD_ERASE, addr, block_size);
 
 		ret = this->wait(mtd, FL_ERASING);
-- 
1.4.3

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* RE: [PATCH] [MTD] OneNAND: Invalidate bufferRAM after erase
  2007-02-08 10:03 [PATCH] [MTD] OneNAND: Invalidate bufferRAM after erase Adrian Hunter
@ 2007-02-09  0:16 ` Kyungmin Park
  2007-02-09  9:47   ` Adrian Hunter
  0 siblings, 1 reply; 4+ messages in thread
From: Kyungmin Park @ 2007-02-09  0:16 UTC (permalink / raw)
  To: 'Adrian Hunter', linux-mtd

Hi Adrian,

I checked it with pagetest module. Without the patch it failed.
I have two minor comments. 

Thank you,
Kyungmin Park

>  /**
> + * onenand_invalidate_bufferram_range - [GENERIC] Invalidate 
> BufferRAM information
> + * @param mtd		MTD data structure
> + * @param addr		start address to invalidate
> + * @param len		length to invalidate
> + *
> + * Invalidate BufferRAM information
> + */
> +static void onenand_invalidate_bufferram_range(struct 
> mtd_info *mtd, loff_t addr,
> +		unsigned int len)

It's name too long even though it invalidate with some range.
How about just call "onenand_invalidate_bufferram"?

> +/**
>   * onenand_get_device - [GENERIC] Get chip for selected access
>   * @param mtd		MTD device structure
>   * @param new_state	the state which is requested
> @@ -1466,6 +1489,8 @@ static int onenand_erase(struct mtd_info
>  			goto erase_exit;
>  		}
>  
> +		onenand_invalidate_bufferram_range(mtd, addr, 
> block_size);
> +
>  		this->command(mtd, ONENAND_CMD_ERASE, addr, block_size);

Place onenand_invalidate_bufferram_range here
Since erase command takes a long time, 2msec so we overlap the some cpu
works and onenand physicall works between command and wait.

>  
>  		ret = this->wait(mtd, FL_ERASING);

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] [MTD] OneNAND: Invalidate bufferRAM after erase
  2007-02-09  0:16 ` Kyungmin Park
@ 2007-02-09  9:47   ` Adrian Hunter
  2007-02-09 15:17     ` David Woodhouse
  0 siblings, 1 reply; 4+ messages in thread
From: Adrian Hunter @ 2007-02-09  9:47 UTC (permalink / raw)
  To: linux-mtd

>From df9f430fa8198c7d60acdcf0c237a34916b5ac5b Mon Sep 17 00:00:00 2001
From: Adrian Hunter <ext-adrian.hunter@nokia.com>
Date: Wed, 7 Feb 2007 13:55:19 +0200
Subject: [MTD] OneNAND: Invalidate bufferRAM after erase

OneNAND has internal bufferRAMs.  The driver keeps track of
what is in the bufferRAM to save having to load from the
NAND core.  After an erase operation, the driver must
mark bufferRAM invalid if it refers to the erased block.

Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com>
---
 drivers/mtd/onenand/onenand_base.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index f690c19..cf66c93 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -628,6 +628,29 @@ static void onenand_update_bufferram(str
 }
 
 /**
+ * onenand_invalidate_bufferram - [GENERIC] Invalidate BufferRAM information
+ * @param mtd		MTD data structure
+ * @param addr		start address to invalidate
+ * @param len		length to invalidate
+ *
+ * Invalidate BufferRAM information
+ */
+static void onenand_invalidate_bufferram(struct mtd_info *mtd, loff_t addr,
+		unsigned int len)
+{
+	struct onenand_chip *this = mtd->priv;
+	int i;
+	loff_t end_addr = addr + len;
+
+	/* Invalidate BufferRAM */
+	for (i = 0; i < MAX_BUFFERRAM; i++) {
+		loff_t buf_addr = this->bufferram[i].blockpage << this->page_shift;
+		if (buf_addr >= addr && buf_addr < end_addr)
+			this->bufferram[i].blockpage = -1;
+	}
+}
+
+/**
  * onenand_get_device - [GENERIC] Get chip for selected access
  * @param mtd		MTD device structure
  * @param new_state	the state which is requested
@@ -1466,6 +1489,8 @@ static int onenand_erase(struct mtd_info
 
 		this->command(mtd, ONENAND_CMD_ERASE, addr, block_size);
 
+		onenand_invalidate_bufferram(mtd, addr, block_size);
+
 		ret = this->wait(mtd, FL_ERASING);
 		/* Check, if it is write protected */
 		if (ret) {
-- 
1.4.3

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] [MTD] OneNAND: Invalidate bufferRAM after erase
  2007-02-09  9:47   ` Adrian Hunter
@ 2007-02-09 15:17     ` David Woodhouse
  0 siblings, 0 replies; 4+ messages in thread
From: David Woodhouse @ 2007-02-09 15:17 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Kyungmin Park, linux-mtd

On Fri, 2007-02-09 at 11:47 +0200, Adrian Hunter wrote:
> OneNAND has internal bufferRAMs.  The driver keeps track of
> what is in the bufferRAM to save having to load from the
> NAND core.  After an erase operation, the driver must
> mark bufferRAM invalid if it refers to the erased block.
> 
> Signed-off-by: Adrian Hunter <ext-adrian.hunter@nokia.com> 

I've pulled from the onenand git tree and applied this extra patch.

-- 
dwmw2

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-02-09 15:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-08 10:03 [PATCH] [MTD] OneNAND: Invalidate bufferRAM after erase Adrian Hunter
2007-02-09  0:16 ` Kyungmin Park
2007-02-09  9:47   ` Adrian Hunter
2007-02-09 15:17     ` David Woodhouse

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.