[U-Boot] [PATCH] cfi_flash: don't hide write/erase errors

Baruch Siach baruch at tkos.co.il
Mon Oct 6 13:32:29 CEST 2014


Hi Stefan,

On Mon, Oct 06, 2014 at 10:20:43AM +0200, Stefan Roese wrote:
> On 06.10.2014 08:19, Baruch Siach wrote:
> >On Thu, Sep 04, 2014 at 12:23:09PM +0300, Baruch Siach wrote:
> >>Partially revert commit 0d01f66d235118 (CFI: cfi_flash write fix for AMD
> >>legacy).
> >>
> >>flash_full_status_check() used to skip status register parsing when
> >>flash_status_check() returns OK. This is wrong since flash_status_check()
> >>must return OK for other status bits to be valid.
> >>
> >>Cc: Ed Swarthout <Ed.Swarthout at freescale.com>
> >>Signed-off-by: Baruch Siach <baruch at tkos.co.il>
> >>---
> >>  drivers/mtd/cfi_flash.c | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >>diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
> >>index c4b5bc1de553..9b3175d87fbd 100644
> >>--- a/drivers/mtd/cfi_flash.c
> >>+++ b/drivers/mtd/cfi_flash.c
> >>@@ -593,7 +593,7 @@ static int flash_full_status_check (flash_info_t * info, flash_sect_t sector,
> >>  	case CFI_CMDSET_INTEL_PROG_REGIONS:
> >>  	case CFI_CMDSET_INTEL_EXTENDED:
> >>  	case CFI_CMDSET_INTEL_STANDARD:
> >>-		if ((retcode != ERR_OK)
> >>+		if ((retcode == ERR_OK)
> >>  		    && !flash_isequal (info, sector, 0, FLASH_STATUS_DONE)) {
> >>  			retcode = ERR_INVAL;
> >>  			printf ("Flash %s error at address %lx\n", prompt,
> >
> >Ping?
> 
> Sorry, I forgot about this one.
> 
> I have to admit that I'm a bit hesitant here. Since your patch changes the
> behavior thats present for about than 6 years. You're the first encountering
> some problems here. And I'm not that actively using CFI NOR flash anymore as
> well, so my knowledge is a bit "rusty" here as well.
> 
> Could you please summarize again, what the real problem with this compare
> is. What is the error exactly in your case (which flash chip is used and
> which command was issued?)?

The Micron StrataFlash datasheet says this on Status Register bit 7 (Device 
status):

0 = Device is busy; SR[9,8,6:1] are invalid, SR[0] is valid
1 = Device is ready; SR[9:8], SR[6:1] are valid

This is was the original code behaviour, since your commit 
79b4cda076069d04122f. This commit log explicitly says:

    * Changes/fixes for drivers/cfi_flash.c:
      We *should* check if there are any error bits if the previous call
      returned ERR_OK (Otherwise we will have output an error message in
      flash_status_check() already.)  The original code would only check for
      error bits if flash_status_check() returns ERR_TIMEOUT.
      Patch by Marcus Hall, 23 Aug 2005

Currently U-Boot is just silent about NOR flash write errors.

baruch

-- 
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -


More information about the U-Boot mailing list