* Wolfgang Denk | 2008-07-16 00:05:20 [+0200]: >In message <[EMAIL PROTECTED]> you wrote: >> >> That command needs to be in little endian format on BE machines >> with CFG_WRITE_SWAPPED_DATA. Without this patch, the command 0xf0 >> gets saved on stack as 0x00 00 00 f0 and 0x00 gets written into > >On stack? Yes. We refer to the command via &cmd and therefore it will be saved on the stack. Did I miss phrase myself or is this about something else?
>> @@ -306,16 +306,21 @@ static void flash_make_cmd(flash_info_t *info, u32 >> cmd, void *cmdbuf) >> int i; >> int cword_offset; >> int cp_offset; >> + int cmd_le; >> uchar val; >> uchar *cp = (uchar *) cmdbuf; >> >> + cmd_le = cpu_to_le32(cmd); > >This bloats code size for cases where it is not needed. I assumed this will be optimized away in the non needed-case and I tried not use that much of ifdefs. >You seem to be focussing one one specific system configuration only, >but there are 4 possible situations that need to be handled: > >- BE without CFG_WRITE_SWAPPED_DATA That is Stefan's box, code worked before, remained untouched should still work. >- BE with CFG_WRITE_SWAPPED_DATA That is mine box, works after this patch. >- LE without CFG_WRITE_SWAPPED_DATA In that case, cpu_to_le32 is a null-macro, the code is the same like before my patch, should work. >- LE with CFG_WRITE_SWAPPED_DATA That one could be broken. Hmmm. Okay, I take the old code (before expanding char -> long) take a look how the commands are expanded, compare with what I have now and let you know. >I don't think you handle all for of them correctly. > >> for (i = info->portwidth; i > 0; i--){ >> cword_offset = (info->portwidth-i)%info->chipwidth; >> #if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA) >> cp_offset = info->portwidth - i; >> - val = *((uchar*)&cmd + cword_offset); >> + val = *((uchar*)&cmd_le + cword_offset); >> #else >> cp_offset = i - 1; >> + /* we rely here on the fact, that cmd _has_ to be in BE >> + * order because we are not __LITTLE_ENDIAN >> + */ >> val = *((uchar*)&cmd + sizeof(u32) - cword_offset - 1); > >Hm... we are BE, because we are not LE. > >Sounds kind of obvious to me? Technically we still could run on PDP :) >[Nitpick: incorrect multiline comment style] Ack, but since this comment is obvious I get rid of it anyway. >Wolfgang Denk Sebastian ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ U-Boot-Users mailing list U-Boot-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users