[U-Boot] [PATCHv2 CFI flash]: Workaround for Numonyx Axcell P33/P30 256-Mbit 65nm bug
Stefan Roese
sr at denx.de
Tue Aug 10 13:20:42 CEST 2010
Hi Philippe,
On Monday 09 August 2010 17:46:03 Philippe De Muyter wrote:
> > Please move this variable declaration of "cmd" and assignment further
> > down (see below). You can remove the "{" "}" of this block then.
>
> Here is the excerpt from the errata :
>
> Workaround: If the interval between 60h and its subsequent command
> can be guaranteed within 20μs, Option I is recommended,
> otherwise Option II (involves hardware) should be selected.
> Option I: The table below lists the detail command sequences:
> Command
> Data bus Address bus Remarks
> Sequence
> 1 90h Block Address
> Read Lock Status
> 2 Read Block Address + 02h
> (2)(3) (1)
> 3 60h Block Address
> (2)(3) (1) Lock/Unlock/RCR
> Configuration 4 D0h/01h/03h Block Address
> Notes:
> (1) Block Address refers to RCR configuration data only when the 60h
> command sequence is used to set RCR register combined with 03h
> subsequent command.
> (2) For the third and fourth command sequences, the Block Address must
> be the same.
> (3) The interval between 60h command and its subsequent D0h/01h/2Fh/03h
> commands should be less than 20μs.
>
> Because of requirement (3), I choosed to minimize the number of
> instructions between the `read lock status' and the `unlock' commands,
> hence the initialisation of `cmd' moved before the `read lock status'
> (hidden in `flash_isequal').
From my understanding, "only" the last 2 operations need to be in max.
20µs interval. If this is the case, then I would prefer this code
version:
case CFI_CMDSET_INTEL_EXTENDED:
/*
* see errata called
* "Numonyx Axcell P33/P30 Specification Update" :)
*/
flash_write_cmd (info, sector, 0, FLASH_CMD_READ_ID);
if (!flash_isequal (info, sector, FLASH_OFFSET_PROTECT,
prot)) {
int flag = disable_interrupts ();
unsigned short cmd;
if (prot)
cmd = FLASH_CMD_PROTECT_SET;
else
cmd = FLASH_CMD_PROTECT_CLEAR;
/*
* cmd must come before FLASH_CMD_PROTECT + 20us
* Disable interrupts which might cause a timeout here.
*/
flash_write_cmd (info, sector, 0,
FLASH_CMD_PROTECT);
flash_write_cmd (info, sector, 0, cmd);
/* re-enable interrupts if necessary */
if (flag)
enable_interrupts ();
}
> > > + /*
> > > + * see errata called
> > > + * "Numonyx Axcell P33/P30 Specification
> > > Update" :) + */
> > > + flash_write_cmd (info, sector, 0,
> > > FLASH_CMD_READ_ID); + if (!flash_isequal (info,
> > > sector, FLASH_OFFSET_PROTECT, +
> > > prot)) {
> > > + int flag = disable_interrupts ();
> >
> > Declare and assign "cmd" here please.
> >
> > Please change and resubmit. Thanks.
>
> If you still prefer it changed, speak :)
Yes, please let me know if this patch version also fixes the bug. If
this is the case, I would prefer that you change it accordingly.
Thanks.
Cheers,
Stefan
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de
More information about the U-Boot
mailing list