Erase verify problem with OneNAND

Kyungmin Park kyungmin.park at samsung.com
Wed Jan 25 02:32:25 EST 2006


Hi Jakko 

I think it's same problem related with Double Density Package (DDP) previous

In erase call path, there's no DDP select. It only set DFS, FBA as following

% onenand_command()
        if (block != -1) {
                /* Write 'DFS, FBA' of Flash */
                value = onenand_block_address(this, block);
                this->write_word(value, this->base +
ONENAND_REG_START_ADDRESS1);
        }

I think we have to add 

	  /* Select DataRAM for DDP */
              value = onenand_bufferram_address(this, block);
              this->write_word(value, this->base +
ONENAND_REG_START_ADDRESS2);

Now I can't have a DDP chip I can't test.  please test this code and
feekback

And "Newly-erased block contained word ..." is also happend on my board in
latest omap kernel tree.
Now I also debugging this problem

Regards,
Kyungmin Park

> -----Original Message-----
> From: Jarkko Lavinen [mailto:jarkko.lavinen at nokia.com] 
> Sent: Tuesday, January 24, 2006 9:47 PM
> To: Kyungmin Park
> Cc: linux-mtd at lists.infradead.org
> Subject: Erase verify problem with OneNAND
> 
> Hi Kyungmin
> 
> I have a strange erase verify read problem with OneNand. It occurs
> strangely when crossing the 128MB border, first erasing (and
> presumably verifying) a block on other side and then erasing another
> block on the other side. Then verify reads garbage.
> 
> I am using CVS head for the drivers/mtd but the JFFS2 part is from the
> 2.6.15 kernel, before Erase Block Headers were committed. 
> Onenand_base.c
> is rev 1.15. The test board has muxed 256MB OneNand.
> 
> I see JFFS2 repeatably complaining "Newly-erased block contained
> word...".  This comes from fs/jffs2/erase.c:jffs2_block_check_erase()
> which reads the erased block and checks all the bits are 1.
> 
> I see this occuring when I flash JFFS2 root image and boot it. Our
> bootloader leaves unused erase blocks empty, without cleanmarker.
> When JFFS2 sees an empty block, it has to erase it again since there 
> is no cleanmarker. After erasing, it reads the first page to see it 
> really is empty.
> 
> For some reason the first verify read at physical offset 0x7fe0000 
> (JFFS2 report offset 0x07b60000 relative to the partition offset 
> 0x480000) fails but retry succeeds -- which means the block was 
> correctly erased but the first verify reads some garbage.
> 
> This is tricky to debug, since the problem disappears if I increase 
> MTD debug level. On the other hand the verify problem seems to appear
> always after after flashing and booting the board.
> 
> I have modified jffs2_block_check_erase() to retry the verify read
> if garbage is seen at the erased page.  I am using MTD debug level
> 0 and changed onenand_erase to report at that level to see when it 
> is being called.
> 
> The repeatably occuring one:
> 
>   ...
>   onenand_erase: start = 0x08040000, len = 131072
>   onenand_erase: start = 0x08020000, len = 131072
>   onenand_erase: start = 0x08000000, len = 131072
>   onenand_erase: start = 0x07fe0000, len = 131072
>   Newly-erased block contained word 0x45e0f628 at offset 0x07b60000
>   Read OK after 1 retries
>   onenand_erase: start = 0x07fc0000, len = 131072
>   onenand_erase: start = 0x07fa0000, len = 131072
>   onenand_erase: start = 0x07f80000, len = 131072
>   ...
> 
> Another exmaple, less frequent:
> 
>   onenand_erase: start = 0x04ce0000, len = 131072
>   onenand_erase: start = 0x04cc0000, len = 131072
>   onenand_erase: start = 0x04ca0000, len = 131072
>   onenand_erase: start = 0x0ffe0000, len = 131072
>   Newly-erased block contained word 0x7ea4c at offset 0x0fb60000
>   Read OK after 1 retries
> 
> Jarkko Lavinen
> 
> 





More information about the linux-mtd mailing list