[U-Boot-Users] PATCH: support JEDEC flash roms in CFI-flash framework

Michael Schwingen rincewind at discworld.dascon.de
Tue Nov 13 19:59:12 CET 2007


On Tue, Nov 13, 2007 at 04:26:20PM +0100, Bartlomiej Sieka wrote:
> 
> Your patch fixes an issue with AMD_ADDR_* definitions for CFI flashes,
> along with its primary intent (JEDEC support in CFI framework). I think
> it would be better to submit the fix to AMD_ADDR_* as a separate patch.

Um - no. I removed that when changing to the unlock_addr* variables in the
flash_info_t struct, for just that reason - I wanted the patch to be applied
soon, and I have no way to test the change on a large number of boards.

Unless I made some error in the conversion, the CFI code should behave
exactly the same with and without my patch. Only the Jedec code uses
different unlock_addr values.

> It's more logical this way, also, it might get committed sooner, as it
> likely fixes a problem with an existing board. I am willing to test such
> a patch on one of the troublesome boards.

Actually, there are two points where I think the current code is wrong, and
which I did not change, because those are probably best handled in separate
patches:
 - unlock_addr values when running on 8-bit CFI flashs (interface == 0)
 - the AMD erase code, where the unlock sequence is written to the sector
   base address instead of the chip base address.

I am not sure what the policy is regarding changes that might break
existing boards? Are those patches applied if enough people are sure they
should be safe?

> Perhaps it would be better to follow what is being done in the Linux
> driver, adjusted to U-Boot context. I.e., something along the lines of
> (untested):
> 
> info->unlock_addr1 = 0x555;
> info->unlock_adde2 = 0x2aa;
> 
> /* Modify the unlock address if we are in compatibility mode */
> if (	/* x16 in x8 mode */
> 	((info->chipwidth == FLASH_CFI_BY8) &&
> 		(info->interface == 2)) ||
> 	/* x32 in x16 mode */
> 	((info->chipwidth == FLASH_CFI_BY16) &&
> 		(info->interface == 4)))
> {
> 	info->unlock_addr1 = 0xaaa;
> 	info->unlock_addr2 = 0x555;
> }

Agreed. I had this in an earlier version of my patch, where I needed to
modify the AMD_ADDR_* macros, but removed it later in order to make minimal
changes to the existing CFI behaviour. I think this should be added on top
of my patch, unless everyone on this list agrees that it should go in
immediately.

> > @@ -52,6 +52,9 @@ typedef struct {
> >  	ushort	ext_addr;		/* extended query table address		*/
> >  	ushort	cfi_version;		/* cfi version				*/
> >  	ushort	cfi_offset;		/* offset for cfi query 		*/
> > +	ulong   unlock_addr1;		/* unlock address 1 for AMD flash roms  */
> > +	ulong   unlock_addr2;		/* unlock address 2 for AMD flash roms  */
> 
> Linux driver uses addr_unlock1 and addr_unlock2 for this purpose, maybe 
> it's a good idea to keep the variable names in sync with Linux?

Not sure - the CFI code does not look very similar to the Linux code, so I
see no big benefit in doing so, but as it is just a name, I can live with
both variants.

cu
Michael
-- 
Some people have no respect of age unless it is bottled.




More information about the U-Boot mailing list