diff --git a/lib_arm/board.c b/lib_arm/board.c
index 80b149b534aac8b40931acad416bd3cac0acd509..a09386046c3c78624e254c9e51fb77e878a3091f 100644
--- a/lib_arm/board.c
+++ b/lib_arm/board.c
@@ -233,6 +233,18 @@ static int init_func_i2c (void)
 }
 #endif
 
+#ifdef CONFIG_SKIP_RELOCATE_UBOOT
+/*
+ * This routine sets the relocation done flag, because even if
+ * relocation is skipped, the flag is used by other generic code.
+ */
+static int reloc_init(void)
+{
+	gd->flags |= GD_FLG_RELOC;
+	return 0;
+}
+#endif
+
 /*
  * Breathe some life into the board...
  *
@@ -262,6 +274,11 @@ int print_cpuinfo (void); /* test-only */
 
 init_fnc_t *init_sequence[] = {
 	cpu_init,		/* basic cpu dependent setup */
+#if defined(CONFIG_SKIP_RELOCATE_UBOOT)
+	reloc_init,		/* Set the relocation done flag, must
+				   do this AFTER cpu_init(), but as soon
+				   as possible */
+#endif
 	board_init,		/* basic board dependent setup */
 	interrupt_init,		/* set up exceptions */
 	env_init,		/* initialize environment */