commit 309670bcb66c83429ca9db76993828482ab64d09
parent 3cf4bda1f2d6435e59fab3d7c03dcdf91edb9a50
Author: Brian Swetland <swetland@frotz.net>
Date: Sun, 28 Jun 2015 07:11:22 -0700
debugger: tidy up reset code a bit
Diffstat:
1 file changed, 9 insertions(+), 25 deletions(-)
diff --git a/tools/debugger-commands.c b/tools/debugger-commands.c
@@ -25,10 +25,6 @@
#include <fcntl.h>
#include <sys/time.h>
-/* TODO
- * - fault recovery (try dw 10000000 for example)
- */
-
#include <fw/types.h>
#include <protocol/rswdp.h>
#include "rswdp.h"
@@ -369,19 +365,10 @@ int do_download(int argc, param *argv) {
int do_reset(int argc, param *argv) {
swdp_core_halt();
- swdp_ahb_write(CDBG_EMCR, 0);
+ swdp_ahb_write(DEMCR, DEMCR_TRCENA);
/* core reset and sys reset */
swdp_ahb_write(0xe000ed0c, 0x05fa0005);
- swdp_ahb_write(CDBG_EMCR, 0);
-#if 0
- if (argc > 0) {
- swdp_target_reset(argv[0].n);
- } else {
- swdp_target_reset(1);
- usleep(10000);
- swdp_target_reset(0);
- }
-#endif
+ swdp_ahb_write(DEMCR, DEMCR_TRCENA);
return 0;
}
@@ -395,18 +382,13 @@ int do_reset_hw(int argc, param *argv) {
int do_reset_stop(int argc, param *argv) {
swdp_core_halt();
- swdp_ahb_write(CDBG_EMCR, 1);
-#if 1
- /* core reset and sys reset */
+ // enable vector-trap on reset, enable DWT/FPB
+ swdp_ahb_write(DEMCR, DEMCR_VC_CORERESET | DEMCR_TRCENA);
+ // core reset and sys reset
swdp_ahb_write(0xe000ed0c, 0x05fa0005);
-#else
- swdp_target_reset(1);
- usleep(10000);
- swdp_target_reset(0);
- usleep(10000);
-#endif
+ //swdp_core_wait_for_halt();
do_stop(0,0);
- swdp_ahb_write(CDBG_EMCR, 0);
+ swdp_ahb_write(DEMCR, DEMCR_TRCENA);
return 0;
}
@@ -529,6 +511,8 @@ int invoke(u32 agent, u32 func, u32 r0, u32 r1, u32 r2, u32 r3) {
// if the target has bogus data at 0, the processor may be in
// pending-exception state after reset-stop, so we will clear
// any exceptions and then set the PSR to something reasonable
+
+ // Write VECTCLRACTIVE to AIRCR
swdp_ahb_write(0xe000ed0c, 0x05fa0002);
swdp_core_write(16, 0x01000000);