scripts: runner: pyocd: support DT-based flashing
Enable DT support in the pyOCD flasher, and turn it on in the build
system.
Signed-off-by: Marti Bolivar <marti@opensourcefoundries.com>
diff --git a/boards/common/pyocd.board.cmake b/boards/common/pyocd.board.cmake
index 9a2f45f..26b0cc5 100644
--- a/boards/common/pyocd.board.cmake
+++ b/boards/common/pyocd.board.cmake
@@ -1,3 +1,3 @@
set_ifndef(BOARD_FLASH_RUNNER pyocd)
set_ifndef(BOARD_DEBUG_RUNNER pyocd)
-board_finalize_runner_args(pyocd) # No default arguments to provide.
+board_finalize_runner_args(pyocd "--dt-flash=y")
diff --git a/scripts/support/runner/pyocd.py b/scripts/support/runner/pyocd.py
index cf17168..afc9d8d 100644
--- a/scripts/support/runner/pyocd.py
+++ b/scripts/support/runner/pyocd.py
@@ -6,8 +6,7 @@
import os
import sys
-
-from .core import ZephyrBinaryRunner
+from .core import ZephyrBinaryRunner, RunnerCaps, BuildConfiguration
DEFAULT_PYOCD_GDB_PORT = 3333
@@ -15,7 +14,8 @@
class PyOcdBinaryRunner(ZephyrBinaryRunner):
'''Runner front-end for pyOCD.'''
- def __init__(self, target, flashtool='pyocd-flashtool',
+ def __init__(self, target,
+ flashtool='pyocd-flashtool', flash_addr=0x0,
gdb=None, gdbserver='pyocd-gdbserver',
gdb_port=DEFAULT_PYOCD_GDB_PORT, tui=False,
bin_name=None, elf_name=None,
@@ -24,6 +24,7 @@
self.target_args = ['-t', target]
self.flashtool = flashtool
+ self.flash_addr_args = ['-a', hex(flash_addr)] if flash_addr else []
self.gdb_cmd = [gdb] if gdb is not None else None
self.gdbserver = gdbserver
self.gdb_port = gdb_port
@@ -46,6 +47,10 @@
return 'pyocd'
@classmethod
+ def capabilities(cls):
+ return RunnerCaps(flash_addr=True)
+
+ @classmethod
def do_add_parser(cls, parser):
parser.add_argument('--target', required=True,
help='target override')
@@ -77,8 +82,12 @@
file=sys.stderr)
args.daparg = daparg
+ build_conf = BuildConfiguration(os.getcwd())
+ flash_addr = cls.get_flash_address(args, build_conf)
+
return PyOcdBinaryRunner(
- args.target, flashtool=args.flashtool, gdb=args.gdb,
+ args.target, flashtool=args.flashtool,
+ flash_addr=flash_addr, gdb=args.gdb,
gdbserver=args.gdbserver, gdb_port=args.gdb_port, tui=args.tui,
bin_name=args.kernel_bin, elf_name=args.kernel_elf,
board_id=args.board_id, daparg=args.daparg, debug=args.verbose)
@@ -97,6 +106,7 @@
raise ValueError('Cannot flash; bin_name is missing')
cmd = ([self.flashtool] +
+ self.flash_addr_args +
self.daparg_args +
self.target_args +
self.board_args +