Merge commit '44fc24e0e747293fa05b62ed7439501553829b0b' into sam-update

This commit is contained in:
Jason Kotzin 2022-08-01 19:20:52 -07:00
commit 81fafae68d

View File

@ -43,6 +43,12 @@ struct command_s {
const char *help; const char *help;
}; };
enum assert_srst_t{
ASSERT_NEVER = 0,
ASSERT_UNTIL_SCAN,
ASSERT_UNTIL_ATTACH
};
static bool cmd_version(void); static bool cmd_version(void);
static bool cmd_serial(void); static bool cmd_serial(void);
static bool cmd_help(target *t); static bool cmd_help(target *t);
@ -51,7 +57,7 @@ static bool cmd_jtag_scan(target *t, int argc, char **argv);
static bool cmd_swdp_scan(void); static bool cmd_swdp_scan(void);
static bool cmd_targets(void); static bool cmd_targets(void);
static bool cmd_morse(void); static bool cmd_morse(void);
static bool cmd_connect_srst(target *t, int argc, const char **argv); static bool cmd_assert_srst(target *t, int argc, const char **argv);
static bool cmd_hard_srst(void); static bool cmd_hard_srst(void);
#ifdef PLATFORM_HAS_POWER_SWITCH #ifdef PLATFORM_HAS_POWER_SWITCH
static bool cmd_target_power(target *t, int argc, const char **argv); static bool cmd_target_power(target *t, int argc, const char **argv);
@ -80,7 +86,7 @@ const struct command_s cmd_list[] = {
{"swdp_scan", (cmd_handler)cmd_swdp_scan, "Scan SW-DP for devices" }, {"swdp_scan", (cmd_handler)cmd_swdp_scan, "Scan SW-DP for devices" },
{"targets", (cmd_handler)cmd_targets, "Display list of available targets" }, {"targets", (cmd_handler)cmd_targets, "Display list of available targets" },
{"morse", (cmd_handler)cmd_morse, "Display morse error message" }, {"morse", (cmd_handler)cmd_morse, "Display morse error message" },
{"connect_srst", (cmd_handler)cmd_connect_srst, "Configure connect under SRST: (enable|disable)" }, {"assert_srst", (cmd_handler)cmd_assert_srst, "Assert SRST until:(never(default)| scan | attach)" },
{"hard_srst", (cmd_handler)cmd_hard_srst, "Force a pulse on the hard SRST line - disconnects target" }, {"hard_srst", (cmd_handler)cmd_hard_srst, "Force a pulse on the hard SRST line - disconnects target" },
#ifdef PLATFORM_HAS_POWER_SWITCH #ifdef PLATFORM_HAS_POWER_SWITCH
{"tpwr", (cmd_handler)cmd_target_power, "Supplies power to the target: (enable|disable)"}, {"tpwr", (cmd_handler)cmd_target_power, "Supplies power to the target: (enable|disable)"},
@ -101,7 +107,7 @@ const struct command_s cmd_list[] = {
{NULL, NULL, NULL} {NULL, NULL, NULL}
}; };
static bool connect_assert_srst; static enum assert_srst_t assert_srst;
#ifdef PLATFORM_HAS_DEBUG #ifdef PLATFORM_HAS_DEBUG
bool debug_bmp; bool debug_bmp;
#endif #endif
@ -177,8 +183,10 @@ static bool cmd_jtag_scan(target *t, int argc, char **argv)
irlens[argc-1] = 0; irlens[argc-1] = 0;
} }
if(connect_assert_srst) if(assert_srst != ASSERT_NEVER)
platform_srst_set_val(true); /* will be deasserted after attach */ platform_srst_set_val(true);
if(assert_srst == ASSERT_UNTIL_SCAN)
platform_srst_set_val(false);
int devs = -1; int devs = -1;
volatile struct exception e; volatile struct exception e;
@ -208,8 +216,10 @@ bool cmd_swdp_scan(void)
{ {
gdb_outf("Target voltage: %s\n", platform_target_voltage()); gdb_outf("Target voltage: %s\n", platform_target_voltage());
if(connect_assert_srst) if(assert_srst != ASSERT_NEVER)
platform_srst_set_val(true); /* will be deasserted after attach */ platform_srst_set_val(true);
if(assert_srst == ASSERT_UNTIL_SCAN)
platform_srst_set_val(false);
int devs = -1; int devs = -1;
volatile struct exception e; volatile struct exception e;
@ -262,14 +272,20 @@ bool cmd_morse(void)
return true; return true;
} }
static bool cmd_connect_srst(target *t, int argc, const char **argv) static bool cmd_assert_srst(target *t, int argc, const char **argv)
{ {
(void)t; (void)t;
if (argc == 1) if (argc > 1) {
gdb_outf("Assert SRST during connect: %s\n", if (!strcmp(argv[1], "attach"))
connect_assert_srst ? "enabled" : "disabled"); assert_srst = ASSERT_UNTIL_ATTACH;
else else if (!strcmp(argv[1], "scan"))
connect_assert_srst = !strcmp(argv[1], "enable"); assert_srst = ASSERT_UNTIL_SCAN;
else
assert_srst = ASSERT_NEVER;
}
gdb_outf("Assert SRST %s\n",
(assert_srst == ASSERT_UNTIL_ATTACH) ? "until attach" :
(assert_srst == ASSERT_UNTIL_SCAN) ? "until scan" : "never");
return true; return true;
} }