diff --git a/src/target/arm11.c b/src/target/arm11.c
index f93e716a078cd5a02d15a8512f49c1b08d6aac77..751c64251e1c4836736e8a2d6ed282b864474443 100644
--- a/src/target/arm11.c
+++ b/src/target/arm11.c
@@ -1511,7 +1511,8 @@ int arm11_target_create(struct target_s *target, Jim_Interp *interp)
 int arm11_init_target(struct command_context_s *cmd_ctx, struct target_s *target)
 {
 	/* Initialize anything we can set up without talking to the target */
-	return ERROR_OK;
+	return arm11_build_reg_cache(target);
+
 }
 
 /* talk to the target and set things up */
@@ -1583,8 +1584,6 @@ int arm11_examine(struct target_s *target)
 	arm11->implementor,
 	arm11->didr);
 
-	arm11_build_reg_cache(target);
-
 	/* as a side-effect this reads DSCR and thus
 	 * clears the ARM11_DSCR_STICKY_PRECISE_DATA_ABORT / Sticky Precise Data Abort Flag
 	 * as suggested by the spec.