[U-Boot] [PATCH] bootm: Reduce the unnecessary memmove

Although load address and image start address are same address, bootm command always does memmove. That is unnecessary memmove and can be taken few milliseconds (about 500 msec to 1000 msec). If skip this memmove, we can reduce the boot time.
Signed-off-by: Minkyu Kang mk7.kang@samsung.com --- common/cmd_bootm.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 07f6c6b..6fdeef4 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -340,8 +340,10 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress) } else { printf (" Loading %s ... ", type_name);
- memmove_wd ((void *)load, - (void *)image_start, image_len, CHUNKSZ); + if (load != image_start) { + memmove_wd ((void *)load, + (void *)image_start, image_len, CHUNKSZ); + } } *load_end = load + image_len; puts("OK\n");

Dear Minkyu Kang,
In message 499B50E0.8040501@samsung.com you wrote:
Although load address and image start address are same address, bootm command always does memmove. That is unnecessary memmove and can be taken few milliseconds (about 500 msec to 1000 msec). If skip this memmove, we can reduce the boot time.
Signed-off-by: Minkyu Kang mk7.kang@samsung.com
common/cmd_bootm.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk

Minkyu Kang wrote:
Although load address and image start address are same address, bootm command always does memmove. That is unnecessary memmove and can be taken few milliseconds (about 500 msec to 1000 msec). If skip this memmove, we can reduce the boot time.
Signed-off-by: Minkyu Kang mk7.kang@samsung.com
common/cmd_bootm.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 07f6c6b..6fdeef4 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -340,8 +340,10 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress) } else { printf (" Loading %s ... ", type_name);
memmove_wd ((void *)load,
(void *)image_start, image_len, CHUNKSZ);
if (load != image_start) {
memmove_wd ((void *)load,
(void *)image_start, image_len, CHUNKSZ);
} *load_end = load + image_len; puts("OK\n");}
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Sorry for the late reply, but would it be better to put the test of source == destination into the memmove_wd() function?
Best regards, Larry

Dear Larry Johnson,
In message 49A177D8.1050702@acm.org you wrote:
Although load address and image start address are same address, bootm command always does memmove. That is unnecessary memmove and can be taken few milliseconds (about 500 msec to 1000 msec). If skip this memmove, we can reduce the boot time.
...
Sorry for the late reply, but would it be better to put the test of source == destination into the memmove_wd() function?
Yes, indeed.
Can you please send a patch?
Best regards,
Wolfgang Denk

Signed-off-by: Larry Johnson lrj@acm.org --- common/cmd_bootm.c | 7 ++----- common/image.c | 3 +++ 2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 6fdeef4..bc38aaa 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -339,11 +339,8 @@ static int bootm_load_os(image_info_t os, ulong *load_end, int boot_progress) printf (" XIP %s ... ", type_name); } else { printf (" Loading %s ... ", type_name); - - if (load != image_start) { - memmove_wd ((void *)load, - (void *)image_start, image_len, CHUNKSZ); - } + memmove_wd ((void *)load, (void *)image_start, + image_len, CHUNKSZ); } *load_end = load + image_len; puts("OK\n"); diff --git a/common/image.c b/common/image.c index daa68bc..1dc9e4e 100644 --- a/common/image.c +++ b/common/image.c @@ -457,6 +457,9 @@ phys_size_t getenv_bootm_size(void)
void memmove_wd (void *to, void *from, size_t len, ulong chunksz) { + if (to == from) + return; + #if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) while (len > 0) { size_t tail = (len > chunksz) ? chunksz : len;
participants (3)
-
Larry Johnson
-
Minkyu Kang
-
Wolfgang Denk