public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Ross Morley <ross@tensilica.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] CFI Driver Problem: flash not ready
Date: Wed, 22 Oct 2008 19:20:12 -0700	[thread overview]
Message-ID: <48FFDF5C.3060307@tensilica.com> (raw)
In-Reply-To: <20081019195142.C34DC832E43A@gemini.denx.de>

I ran into this symptom once. In that instance a compiler bug
caused 'volatile' not to be honored when there were two reads
in a single expression, so it read the status only once and
saw no toggle. The workaround was to split the expression to
two statements so each read was in a different statement (the
compiler has since been fixed). Check your generated ASM code.

Ross Morley


Wolfgang Denk wrote:

>Hi,
>
>while tryong to convert the TQM8260 board  to  using  the  CFI  flash
>driver  (instead  of  a  perfectly working legacy flash driver) I ran
>into a strange problem: after an  erase  operation,  the  CFI  driver
>returns without any error indication, but the flash is not ready yet.
>It takes some more milliseconds before the flash gets ready - by then
>it's indeed erased, but this behaviour makes things like "saveenv" or
>any "erase;cp" command sequences fail with a "Flash not Erased" error
>message.
>
>Symptoms look like this:
>
>=> md 40300000 10 ; era 40300000 +1 ; md 40300000 ; echo ===== ; sleep 1 ; md 40300000
>40300000: 19852003 0000000c f060dc98 ffffffff    .. ......`......
>40300010: ffffffff ffffffff ffffffff ffffffff    ................
>40300020: ffffffff ffffffff ffffffff ffffffff    ................
>40300030: ffffffff ffffffff ffffffff ffffffff    ................
>
>. done
>Erased 1 sectors
>40300000: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>40300010: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>40300020: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>40300030: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>=====
>40300000: ffffffff ffffffff ffffffff ffffffff    ................
>40300010: ffffffff ffffffff ffffffff ffffffff    ................
>40300020: ffffffff ffffffff ffffffff ffffffff    ................
>40300030: ffffffff ffffffff ffffffff ffffffff    ................
>=> 
>
>The board uses 4 x 29LV652UE-90 flash chips for a single 32 MiB flash
>bank, 64 bit wide; the old legacy driver showed:
>
>	Bank # 1: FUJITSU 29LV640D (64 M, uniform sector)
>	  Size: 32 MB in 128 Sectors
>
>The CFI driver says:
>
>	Bank # 1: CFI conformant FLASH (64 x 16)  Size: 32 MB in 128 Sectors
>	  AMD Standard command set, Manufacturer ID: 0x04, Device ID: 0x22D7
>	  Erase timeout: 16384 ms, write timeout: 1 ms
>
>CFI debugging shows nothing unusual (at least as far as I can tell):
>
>	...
>	FLASH: flash detect cfi
>	fwc addr 40000000 cmd f0 f0 8bit x 8 bit
>	fwc addr 40000000 cmd ff ff 8bit x 8 bit
>	fwc addr 40000055 cmd 98 98 8bit x 8 bit
>	is= cmd 51(Q) addr 40000010 is= 80 51
>	fwc addr 40000555 cmd 98 98 8bit x 8 bit
>	is= cmd 51(Q) addr 40000010 is= 80 51
>	fwc addr 40000000 cmd f0 f0f0 16bit x 8 bit
>	fwc addr 40000000 cmd ff ffff 16bit x 8 bit
>	fwc addr 400000aa cmd 98 9898 16bit x 8 bit
>	is= cmd 51(Q) addr 40000020 is= 0000 5151
>	fwc addr 40000aaa cmd 98 9898 16bit x 8 bit
>	is= cmd 51(Q) addr 40000020 is= 0000 5151
>	fwc addr 40000000 cmd f0 00f0 16bit x 16 bit
>	fwc addr 40000000 cmd ff 00ff 16bit x 16 bit
>	fwc addr 400000aa cmd 98 0098 16bit x 16 bit
>	is= cmd 51(Q) addr 40000020 is= 0000 0051
>	fwc addr 40000aaa cmd 98 0098 16bit x 16 bit
>	is= cmd 51(Q) addr 40000020 is= 0000 0051
>	fwc addr 40000000 cmd f0 f0f0f0f0 32bit x 8 bit
>	fwc addr 40000000 cmd ff ffffffff 32bit x 8 bit
>	fwc addr 40000154 cmd 98 98989898 32bit x 8 bit
>	is= cmd 51(Q) addr 40000040 is= 00000000 51515151
>	fwc addr 40001554 cmd 98 98989898 32bit x 8 bit
>	is= cmd 51(Q) addr 40000040 is= 00000000 51515151
>	fwc addr 40000000 cmd f0 00f000f0 32bit x 16 bit
>	fwc addr 40000000 cmd ff 00ff00ff 32bit x 16 bit
>	fwc addr 40000154 cmd 98 00980098 32bit x 16 bit
>	is= cmd 51(Q) addr 40000040 is= 00000000 00510051
>	fwc addr 40001554 cmd 98 00980098 32bit x 16 bit
>	is= cmd 51(Q) addr 40000040 is= 00000000 00510051
>	fwc addr 40000000 cmd f0 000000f0 32bit x 32 bit
>	fwc addr 40000000 cmd ff 000000ff 32bit x 32 bit
>	fwc addr 40000154 cmd 98 00000098 32bit x 32 bit
>	is= cmd 51(Q) addr 40000040 is= 00000000 00000051
>	fwc addr 40001554 cmd 98 00000098 32bit x 32 bit
>	is= cmd 51(Q) addr 40000040 is= 00000000 00000051
>	fwrite addr 40000000 cmd f0 f0f0f0f0f0f0f0f0 64 bit x 8 bit
>	fwrite addr 40000000 cmd ff ffffffffffffffff 64 bit x 8 bit
>	fwrite addr 400002a8 cmd 98 9898989898989898 64 bit x 8 bit
>	is= cmd 51(Q) addr 40000080 is= 0051005100510051 5151515151515151
>	fwrite addr 40002aa8 cmd 98 9898989898989898 64 bit x 8 bit
>	is= cmd 51(Q) addr 40000080 is= 0051005100510051 5151515151515151
>	fwrite addr 40000000 cmd f0 00f000f000f000f0 64 bit x 16 bit
>	fwrite addr 40000000 cmd ff 00ff00ff00ff00ff 64 bit x 16 bit
>	fwrite addr 400002a8 cmd 98 0098009800980098 64 bit x 16 bit
>	is= cmd 51(Q) addr 40000080 is= 0051005100510051 0051005100510051
>	is= cmd 52(R) addr 40000088 is= 0052005200520052 0052005200520052
>	is= cmd 59(Y) addr 40000090 is= 0059005900590059 0059005900590059
>	device interface is 1
>	found port 8 chip 2 port 64 bits chip 16 bits
>	00 : 51 52 59 02 00 40 00 00 00 00 00 27 36 00 00 04  QRY.. at .....'6...
>	10 : 00 0a 00 05 00 04 00 17 01 00 00 00 01 7f 00 00  ................
>	20 : 01 00 00 00 00 00 00 00 00 00 00 00 00 ff ff ff  ................
>	fwrite addr 40000000 cmd f0 00f000f000f000f0 64 bit x 16 bit
>	fwrite addr 40002aa8 cmd aa 00aa00aa00aa00aa 64 bit x 16 bit
>	fwrite addr 40001550 cmd 55 0055005500550055 64 bit x 16 bit
>	fwrite addr 40002aa8 cmd 90 0090009000900090 64 bit x 16 bit
>	fwrite addr 40000000 cmd f0 00f000f000f000f0 64 bit x 16 bit
>	fwrite addr 400002a8 cmd 98 0098009800980098 64 bit x 16 bit
>	manufacturer is 2
>	manufacturer id is 0x4
>	device id is 0x22d7
>	device id2 is 0x0
>	cfi version is 0x3131
>	size_ratio 4 port 64 bits chip 16 bits
>	found 1 erase regions
>	erase region 0: 0x0100007f
>	erase_region_count = 128 erase_region_size = 65536
>	fwrite addr 40000000 cmd f0 00f000f000f000f0 64 bit x 16 bit
>	32 MB
>
>The test from above with debug enabled looks like this:
>
>	=> md 40300000 10 ; era 40300000 +1 ; md 40300000 ; echo ===== ; sleep 1 ; md 40300000
>	40300000: 19852003 0000000c f060dc98 ffffffff    .. ......`......
>	40300010: ffffffff ffffffff ffffffff ffffffff    ................
>	40300020: ffffffff ffffffff ffffffff ffffffff    ................
>	40300030: ffffffff ffffffff ffffffff ffffffff    ................
>
>	fwrite addr 40302aa8 cmd aa 00aa00aa00aa00aa 64 bit x 16 bit
>	fwrite addr 40301550 cmd 55 0055005500550055 64 bit x 16 bit
>	fwrite addr 40302aa8 cmd 80 0080008000800080 64 bit x 16 bit
>	fwrite addr 40302aa8 cmd aa 00aa00aa00aa00aa 64 bit x 16 bit
>	fwrite addr 40301550 cmd 55 0055005500550055 64 bit x 16 bit
>	fwrite addr 40300000 cmd 30 0030003000300030 64 bit x 16 bit
>	flash_is_busy: 0
>	. done
>	Erased 1 sectors
>	40300000: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>	40300010: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>	40300020: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>	40300030: 004c004c 00080008 004c004c 00080008    .L.L.....L.L....
>	=====
>	40300000: ffffffff ffffffff ffffffff ffffffff    ................
>	40300010: ffffffff ffffffff ffffffff ffffffff    ................
>	40300020: ffffffff ffffffff ffffffff ffffffff    ................
>	40300030: ffffffff ffffffff ffffffff ffffffff    ................
>	=> 
>
>Why the heck does flash_is_busy() return 0 when the flashobviously is
>still busy?
>
>Thanks in advance.
>
>Best regards,
>
>Wolfgang Denk
>
>  
>

      parent reply	other threads:[~2008-10-23  2:20 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-19 19:51 [U-Boot] CFI Driver Problem: flash not ready Wolfgang Denk
2008-10-19 21:59 ` Scott McNutt
2008-10-19 22:10   ` Wolfgang Denk
2008-10-23 23:26   ` Wolfgang Denk
2008-10-20  8:00 ` stefano babic
2008-10-23  2:20 ` Ross Morley [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48FFDF5C.3060307@tensilica.com \
    --to=ross@tensilica.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox