Optimize flash_make_cmd in drivers/cfi_flash.c for little endian
authorWolfgang Denk <wd@pollux.(none)>
Sat, 24 Sep 2005 21:32:48 +0000 (23:32 +0200)
committerWolfgang Denk <wd@pollux.(none)>
Sat, 24 Sep 2005 21:32:48 +0000 (23:32 +0200)
Fix "WARNING: flash_make_cmd: unsuppported LittleEndian mode"
message when probing for nonexistent flash in little endian mode.
As a side effect more efficient and smaller code is generated,
which is always a Good Thing (TM).
Patch by Ladislav Michl, 24 Sep 2005

CHANGELOG
drivers/cfi_flash.c

index 4994701fb7b9a422d65adec0e1664ac4f58ee98a..ac48bc2e3730b3d02a10be3cc23dd9cc2823c2e0 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,13 @@
 Changes for U-Boot 1.1.4:
 ======================================================================
 
+* Optimize flash_make_cmd in drivers/cfi_flash.c for little endian
+  Fix "WARNING: flash_make_cmd: unsuppported LittleEndian mode"
+  message when probing for nonexistent flash in little endian mode.
+  As a side effect more efficient and smaller code is generated,
+  which is always a Good Thing (TM).
+  Patch by Ladislav Michl, 24 Sep 2005
+
 * Update for TFTP using a fixed UDP port
   Use the approved environment variable names. Added "tftpdstp" to
   allow ports other than 69 per Tolunay Orkun's recommendation.
index 3d0f2045011f1009258629ae45a8bbac9bd8ffa5..7957dd5f9c10b4990646e82e87df10805dd021be 100644 (file)
@@ -47,7 +47,6 @@
 #include <common.h>
 #include <asm/processor.h>
 #include <asm/byteorder.h>
-#include <linux/byteorder/swab.h>
 #include <environment.h>
 #ifdef CFG_FLASH_CFI_DRIVER
 
@@ -797,32 +796,14 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c)
 static void flash_make_cmd (flash_info_t * info, uchar cmd, void *cmdbuf)
 {
        int i;
-
-#if defined(__LITTLE_ENDIAN)
-       ushort stmpw;
-       uint   stmpi;
-#endif
        uchar *cp = (uchar *) cmdbuf;
 
-       for (i = 0; i < info->portwidth; i++)
-               *cp++ = ((i + 1) & (info->chipwidth - 1)) ? '\0' : cmd;
 #if defined(__LITTLE_ENDIAN)
-       switch (info->portwidth) {
-       case FLASH_CFI_8BIT:
-               break;
-       case FLASH_CFI_16BIT:
-               stmpw = *(ushort *) cmdbuf;
-               *(ushort *) cmdbuf = __swab16 (stmpw);
-               break;
-       case FLASH_CFI_32BIT:
-               stmpi = *(uint *) cmdbuf;
-               *(uint *) cmdbuf = __swab32 (stmpi);
-               break;
-       default:
-               puts ("WARNING: flash_make_cmd: unsuppported LittleEndian mode\n");
-               break;
-       }
+       for (i = info->portwidth; i > 0; i--)
+#else
+       for (i = 1; i <= info->portwidth; i++)
 #endif
+               *cp++ = (i % info->chipwidth) ? '\0' : cmd;
 }
 
 /*