[U-Boot-Users] [Attn: Joe Loelinger] Re: [PATCH] Fix up flash_read_uchar() to read uchar more safely in cfi_flash.c.

Tolunay Orkun listmember at orkun.us
Fri Feb 2 07:13:48 CET 2007


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 -----
<jdl at jdl.com>
    (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 <wei.zhang at freescale.com>
>>
>> Signed-off-by: Zhang Wei <wei.zhang at freescale.com>
>> Signed-off-by: Jon Loeliger <jdl at freescale.com>
>>
>> ---
>> 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
>






More information about the U-Boot mailing list