mirror of
https://xff.cz/git/u-boot/
synced 2025-09-02 01:02:19 +02:00
cmd: mem: Use memcpy for 'cp' command
Simplify the 'cp' command implementation by using the memcpy() function, which brings the additional benefit of performance gain for those who have CONFIG_USE_ARCH_MEMCPY selected. Tested on a mx6qsabreauto board where a 5x gain in performance is seen when reading 10MB from the parallel NOR memory. Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
This commit is contained in:
28
cmd/mem.c
28
cmd/mem.c
@@ -372,10 +372,8 @@ static int do_mem_cmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||||||
|
|
||||||
static int do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
static int do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
ulong addr, dest, count, bytes;
|
ulong addr, dest, count;
|
||||||
int size;
|
int size;
|
||||||
const void *src;
|
|
||||||
void *buf;
|
|
||||||
|
|
||||||
if (argc != 4)
|
if (argc != 4)
|
||||||
return CMD_RET_USAGE;
|
return CMD_RET_USAGE;
|
||||||
@@ -465,29 +463,7 @@ static int do_mem_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bytes = size * count;
|
memcpy((void *)dest, (void *)addr, count * size);
|
||||||
buf = map_sysmem(dest, bytes);
|
|
||||||
src = map_sysmem(addr, bytes);
|
|
||||||
while (count-- > 0) {
|
|
||||||
if (size == 4)
|
|
||||||
*((u32 *)buf) = *((u32 *)src);
|
|
||||||
#ifdef CONFIG_SYS_SUPPORT_64BIT_DATA
|
|
||||||
else if (size == 8)
|
|
||||||
*((u64 *)buf) = *((u64 *)src);
|
|
||||||
#endif
|
|
||||||
else if (size == 2)
|
|
||||||
*((u16 *)buf) = *((u16 *)src);
|
|
||||||
else
|
|
||||||
*((u8 *)buf) = *((u8 *)src);
|
|
||||||
src += size;
|
|
||||||
buf += size;
|
|
||||||
|
|
||||||
/* reset watchdog from time to time */
|
|
||||||
if ((count % (64 << 10)) == 0)
|
|
||||||
WATCHDOG_RESET();
|
|
||||||
}
|
|
||||||
unmap_sysmem(buf);
|
|
||||||
unmap_sysmem(src);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user