[U-Boot-Users] [PATCH] Fixed cfi flash read uchar bug.

Chris Fester cfester at iphase.com
Fri Dec 22 18:07:37 CET 2006

I'm interested in how this discussion pans out.  I have encountered this
problem (with flinfo) with my MPC8641HPCN.  The patch presented by Zhang
Wei (and other freescale employees) does seem to allieviate the problem
when I compile u-boot with ELDK 4.0.

However, some scenarios here worry me:
-- with the patch, compiled with ELDK 4.0 is peachy.
-- without the patch, compiled with ELDK 4.0 FAILS.
-- without the patch, compiled with ELDK 3.1.1 is peachy.

At the time of my testing (early this week) I was using a git tree about
2 weeks old from jdl.com, which is what the freescale folks seem to be
using at the moment.  It worries me that changing a compiler version
could affect this bug, but I guess I've seen stranger things.

Could this be a subtle timing problem with the processor?  Could it be a
timing problem with the flash?  Am I nuts?  :P

Merry Christmas!

On Fri, 2006-12-22 at 15:11 +0100, Wolfgang Denk wrote:
> In message <458BBB5D.1030005 at freescale.com> you wrote:
> > 
> > After perform flash_read_jedec_ids(), the cfi query read will get an 
> > '0xff'. From this flash's specification, the read for flash commands in 
> > 16bit port connection should perform 16bit read and ignore the high 8bit 
> > data. Although this issue maybe occurs in the special chip, perform the 
> > fully 16bit read is a safety operation.
> But your patch does NOT perform a 16 bit read. It calls memcpy(); the
> default implementation of memcpy [see lib_generic/string.c] does this:
> 	char *tmp = (char *) dest, *s = (char *) src;
> 	while (count--)
> 		*tmp++ = *s++;
> i. e. it performs a character copy, too, so it makes no difference
> compared to the original code.
> > The modification refers to the cfi flash drivers in Linux kernel (The 
> > cfi_read_query() function in include/linux/mtd/cfi.h file). It's more 
> > easy and clear than making the different type date read for different 
> > portwidth (such as ushort_read() for x16, ulong_read() for x32).
> I understand your intentions, but your patch does  not  do  what  you
> think it does, so if it really fixes the problem on your system there
> must be another cause or effect.
> Best regards,
> Wolfgang Denk

More information about the U-Boot mailing list