mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00: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:
parent
4386feb73d
commit
c2538421b2
1 changed files with 2 additions and 26 deletions
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[])
|
||||
{
|
||||
ulong addr, dest, count, bytes;
|
||||
ulong addr, dest, count;
|
||||
int size;
|
||||
const void *src;
|
||||
void *buf;
|
||||
|
||||
if (argc != 4)
|
||||
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
|
||||
|
||||
bytes = size * count;
|
||||
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);
|
||||
memcpy((void *)dest, (void *)addr, count * size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue