uint32_t count;
uint32_t v;
const char *varname;
+ const char *phys;
+ bool is_phys;
int n, e, retval;
uint32_t i;
* argv[3] = memory address
* argv[4] = count of times to read
*/
- if (argc != 4) {
- Jim_WrongNumArgs(interp, 1, argv, "varname width addr nelems");
+ if (argc < 4 || argc > 5) {
+ Jim_WrongNumArgs(interp, 1, argv, "varname width addr nelems [phys]");
return JIM_ERR;
}
varname = Jim_GetString(argv[0], &len);
len = l;
if (e != JIM_OK)
return e;
+ is_phys = false;
+ if (argc > 4) {
+ phys = Jim_GetString(argv[4], &n);
+ if (!strncmp(phys, "phys", n))
+ is_phys = true;
+ else
+ return JIM_ERR;
+ }
switch (width) {
case 8:
width = 1;
if (count > (buffersize / width))
count = (buffersize / width);
- retval = target_read_memory(target, addr, width, count, buffer);
+ if (is_phys)
+ retval = target_read_phys_memory(target, addr, width, count, buffer);
+ else
+ retval = target_read_memory(target, addr, width, count, buffer);
if (retval != ERROR_OK) {
/* BOO !*/
LOG_ERROR("mem2array: Read @ 0x%08x, w=%d, cnt=%d, failed",
uint32_t count;
uint32_t v;
const char *varname;
+ const char *phys;
+ bool is_phys;
int n, e, retval;
uint32_t i;
* argv[3] = memory address
* argv[4] = count to write
*/
- if (argc != 4) {
- Jim_WrongNumArgs(interp, 0, argv, "varname width addr nelems");
+ if (argc < 4 || argc > 5) {
+ Jim_WrongNumArgs(interp, 0, argv, "varname width addr nelems [phys]");
return JIM_ERR;
}
varname = Jim_GetString(argv[0], &len);
len = l;
if (e != JIM_OK)
return e;
+ is_phys = false;
+ if (argc > 4) {
+ phys = Jim_GetString(argv[4], &n);
+ if (!strncmp(phys, "phys", n))
+ is_phys = true;
+ else
+ return JIM_ERR;
+ }
switch (width) {
case 8:
width = 1;
}
len -= count;
- retval = target_write_memory(target, addr, width, count, buffer);
+ if (is_phys)
+ retval = target_write_phys_memory(target, addr, width, count, buffer);
+ else
+ retval = target_write_memory(target, addr, width, count, buffer);
if (retval != ERROR_OK) {
/* BOO !*/
LOG_ERROR("array2mem: Write @ 0x%08x, w=%d, cnt=%d, failed",
error "memwrite8: $msg"
}
}
+
+proc memread32_phys {ADDR} {
+ set foo(0) 0
+ if ![ catch { mem2array foo 32 $ADDR 1 phys } msg ] {
+ return $foo(0)
+ } else {
+ error "memread32: $msg"
+ }
+}
+
+proc memread16_phys {ADDR} {
+ set foo(0) 0
+ if ![ catch { mem2array foo 16 $ADDR 1 phys } msg ] {
+ return $foo(0)
+ } else {
+ error "memread16: $msg"
+ }
+}
+
+proc memread8_phys {ADDR} {
+ set foo(0) 0
+ if ![ catch { mem2array foo 8 $ADDR 1 phys } msg ] {
+ return $foo(0)
+ } else {
+ error "memread8: $msg"
+ }
+}
+
+proc memwrite32_phys {ADDR DATA} {
+ set foo(0) $DATA
+ if ![ catch { array2mem foo 32 $ADDR 1 phys } msg ] {
+ return $foo(0)
+ } else {
+ error "memwrite32: $msg"
+ }
+}
+
+proc memwrite16_phys {ADDR DATA} {
+ set foo(0) $DATA
+ if ![ catch { array2mem foo 16 $ADDR 1 phys } msg ] {
+ return $foo(0)
+ } else {
+ error "memwrite16: $msg"
+ }
+}
+
+proc memwrite8_phys {ADDR DATA} {
+ set foo(0) $DATA
+ if ![ catch { array2mem foo 8 $ADDR 1 phys } msg ] {
+ return $foo(0)
+ } else {
+ error "memwrite8: $msg"
+ }
+}