|
@@ -298,17 +298,25 @@ 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, uchar cmd, void *cmdbuf)
|
|
|
+static void flash_make_cmd (flash_info_t * info, ulong cmd, void *cmdbuf)
|
|
|
{
|
|
|
int i;
|
|
|
+ int cword_offset;
|
|
|
+ int cp_offset;
|
|
|
+ uchar val;
|
|
|
uchar *cp = (uchar *) cmdbuf;
|
|
|
|
|
|
+ for (i = info->portwidth; i > 0; i--){
|
|
|
+ cword_offset = (info->portwidth-i)%info->chipwidth;
|
|
|
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
|
|
|
- for (i = info->portwidth; i > 0; i--)
|
|
|
+ cp_offset = info->portwidth - i;
|
|
|
+ val = *((uchar*)&cmd + cword_offset);
|
|
|
#else
|
|
|
- for (i = 1; i <= info->portwidth; i++)
|
|
|
+ cp_offset = i - 1;
|
|
|
+ val = *((uchar*)&cmd + sizeof(ulong) - cword_offset - 1);
|
|
|
#endif
|
|
|
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
|
|
|
+ cp[cp_offset] = (cword_offset >= sizeof(ulong)) ? 0x00 : val;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#ifdef DEBUG
|
|
@@ -422,7 +430,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, uchar cmd)
|
|
|
+ uint offset, ulong cmd)
|
|
|
{
|
|
|
|
|
|
void *addr;
|
|
@@ -911,7 +919,7 @@ static int flash_write_cfibuffer (flash_info_t * info, ulong dest, uchar * cp,
|
|
|
/* reduce the number of loops by the width of
|
|
|
* the port */
|
|
|
cnt = len >> shift;
|
|
|
- flash_write_cmd (info, sector, 0, (uchar) cnt - 1);
|
|
|
+ flash_write_cmd (info, sector, 0, cnt - 1);
|
|
|
while (cnt-- > 0) {
|
|
|
switch (info->portwidth) {
|
|
|
case FLASH_CFI_8BIT:
|
|
@@ -953,7 +961,7 @@ static int flash_write_cfibuffer (flash_info_t * info, ulong dest, uchar * cp,
|
|
|
#endif
|
|
|
flash_write_cmd(info, sector, offset, AMD_CMD_WRITE_TO_BUFFER);
|
|
|
cnt = len >> shift;
|
|
|
- flash_write_cmd(info, sector, offset, (uchar)cnt - 1);
|
|
|
+ flash_write_cmd(info, sector, offset, cnt - 1);
|
|
|
|
|
|
switch (info->portwidth) {
|
|
|
case FLASH_CFI_8BIT:
|