[U-Boot-Users] cfi_flash.c and lost volatile qualifier

Adrian Filipi adrian.filipi at eurotech.com
Tue Apr 29 22:20:09 CEST 2008


hi folks,

 	I've come across a case on one of our PXA250 boards where the 
flash was getting corrupted when using the 1.3.2 version of cfi_flash.c, 
while the 1.2.0 version worked just fine.

 	Here's what happens:

 	1. Reprogram uboot.
 	2. Compare uboot in flash against uboot in DRAM.
 	3. Either run "reset" or press the reset button.
 	4. Compare the flash and DRAM, as well as a new copy
 	   of uboot re-read from CF for good measure.

 	At this point the low byte in the word at offset 0x554 has switched 
from a 0x30 to a 0x10.  This is the only change in the flash.  The new 
value is always the same.

 	I narrowed down the source of the problem to the loss of the 
volatile qualifier on the addr pointer in flash_write_cmd().  Adding the 
qualifier gets rid of the corruption.  In the older 1.2.0 sources, addr was 
declared as "volatile cfiptr_t addr;".

 	Has anyone else seen this?  It seems like the safe thing to do is 
to restore the qualifier in general.

 	Below is a diff, of the change for the 1.3.2. sources:

diff -u -r1.1.1.2.2.2 cfi_flash.c
--- cfi_flash.c	23 Apr 2008 17:02:47 -0000	1.1.1.2.2.2
+++ cfi_flash.c	29 Apr 2008 18:55:47 -0000
@@ -464,7 +464,7 @@
  			     uint offset, uchar cmd)
  {

-	void *addr;
+	void *volatile addr;
  	cfiword_t cword;

  	addr = flash_map (info, sect, offset);

 	Adrian
--
Linux Software Engineer | EuroTech, Inc. | www.eurotech-inc.com





More information about the U-Boot mailing list