Skip to content

Commit 7d94b0c

Browse files
henrikbrixandersennashif
authored andcommitted
runners: openocd: add support for custom reset halt command
Add support for specifying a custom OpenOCD command to be used for resetting and halting a target. As noted in the OpenOCD documentation, not all targets support the "reset halt" command for halt-on-reset. Some targets support a software emulation via the "soft_reset_halt" command. Other targets may require a custom command (e.g. a command defined in the target configuration file). Signed-off-by: Henrik Brix Andersen <[email protected]>
1 parent dcff99e commit 7d94b0c

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

scripts/west_commands/runners/openocd.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
DEFAULT_OPENOCD_TCL_PORT = 6333
2121
DEFAULT_OPENOCD_TELNET_PORT = 4444
2222
DEFAULT_OPENOCD_GDB_PORT = 3333
23-
23+
DEFAULT_OPENOCD_RESET_HALT_CMD = 'reset halt'
2424

2525
class OpenOcdBinaryRunner(ZephyrBinaryRunner):
2626
'''Runner front-end for openocd.'''
2727

28-
def __init__(self, cfg, pre_init=None, pre_load=None,
29-
load_cmd=None, verify_cmd=None, post_verify=None,
28+
def __init__(self, cfg, pre_init=None, reset_halt_cmd=DEFAULT_OPENOCD_RESET_HALT_CMD,
29+
pre_load=None, load_cmd=None, verify_cmd=None, post_verify=None,
3030
tui=None, config=None, serial=None, use_elf=None,
3131
no_halt=False,
3232
tcl_port=DEFAULT_OPENOCD_TCL_PORT,
@@ -54,6 +54,7 @@ def __init__(self, cfg, pre_init=None, pre_load=None,
5454
# them to POSIX style just to be sure.
5555
self.elf_name = Path(cfg.elf_file).as_posix()
5656
self.pre_init = pre_init or []
57+
self.reset_halt_cmd = reset_halt_cmd
5758
self.pre_load = pre_load or []
5859
self.load_cmd = load_cmd
5960
self.verify_cmd = verify_cmd
@@ -84,6 +85,9 @@ def do_add_parser(cls, parser):
8485
parser.add_argument('--cmd-pre-init', action='append',
8586
help='''Command to run before calling init;
8687
may be given multiple times''')
88+
parser.add_argument('--cmd-reset-halt', default=DEFAULT_OPENOCD_RESET_HALT_CMD,
89+
help=f'''Command to run for resetting and halting the target,
90+
defaults to "{DEFAULT_OPENOCD_RESET_HALT_CMD}"''')
8791
parser.add_argument('--cmd-pre-load', action='append',
8892
help='''Command to run before flashing;
8993
may be given multiple times''')
@@ -113,7 +117,7 @@ def do_add_parser(cls, parser):
113117
def do_create(cls, cfg, args):
114118
return OpenOcdBinaryRunner(
115119
cfg,
116-
pre_init=args.cmd_pre_init,
120+
pre_init=args.cmd_pre_init, reset_halt_cmd=args.cmd_reset_halt,
117121
pre_load=args.cmd_pre_load, load_cmd=args.cmd_load,
118122
verify_cmd=args.cmd_verify, post_verify=args.cmd_post_verify,
119123
tui=args.tui, config=args.config, serial=args.serial,
@@ -214,9 +218,9 @@ def do_flash(self, **kwargs):
214218
cmd = (self.openocd_cmd + self.serial + self.cfg_cmd +
215219
pre_init_cmd + ['-c', 'init',
216220
'-c', 'targets'] +
217-
pre_load_cmd + ['-c', 'reset halt',
221+
pre_load_cmd + ['-c', self.reset_halt_cmd,
218222
'-c', self.load_cmd + ' ' + hex_name,
219-
'-c', 'reset halt'] +
223+
'-c', self.reset_halt_cmd] +
220224
['-c', self.verify_cmd + ' ' + hex_name] +
221225
post_verify_cmd +
222226
['-c', 'reset run',
@@ -240,7 +244,7 @@ def do_flash_elf(self, **kwargs):
240244
cmd = (self.openocd_cmd + self.serial + self.cfg_cmd +
241245
pre_init_cmd + ['-c', 'init',
242246
'-c', 'targets',
243-
'-c', 'reset halt',
247+
'-c', self.reset_halt_cmd,
244248
'-c', 'load_image ' + self.elf_name,
245249
'-c', 'resume ' + ep_addr,
246250
'-c', 'shutdown'])
@@ -288,6 +292,6 @@ def do_debugserver(self, **kwargs):
288292
'-c', 'gdb_port {}'.format(self.gdb_port)] +
289293
pre_init_cmd + ['-c', 'init',
290294
'-c', 'targets',
291-
'-c', 'reset halt'])
295+
'-c', self.reset_halt_cmd])
292296
self.print_gdbserver_message()
293297
self.check_call(cmd)

0 commit comments

Comments
 (0)