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