
Move common, watchdog sensible memmove code to a helper memmmove_wd() routine.
Signed-off-by: Marian Balakowicz m8@semihalf.com ---
common/cmd_bootm.c | 20 ++++---------------- common/image.c | 18 ++++++++++++++++++ include/image.h | 1 + lib_m68k/m68k_linux.c | 23 ++++------------------- lib_ppc/ppc_linux.c | 22 ++++------------------ 5 files changed, 31 insertions(+), 53 deletions(-)
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 40df9b0..7c3bb2f 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -250,24 +250,12 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (image_get_load(hdr) == addr) { printf (" XIP %s ... ", name); } else { -#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) - size_t l = len; - void *to = (void *)image_get_load(hdr); - void *from = (void *)data; - printf (" Loading %s ... ", name);
- while (l > 0) { - size_t tail = (l > CHUNKSZ) ? CHUNKSZ : l; - WATCHDOG_RESET(); - memmove (to, from, tail); - to += tail; - from += tail; - l -= tail; - } -#else /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */ - memmove ((void *)image_get_load(hdr), (uchar *)data, len); -#endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ + memmove_wd((void *)image_get_load(hdr), + (void *)data, len, CHUNKSZ); + + puts("OK\n"); } break; case IH_COMP_GZIP: diff --git a/common/image.c b/common/image.c index 11470bb..7e862be 100644 --- a/common/image.c +++ b/common/image.c @@ -24,6 +24,7 @@ */ #ifndef USE_HOSTCC # include <common.h> +# include <watchdog.h> #else # include "mkimage.h" #endif @@ -56,6 +57,7 @@ int image_check_dcrc(image_header_t *hdr) return (dcrc == image_get_dcrc(hdr)); }
+#ifndef USE_HOSTCC int image_check_dcrc_wd(image_header_t *hdr, ulong chunksz) { ulong dcrc = 0; @@ -89,3 +91,19 @@ int getenv_verify(void) return (s && (*s == 'n')) ? 0 : 1; }
+void memmove_wd(void *to, void *from, size_t len, ulong chunksz) +{ +#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) + while (len > 0) { + size_t tail = (len > chunksz) ? chunksz : len; + WATCHDOG_RESET(); + memmove(to, from, tail); + to += tail; + from += tail; + len -= tail; + } +#else /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */ + memmove(to, from, len); +#endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ +} +#endif /* USE_HOSTCC */ diff --git a/include/image.h b/include/image.h index 00a4549..1c26a9c 100644 --- a/include/image.h +++ b/include/image.h @@ -251,6 +251,7 @@ int image_check_hcrc(image_header_t *); int image_check_dcrc(image_header_t *); int image_check_dcrc_wd(image_header_t *, ulong); int getenv_verify(void); +void memmove_wd(void *, void *, size_t, ulong);
static inline int image_check_magic(image_header_t *hdr) { diff --git a/lib_m68k/m68k_linux.c b/lib_m68k/m68k_linux.c index 237cd82..4ea74d7 100644 --- a/lib_m68k/m68k_linux.c +++ b/lib_m68k/m68k_linux.c @@ -266,25 +266,10 @@ void do_bootm_linux(cmd_tbl_t * cmdtp, int flag, initrd_end = initrd_start + len; printf(" Loading Ramdisk to %08lx, end %08lx ... ", initrd_start, initrd_end); -#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) - { - size_t l = len; - void *to = (void *)initrd_start; - void *from = (void *)data; - - while (l > 0) { - size_t tail = - (l > CHUNKSZ) ? CHUNKSZ : l; - WATCHDOG_RESET(); - memmove(to, from, tail); - to += tail; - from += tail; - l -= tail; - } - } -#else /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */ - memmove((void *)initrd_start, (void *)data, len); -#endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ + + memmove_wd((void *)initrd_start, + (void *)data, len, CHUNKSZ); + puts("OK\n"); } } else { diff --git a/lib_ppc/ppc_linux.c b/lib_ppc/ppc_linux.c index 732f1f3..15349b3 100644 --- a/lib_ppc/ppc_linux.c +++ b/lib_ppc/ppc_linux.c @@ -425,24 +425,10 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag, initrd_end = initrd_start + len; printf (" Loading Ramdisk to %08lx, end %08lx ... ", initrd_start, initrd_end); -#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG) - { - size_t l = len; - void *to = (void *)initrd_start; - void *from = (void *)data; - - while (l > 0) { - size_t tail = (l > CHUNKSZ) ? CHUNKSZ : l; - WATCHDOG_RESET(); - memmove (to, from, tail); - to += tail; - from += tail; - l -= tail; - } - } -#else /* !(CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG) */ - memmove ((void *)initrd_start, (void *)data, len); -#endif /* CONFIG_HW_WATCHDOG || CONFIG_WATCHDOG */ + + memmove_wd((void *)initrd_start, + (void *)data, len, CHUNKSZ); + puts ("OK\n"); } } else {