[U-Boot-Users] [PATCH] M18 flash (Sibley) support (attempt 2)
Vasiliy Leoenenko
vasiliy.leonenko at mail.ru
Tue Apr 29 14:15:41 CEST 2008
The first patch (support of long commands):
===================================================
diff -aupNr a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
--- a/drivers/mtd/cfi_flash.c 2008-04-21 02:39:38.000000000 +0400
+++ b/drivers/mtd/cfi_flash.c 2008-04-29 15:57:51.000000000 +0400
@@ -298,17 +298,29 @@ static inline void flash_unmap(flash_inf
/*-----------------------------------------------------------------------
* 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 cpofft;
uchar *cp = (uchar *) cmdbuf;
+ uchar cp_val;
#if defined(__LITTLE_ENDIAN) || defined(CFG_WRITE_SWAPPED_DATA)
- for (i = info->portwidth; i > 0; i--)
+ for (i = sizeof(cfiword_t); i > 0; i--)
+ {
+ cpofft=(i-1);
#else
- for (i = 1; i <= info->portwidth; i++)
-#endif
- *cp++ = (i & (info->chipwidth - 1)) ? '\0' : cmd;
+ for (i = 1; i <= sizeof(cfiword_t); i++)
+ {
+ cpofft=(sizeof(cfiword_t)-i);
+#endif
+ if( cpofft%info->chipwidth >= sizeof(ulong) || cpofft>=info->portwidth)
+ cp_val = 0x00;
+ else
+ cp_val = *((uchar*)&cmd + cpofft%info->chipwidth);
+
+ cp[i-1] = cp_val;
+ }
}
#ifdef DEBUG
@@ -422,7 +434,7 @@ static ulong flash_read_long (flash_info
* 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 +923,7 @@ static int flash_write_cfibuffer (flash_
/* 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:
More information about the U-Boot
mailing list