diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 452686dd3dc72f2ec37b9b66e003f77a2ae3220d..da060098af1bc773d5df03535cc50c8e5cf89174 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -344,11 +344,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 9e4971303e81e18f596ae7ce08d6a5cf7818a3c9..8d4be140f69eb4273667778d05391ce32fd7d047 100644
--- a/common/image.c
+++ b/common/image.c
@@ -450,6 +450,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;