aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/target/arm920t.c11
-rw-r--r--src/target/arm946e.c11
-rw-r--r--src/target/arm966e.c11
-rw-r--r--src/target/arm9tdmi.c11
-rw-r--r--src/target/arm9tdmi.h1
-rw-r--r--src/target/fa526.c11
-rw-r--r--src/target/feroceon.c6
7 files changed, 62 insertions, 0 deletions
diff --git a/src/target/arm920t.c b/src/target/arm920t.c
index 3ddd198..c96975a 100644
--- a/src/target/arm920t.c
+++ b/src/target/arm920t.c
@@ -852,6 +852,16 @@ static int arm920t_target_create(struct target *target, Jim_Interp *interp)
return arm920t_init_arch_info(target, arm920t, target->tap);
}
+static void arm920t_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm920t_common *arm920t = target_to_arm920(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm920t);
+}
+
COMMAND_HANDLER(arm920t_handle_read_cache_command)
{
int retval = ERROR_OK;
@@ -1716,6 +1726,7 @@ struct target_type arm920t_target = {
.commands = arm920t_command_handlers,
.target_create = arm920t_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm920t_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
diff --git a/src/target/arm946e.c b/src/target/arm946e.c
index 4ef167a..6b187f3 100644
--- a/src/target/arm946e.c
+++ b/src/target/arm946e.c
@@ -99,6 +99,16 @@ static int arm946e_target_create(struct target *target, Jim_Interp *interp)
return ERROR_OK;
}
+static void arm946e_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm946e_common *arm946e = target_to_arm946(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm946e);
+}
+
static int arm946e_verify_pointer(struct command_invocation *cmd,
struct arm946e_common *arm946e)
{
@@ -776,6 +786,7 @@ struct target_type arm946e_target = {
.commands = arm946e_command_handlers,
.target_create = arm946e_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm946e_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
diff --git a/src/target/arm966e.c b/src/target/arm966e.c
index 8462f54..8ddcb3c 100644
--- a/src/target/arm966e.c
+++ b/src/target/arm966e.c
@@ -56,6 +56,16 @@ static int arm966e_target_create(struct target *target, Jim_Interp *interp)
return arm966e_init_arch_info(target, arm966e, target->tap);
}
+static void arm966e_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm966e_common *arm966e = target_to_arm966(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm966e);
+}
+
static int arm966e_verify_pointer(struct command_invocation *cmd,
struct arm966e_common *arm966e)
{
@@ -278,6 +288,7 @@ struct target_type arm966e_target = {
.commands = arm966e_command_handlers,
.target_create = arm966e_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm966e_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
diff --git a/src/target/arm9tdmi.c b/src/target/arm9tdmi.c
index 6ab06ed..4810c2b 100644
--- a/src/target/arm9tdmi.c
+++ b/src/target/arm9tdmi.c
@@ -786,6 +786,16 @@ static int arm9tdmi_target_create(struct target *target, Jim_Interp *interp)
return ERROR_OK;
}
+void arm9tdmi_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm7_9_common *arm7_9 = target_to_arm7_9(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm7_9);
+}
+
COMMAND_HANDLER(handle_arm9tdmi_catch_vectors_command)
{
struct target *target = get_current_target(CMD_CTX);
@@ -921,6 +931,7 @@ struct target_type arm9tdmi_target = {
.commands = arm9tdmi_command_handlers,
.target_create = arm9tdmi_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = arm9tdmi_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
diff --git a/src/target/arm9tdmi.h b/src/target/arm9tdmi.h
index c6f0ccf..56946f7 100644
--- a/src/target/arm9tdmi.h
+++ b/src/target/arm9tdmi.h
@@ -26,6 +26,7 @@
int arm9tdmi_init_target(struct command_context *cmd_ctx,
struct target *target);
+void arm9tdmi_deinit_target(struct target *target);
int arm9tdmi_init_arch_info(struct target *target,
struct arm7_9_common *arm7_9, struct jtag_tap *tap);
extern const struct command_registration arm9tdmi_command_handlers[];
diff --git a/src/target/fa526.c b/src/target/fa526.c
index bb9f735..aa9e450 100644
--- a/src/target/fa526.c
+++ b/src/target/fa526.c
@@ -347,6 +347,16 @@ static int fa526_target_create(struct target *target, Jim_Interp *interp)
return fa526_init_arch_info(target, arm920t, target->tap);
}
+static void fa526_deinit_target(struct target *target)
+{
+ struct arm *arm = target_to_arm(target);
+ struct arm920t_common *arm920t = target_to_arm920(target);
+
+ arm7_9_deinit(target);
+ arm_free_reg_cache(arm);
+ free(arm920t);
+}
+
/** Holds methods for FA526 targets. */
struct target_type fa526_target = {
.name = "fa526",
@@ -383,6 +393,7 @@ struct target_type fa526_target = {
.commands = arm920t_command_handlers,
.target_create = fa526_target_create,
.init_target = arm9tdmi_init_target,
+ .deinit_target = fa526_deinit_target,
.examine = arm7_9_examine,
.check_reset = arm7_9_check_reset,
};
diff --git a/src/target/feroceon.c b/src/target/feroceon.c
index 4a6c6dc..d2b707d 100644
--- a/src/target/feroceon.c
+++ b/src/target/feroceon.c
@@ -593,6 +593,11 @@ static int feroceon_init_target(struct command_context *cmd_ctx,
return ERROR_OK;
}
+static void feroceon_deinit_target(struct target *target)
+{
+ arm9tdmi_deinit_target(target);
+}
+
static void feroceon_common_setup(struct target *target)
{
struct arm *arm = target->arch_info;
@@ -729,6 +734,7 @@ struct target_type feroceon_target = {
.commands = arm926ejs_command_handlers,
.target_create = feroceon_target_create,
.init_target = feroceon_init_target,
+ .deinit_target = feroceon_deinit_target,
.examine = feroceon_examine,
};