OneNAND: read-while-load (known problem)
Kyungmin Park
kyungmin.park at samsung.com
Mon Jan 8 20:14:42 EST 2007
Ah, I see
please try this patch. In my test program. It passed.
Thank you,
Kyungmin Park
--
@@ -747,6 +819,14 @@ static int onenand_read(struct mtd_info *mtd, loff_t from, size_t len,
from += thislen;
if (read + thislen < len) {
this->command(mtd, ONENAND_CMD_READ, from, mtd->writesize);
+ /*
+ * Chip boundary handling in DDP
+ * Now we issued chip 1 read and pointed chip 1
+ * bufferam so we have to point chip 0 bufferam.
+ */
+ if (this->device_id & ONENAND_DEVICE_IS_DDP &&
+ from == (this->chipsize >> 1))
+ this->write_word(0, this->base + ONENAND_REG_START_ADDRESS2);
ONENAND_SET_PREV_BUFFERRAM(this);
}
/* While load is going, read from last bufferRAM */
------- Original Message -------
Sender : Adrian Hunter<hunter.programmer at gmail.com>
Date : Jan 08, 2007 18:29
Title : Re: OneNAND: read-while-load (known problem)
On 1/8/07, Kyungmin Park <kyungmin.park at samsung.com> wrote:
> Hi Adrian,
>
> > Do you think there could be a problem with onenand_check_bufferram also?
>
> No, onenand_check_bufferram & onenand_update_bufferram is right.
>
What I meant was this:
1. Read page x from chip 0. It goes to dataRAM 0 in chip 0
2. Read page y from chip 1. It goes to dataRAM 1 in chip 1
3. Read page x from chip 0. Now the read incorrectly comes from
dataRAM 0 in chip 1 because that was the last chip selected.
More information about the linux-mtd
mailing list