aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSalvador <sarroyofdez@yahoo.es>2012-04-02 20:01:38 +0200
committerSpencer Oliver <spen@spen-soft.co.uk>2012-04-10 12:10:57 +0000
commite2535e790164c51971094c0ad5418a191ec3b6a5 (patch)
tree70ca727c7a4dd28fd975e0b512aecbda6591ddaf /src
parent18e6e02cdc5dce3c0741a294680a85ca70c10267 (diff)
downloadriscv-openocd-e2535e790164c51971094c0ad5418a191ec3b6a5.zip
riscv-openocd-e2535e790164c51971094c0ad5418a191ec3b6a5.tar.gz
riscv-openocd-e2535e790164c51971094c0ad5418a191ec3b6a5.tar.bz2
Finish off functions mips32_pracc_read_mem16() and mips32_pracc_read_mem8()
This functions are unfinished and work only with parameter count up to 1024. Commands mdh and mdb from pic32mx context show values not related to memory content if parameter count is bigger than 1024. Firt 1024 are ok. Change-Id: Ie3f4d4a0f9d1d1a69bd3a18de2f72dd9249514cb Signed-off-by: Salvador <sarroyofdez@yahoo.es> Reviewed-on: http://openocd.zylin.com/550 Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk> Tested-by: jenkins
Diffstat (limited to 'src')
-rw-r--r--src/target/mips32_pracc.c47
1 files changed, 30 insertions, 17 deletions
diff --git a/src/target/mips32_pracc.c b/src/target/mips32_pracc.c
index 0cada4f..d657b98 100644
--- a/src/target/mips32_pracc.c
+++ b/src/target/mips32_pracc.c
@@ -442,14 +442,17 @@ static int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr,
/* TODO remove array */
uint32_t *param_out = malloc(count * sizeof(uint32_t));
- int i;
+ if (param_out == NULL) {
+ LOG_ERROR("Out of memory");
+ return ERROR_FAIL;
+ }
int retval = ERROR_OK;
int blocksize;
+ int hwordsread = 0;
uint32_t param_in[2];
- /*while (count > 0) */
- {
+ while (count > 0) {
blocksize = count;
if (count > 0x400)
blocksize = 0x400;
@@ -458,17 +461,21 @@ static int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr,
param_in[1] = blocksize;
retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
- ARRAY_SIZE(param_in), param_in, count, param_out, 1);
+ ARRAY_SIZE(param_in), param_in, blocksize, &param_out[hwordsread], 1);
+
+ if (retval != ERROR_OK)
+ return retval;
-/* count -= blocksize; */
-/* addr += blocksize; */
+ count -= blocksize;
+ addr += blocksize*sizeof(uint16_t);
+ hwordsread += blocksize;
}
- for (i = 0; i < count; i++)
+ int i;
+ for (i = 0; i < hwordsread; i++)
buf[i] = param_out[i];
free(param_out);
-
return retval;
}
@@ -513,14 +520,17 @@ static int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr,
/* TODO remove array */
uint32_t *param_out = malloc(count * sizeof(uint32_t));
- int i;
+ if (param_out == NULL) {
+ LOG_ERROR("Out of memory");
+ return ERROR_FAIL;
+ }
int retval = ERROR_OK;
int blocksize;
uint32_t param_in[2];
+ int bytesread = 0;
-/* while (count > 0) */
- {
+ while (count > 0) {
blocksize = count;
if (count > 0x400)
blocksize = 0x400;
@@ -529,17 +539,20 @@ static int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr,
param_in[1] = blocksize;
retval = mips32_pracc_exec(ejtag_info, ARRAY_SIZE(code), code,
- ARRAY_SIZE(param_in), param_in, count, param_out, 1);
+ ARRAY_SIZE(param_in), param_in, count, &param_out[bytesread], 1);
-/* count -= blocksize; */
-/* addr += blocksize; */
- }
+ if (retval != ERROR_OK)
+ return retval;
- for (i = 0; i < count; i++)
+ count -= blocksize;
+ addr += blocksize;
+ bytesread += blocksize;
+ }
+ int i;
+ for (i = 0; i < bytesread; i++)
buf[i] = param_out[i];
free(param_out);
-
return retval;
}