projects
/
fw
/
stlink
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use stlink_r|w_debug32 for single word access in the gdbserver too
[fw/stlink]
/
gdbserver
/
gdb-server.c
diff --git
a/gdbserver/gdb-server.c
b/gdbserver/gdb-server.c
index 6033040a3bcff515608b24cd5e82bd38c0e0c75b..851c758a9a9dcf0f6feca36645aea584c058972d 100644
(file)
--- a/
gdbserver/gdb-server.c
+++ b/
gdbserver/gdb-server.c
@@
-265,15
+265,13
@@
static void init_data_watchpoints(stlink_t *sl) {
#endif
// set trcena in debug command to turn on dwt unit
#endif
// set trcena in debug command to turn on dwt unit
- stlink_read_mem32(sl, 0xE000EDFC, 4);
- sl->q_buf[3] |= 1;
- stlink_write_mem32(sl, 0xE000EDFC, 4);
+ stlink_write_debug32(sl, 0xE000EDFC,
+ stlink_read_debug32(sl, 0xE000EDFC) | (1<<24));
// make sure all watchpoints are cleared
// make sure all watchpoints are cleared
- memset(sl->q_buf, 0, 4);
for(int i = 0; i < DATA_WATCH_NUM; i++) {
data_watches[i].fun = WATCHDISABLED;
for(int i = 0; i < DATA_WATCH_NUM; i++) {
data_watches[i].fun = WATCHDISABLED;
- stlink_write_
mem32(sl, 0xe0001028 + i * 16, 4
);
+ stlink_write_
debug32(sl, 0xe0001028 + i * 16, 0
);
}
}
}
}
@@
-306,25
+304,16
@@
static int add_data_watchpoint(stlink_t *sl, enum watchfun wf, stm32_addr_t addr
data_watches[i].mask = mask;
// insert comparator address
data_watches[i].mask = mask;
// insert comparator address
- sl->q_buf[0] = (addr & 0xff);
- sl->q_buf[1] = ((addr >> 8) & 0xff);
- sl->q_buf[2] = ((addr >> 16) & 0xff);
- sl->q_buf[3] = ((addr >> 24) & 0xff);
-
- stlink_write_mem32(sl, 0xE0001020 + i * 16, 4);
+ stlink_write_debug32(sl, 0xE0001020 + i * 16, addr);
// insert mask
// insert mask
- memset(sl->q_buf, 0, 4);
- sl->q_buf[0] = mask;
- stlink_write_mem32(sl, 0xE0001024 + i * 16, 4);
+ stlink_write_debug32(sl, 0xE0001024 + i * 16, mask);
// insert function
// insert function
- memset(sl->q_buf, 0, 4);
- sl->q_buf[0] = wf;
- stlink_write_mem32(sl, 0xE0001028 + i * 16, 4);
+ stlink_write_debug32(sl, 0xE0001028 + i * 16, wf);
// just to make sure the matched bit is clear !
// just to make sure the matched bit is clear !
- stlink_read_
mem32(sl, 0xE0001028 + i * 16, 4
);
+ stlink_read_
debug32(sl, 0xE0001028 + i * 16
);
return 0;
}
}
return 0;
}
}
@@
-346,9
+335,8
@@
static int delete_data_watchpoint(stlink_t *sl, stm32_addr_t addr)
printf("delete watchpoint %d addr %x\n", i, addr);
#endif
printf("delete watchpoint %d addr %x\n", i, addr);
#endif
- memset(sl->q_buf, 0, 4);
data_watches[i].fun = WATCHDISABLED;
data_watches[i].fun = WATCHDISABLED;
- stlink_write_
mem32(sl, 0xe0001028 + i * 16, 4
);
+ stlink_write_
debug32(sl, 0xe0001028 + i * 16, 0
);
return 0;
}
return 0;
}
@@
-374,15
+362,13
@@
struct code_hw_breakpoint code_breaks[CODE_BREAK_NUM];
static void init_code_breakpoints(stlink_t *sl) {
memset(sl->q_buf, 0, 4);
static void init_code_breakpoints(stlink_t *sl) {
memset(sl->q_buf, 0, 4);
- sl->q_buf[0] = 0x03; // KEY | ENABLE
- stlink_write_mem32(sl, CM3_REG_FP_CTRL, 4);
+ stlink_write_debug32(sl, CM3_REG_FP_CTRL, 0x03 /*KEY | ENABLE4*/);
printf("KARL - should read back as 0x03, not 60 02 00 00\n");
printf("KARL - should read back as 0x03, not 60 02 00 00\n");
- stlink_read_
mem32(sl, CM3_REG_FP_CTRL, 4
);
+ stlink_read_
debug32(sl, CM3_REG_FP_CTRL
);
- memset(sl->q_buf, 0, 4);
for(int i = 0; i < CODE_BREAK_NUM; i++) {
code_breaks[i].type = 0;
for(int i = 0; i < CODE_BREAK_NUM; i++) {
code_breaks[i].type = 0;
- stlink_write_
mem32(sl, CM3_REG_FP_COMP0 + i * 4, 4
);
+ stlink_write_
debug32(sl, CM3_REG_FP_COMP0 + i * 4, 0
);
}
}
}
}
@@
-416,28
+402,23
@@
static int update_code_breakpoint(stlink_t *sl, stm32_addr_t addr, int set) {
if(set) brk->type |= type;
else brk->type &= ~type;
if(set) brk->type |= type;
else brk->type &= ~type;
- memset(sl->q_buf, 0, 4);
-
if(brk->type == 0) {
#ifdef DEBUG
printf("clearing hw break %d\n", id);
#endif
if(brk->type == 0) {
#ifdef DEBUG
printf("clearing hw break %d\n", id);
#endif
- stlink_write_
mem32(sl, 0xe0002008 + id * 4, 4
);
+ stlink_write_
debug32(sl, 0xe0002008 + id * 4, 0
);
} else {
} else {
- sl->q_buf[0] = ( brk->addr & 0xff) | 1;
- sl->q_buf[1] = ((brk->addr >> 8) & 0xff);
- sl->q_buf[2] = ((brk->addr >> 16) & 0xff);
- sl->q_buf[3] = ((brk->addr >> 24) & 0xff) | (brk->type << 6);
+ uint32_t mask = (brk->addr) | 1 | (brk->type << 30);
#ifdef DEBUG
printf("setting hw break %d at %08x (%d)\n",
id, brk->addr, brk->type);
#ifdef DEBUG
printf("setting hw break %d at %08x (%d)\n",
id, brk->addr, brk->type);
- printf("reg %0
2x %02x %02x %02x
\n",
-
sl->q_buf[3], sl->q_buf[2], sl->q_buf[1], sl->q_buf[0]
);
+ printf("reg %0
8x
\n",
+
mask
);
#endif
#endif
- stlink_write_
mem32(sl, 0xe0002008 + id * 4, 4
);
+ stlink_write_
debug32(sl, 0xe0002008 + id * 4, mask
);
}
return 0;
}
return 0;