From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tolunay Orkun Date: Fri, 02 Feb 2007 00:13:48 -0600 Subject: [U-Boot-Users] [Attn: Joe Loelinger] Re: [PATCH] Fix up flash_read_uchar() to read uchar more safely in cfi_flash.c. In-Reply-To: <45C2D1B1.6000704@orkun.us> References: <45C2D1B1.6000704@orkun.us> Message-ID: <45C2D69C.2010504@orkun.us> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de I have to send this to Joe Loelinger through the list due to an blacklisting issue. Direct mail bounced with the following error: ----- The following addresses had permanent fatal errors ----- (reason: 550-sender IP address 207.115.20.70 is locally blacklisted here. If you think) I have to send via my ISP mail server "smtp.sbcglobal.net" even though I am using orkun.us as my email. The IP is assigned by PPPoE. Regards, Tolunay Tolunay Orkun wrote: > Jon Loeliger wrote: >> From: Zhang Wei >> >> Signed-off-by: Zhang Wei >> Signed-off-by: Jon Loeliger >> >> --- >> Tolunay, >> >> What do you think of this proposed solution to the problem >> of handling the flash read width issue that we were having >> with the 8641 HPCN board? >> >> If you think this is an acceptable approach, I can resubmit >> this patch to the U-Boot list if you'd like. >> >> Thanks, >> jdl >> > > I think the approach is sound except I have a few comments below. > > Meanwhile, the debugging lead me to conclude the flash_read_uchar() is > not really the root cause of your problem. > > Please refer to email exchange I had with Haiying yesterday. We > probably need to add "asm("sync;"); to flash_write_cmd() and/or > udelay(); after reset. > >> drivers/cfi_flash.c | 30 ++++++++++++++++++++++++++---- >> 1 files changed, 26 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/cfi_flash.c b/drivers/cfi_flash.c >> index 696f9a4..d109c5e 100644 >> - --- a/drivers/cfi_flash.c >> +++ b/drivers/cfi_flash.c >> @@ -255,13 +255,35 @@ #endif >> */ >> inline uchar flash_read_uchar (flash_info_t * info, uint offset) >> { >> - - uchar *cp; >> + union { >> + u8 c; >> + u16 s; >> + u32 l; >> + u64 ll; >> + u8 b[FLASH_CFI_64BIT]; >> + } cp; >> > Instead of a anonymous union use cfiword_t and cfiptr_t just like > flash_write_cmd() does. Remember to use "volatile" for pointer of type > cfiptr_t. > > You will need to augment cfiword_t union for byte access to individual > bytes (i.e. u8 b[FLASH_CFI_64BIT]); > > In addition to this, we need to rework, flash_read_ushort() and > flash_read_long() similarly for portwidth based accesses. Currently, > like flash_read_uchar() these are reading single bytes; > > Best regards, > Tolunay >