Numonyx NOR flash mutex problem when creating UBI volumes

Stefan Bigler stefan.bigler at keymile.com
Wed Feb 2 06:18:45 EST 2011


Hi all,
we have on a powerpc based board with a new Numonyx P30 65nm 1GBit flash and
we see have problems with write errors when we create an ubi volume.

To find the problem I added few printk in the cfi_cmdset_0001.c
Adding a printk for erase suspend make the problem show always.
I expect a problem with the protection as discussed already in the thread
Numonyx NOR and chip->mutex bug?

I printed the time (using jiffies), the tid, the operation and address 
of the operation.


-bash-3.2# ubimkvol /dev/ubi0 -s 6MiB -N test_volume

  time   tid  operation               address of operation       my comments
--------------------------------------------------------------------------------- 

[0179][0209] do_erase_oneblock start adr=0x00000000             start 
erase block
[0187][0465] erase suspend           adr=0x01125000             erase 
suspend (strange adr)
[0191][0209] erase resumed           adr=0x00000000             erase 
resume  (correct adr)
[0199][0209] do_erase_oneblock end   adr=0x00000000             erase end
[1175][0465] 50000000.flash: buffer write error status 0xb0 
adr=0x01125400 len=0x400

program failed status (0xb0) ready & cmd sequence error

In addition I added all cmd sent to the flash in a buffer and print it 
in case of error.
Here is the log:

  time   tid  operation                                  my comments
--------------------------------------------------------------------------------- 

[0187][0209] do_erase_oneblock start adr=0x00000000     first thread  
Start with erasing adr=0
[0187][0209] map_write 0x50 to 0x00000000                             
Clr Status Reg
[0187][0209] map_write 0x20 to 0x00000000                      Block 
Erase adr=0
[0187][0209] map_write 0xd0 to 0x00000000                      Block 
Erase Confirm adr=0
[0187][0465] map_write 0xb0 to 0x01125000               second thread 
Erase suspend
[0191][0465] map_write 0x70 to 0x01125000                      Read 
Status Reg
[0191][0465] map_write 0xe8 to 0x01125000                             
Buffered Prog  adr=0x01125000
[0191][0209] map_write 0x70 to 0x00000000               first thread  
Read Status Reg
[0191][0209] map_write 0xd0 to 0x00000000                             
Resume (what!?!)
[0191][0209] map_write 0x70 to 0x00000000                             
Read Status Reg
[0199][0209] erase resumed 2b        adr=0x00000000                   
(Erase) Resumed Finsh
[0207][0209] do_erase_oneblock end   adr=0x00000000                   
Erase finished
[0207][0465] map_write 0x1ff to 0x01125000              second thread 
!!! contiune with Buffer Prog, write size
[0207][0465] map_write 0xc03c0000 to 0x01125000                       
write 512 word data to buf
[0207][0465] map_write 0xc03c0000 to 0x01125002
..
[0211][0465] map_write 0xc03c0000 to 0x011253fc
[0211][0465] map_write 0xc03c0000 to 0x011253fe
[0211][0465] map_write 0xd0 to 0x01125000                             
Buffered Prog Confirm
[1175][0465] map_write 0x50 to 0x01125000                  Clr Status Reg
[1175][0465] map_write 0x70 to 0x01125000                             
Read Status Reg
[1183][0465] 50000000.flash: buffer write error status 0xb0 
adr=0x01125400 len=0x0 (0x400)  Buffered Prog failed status (0xb0) ready 
& cmd sequence error

Conclusion:
I expect is a protection problem. A running erase is suspended due to 
write. But the write is not finished.
The erase is resumed in the middle of the buffered Prog preparation.

Do you have any ideas why this can happen?

Best Regards
Stefan Bigler




More information about the linux-mtd mailing list