Skip to content

Commit

Permalink
[MTD] OneNAND: Invalidate bufferRAM after erase
Browse files Browse the repository at this point in the history
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>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
  • Loading branch information
Adrian Hunter authored and David Woodhouse committed Feb 9, 2007
1 parent 678c857 commit 480b9df
Showing 1 changed file with 25 additions and 0 deletions.
25 changes: 25 additions & 0 deletions drivers/mtd/onenand/onenand_base.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,29 @@ static void onenand_update_bufferram(struct mtd_info *mtd, loff_t addr,
this->bufferram[i].blockpage = -1;
}

/**
* 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
Expand Down Expand Up @@ -1476,6 +1499,8 @@ static int onenand_erase(struct mtd_info *mtd, struct erase_info *instr)

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) {
Expand Down

0 comments on commit 480b9df

Please sign in to comment.