diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index 6e1da941a..9f126b9cd 100644
--- a/src/target/riscv/riscv.c
+++ b/src/target/riscv/riscv.c
@@ -3519,7 +3519,6 @@ void riscv_info_init(struct target *target, riscv_info_t *r)
 {
 	memset(r, 0, sizeof(*r));
 	r->dtm_version = 1;
-	r->registers_initialized = false;
 	r->current_hartid = target->coreid;
 	r->version_specific = NULL;
 
@@ -3664,7 +3663,10 @@ int riscv_set_current_hartid(struct target *target, int hartid)
 
 void riscv_invalidate_register_cache(struct target *target)
 {
-	RISCV_INFO(r);
+	/* Do not invalidate the register cache if it is not yet set up
+	 * (e.g. when the target failed to get examined). */
+	if (!target->reg_cache)
+		return;
 
 	LOG_DEBUG("[%d]", target->coreid);
 	register_cache_invalidate(target->reg_cache);
@@ -3672,8 +3674,6 @@ void riscv_invalidate_register_cache(struct target *target)
 		struct reg *reg = &target->reg_cache->reg_list[i];
 		reg->valid = false;
 	}
-
-	r->registers_initialized = true;
 }
 
 int riscv_current_hartid(const struct target *target)
diff --git a/src/target/riscv/riscv.h b/src/target/riscv/riscv.h
index 59fdb38a9..898d8b5c0 100644
--- a/src/target/riscv/riscv.h
+++ b/src/target/riscv/riscv.h
@@ -131,9 +131,6 @@ typedef struct {
 	/* The number of entries in the debug buffer. */
 	int debug_buffer_size;
 
-	/* This avoids invalidating the register cache too often. */
-	bool registers_initialized;
-
 	/* This hart contains an implicit ebreak at the end of the program buffer. */
 	bool impebreak;