aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/target/mips_m4k.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c
index c2922ce9..d7e42652 100644
--- a/src/target/mips_m4k.c
+++ b/src/target/mips_m4k.c
@@ -1131,6 +1131,7 @@ static int mips_m4k_bulk_write_memory(struct target *target, uint32_t address,
{
struct mips32_common *mips32 = target_to_mips32(target);
struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
+ struct working_area *fast_data_area;
int retval;
int write_t = 1;
@@ -1157,6 +1158,17 @@ static int mips_m4k_bulk_write_memory(struct target *target, uint32_t address,
ejtag_info->fast_access_save = -1;
}
+ fast_data_area = mips32->fast_data_area;
+
+ if (address <= fast_data_area->address + fast_data_area->size &&
+ fast_data_area->address <= address + count) {
+ LOG_ERROR("fast_data (0x%8.8" PRIx32 ") is within write area "
+ "(0x%8.8" PRIx32 "-0x%8.8" PRIx32 ").",
+ fast_data_area->address, address, address + count);
+ LOG_ERROR("Change work-area-phys or load_image address!");
+ return ERROR_FAIL;
+ }
+
/* mips32_pracc_fastdata_xfer requires uint32_t in host endianness, */
/* but byte array represents target endianness */
uint32_t *t = NULL;