This got broken by commits 93c56f212c
 [cfi_flash: support of long cmd in U-boot.]

That command seems to be access in a little endian way so
wrappers are required.
Long is the wrong type because it will behave differently on
64bit machnines in a way that is probably not expected.
int should be enough.

Cc: Alexey Korolev <[EMAIL PROTECTED]>
Cc: Vasiliy Leonenko <[EMAIL PROTECTED]>
Signed-off-by: Sebastian Siewior <[EMAIL PROTECTED]>
---
 drivers/mtd/cfi_flash.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index c0ea97b..6770496 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -301,24 +301,26 @@ static inline void flash_unmap(flash_info_t *info, 
flash_sect_t sect,
 /*-----------------------------------------------------------------------
  * make a proper sized command based on the port and chip widths
  */
-static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
+static void flash_make_cmd (flash_info_t * info, uint 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);
        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;
-               val = *((uchar*)&cmd + sizeof(ulong) - cword_offset - 1);
+               val = *((uchar*)&cmd_le + sizeof(uint) - cword_offset - 1);
 #endif
-               cp[cp_offset] = (cword_offset >= sizeof(ulong)) ? 0x00 : val;
+               cp[cp_offset] = (cword_offset >= sizeof(uint)) ? 0x00 : val;
        }
 }
 
@@ -329,7 +331,7 @@ static void flash_make_cmd (flash_info_t * info, ulong cmd, 
void *cmdbuf)
 static void print_longlong (char *str, unsigned long long data)
 {
        int i;
-       char *cp;
+       unsigned char *cp;
 
        cp = (unsigned char *) &data;
        for (i = 0; i < 8; i++)
@@ -433,7 +435,7 @@ static ulong flash_read_long (flash_info_t * info, 
flash_sect_t sect,
  * Write a proper sized command to the correct address
  */
 static void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
-                            uint offset, ulong cmd)
+                            uint offset, uint cmd)
 {
 
        void *addr;
-- 
1.5.5.2


-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users

Reply via email to