summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/nor/cfi_flash.c24
1 files changed, 5 insertions, 19 deletions
diff --git a/drivers/nor/cfi_flash.c b/drivers/nor/cfi_flash.c
index f9b96c50a2..654e6470c1 100644
--- a/drivers/nor/cfi_flash.c
+++ b/drivers/nor/cfi_flash.c
@@ -822,26 +822,12 @@ int flash_generic_status_check (struct flash_info *info, flash_sect_t sector,
*/
void flash_make_cmd(struct flash_info *info, u32 cmd, cfiword_t *cmdbuf)
{
- int i;
- int cp_offset;
- int cword_offset;
- uchar val;
- uchar *cp;
-
- *cmdbuf = 0;
- cp = (uchar *)cmdbuf;
+ cfiword_t result = 0;
+ int i = info->portwidth / info->chipwidth;
- for (i = info->portwidth; i > 0; i--) {
- cword_offset = (info->portwidth-i) % info->chipwidth;
-#if __BYTE_ORDER == __LITTLE_ENDIAN
- cp_offset = info->portwidth - i;
- val = *((uchar *)&cmd + cword_offset);
-#else
- cp_offset = i - 1;
- val = *((uchar *)&cmd + sizeof(u32) - cword_offset - 1);
-#endif
- cp[cp_offset] = (cword_offset >= sizeof(u32)) ? 0x00 : val;
- }
+ while (i--)
+ result = (result << (8 * info->chipwidth)) | cmd;
+ *cmdbuf = result;
}
/*