Browse Source

nxp: mimxrt1170: add support for NXP's LinkServer

LinkServer is NXP's tool to flash and debug on MCU's.
This patch expands support for LinkServer to MIMXRT1170.

There is one limitation with flashing and debugging the SoC's seciond
core (COrtex M4) that will be addressed with a future submission.

Signed-off-by: Yves Vandervennet <yves.vandervennet@nxp.com>
pull/62333/head
Yves Vandervennet 2 years ago committed by Carles Cufí
parent
commit
ab9da956b0
  1. 25
      boards/arm/mimxrt1170_evk/board.cmake
  2. 32
      scripts/west_commands/runners/linkserver.py

25
boards/arm/mimxrt1170_evk/board.cmake

@ -5,13 +5,28 @@ @@ -5,13 +5,28 @@
#
if(CONFIG_SOC_MIMXRT1176_CM7 OR CONFIG_SECOND_CORE_MCUX)
board_runner_args(pyocd "--target=mimxrt1170_cm7")
board_runner_args(jlink "--device=MIMXRT1176xxxA_M7" "--reset-after-load")
board_runner_args(pyocd "--target=mimxrt1170_cm7")
board_runner_args(jlink "--device=MIMXRT1176xxxA_M7" "--reset-after-load")
if(CONFIG_BOARD_MIMXRT1170_EVK_CM7)
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVK")
elseif(CONFIG_BOARD_MIMXRT1170_EVKB_CM7)
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVKB")
endif()
board_runner_args(linkserver "--core=cm7")
elseif(CONFIG_SOC_MIMXRT1176_CM4)
board_runner_args(pyocd "--target=mimxrt1170_cm4")
# Note: Please use JLINK above V7.50 (Only support run cm4 image when debugging due to default boot core on board is cm7 core)
board_runner_args(jlink "--device=MIMXRT1176xxxA_M4")
board_runner_args(pyocd "--target=mimxrt1170_cm4")
# Note: Please use JLINK above V7.50 (Only support run cm4 image when debugging due to default boot core on board is cm7 core)
board_runner_args(jlink "--device=MIMXRT1176xxxA_M4")
if(CONFIG_BOARD_MIMXRT1170_EVK_CM4)
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVK")
elseif(CONFIG_BOARD_MIMXRT1170_EVKB_CM4)
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVKB")
endif()
board_runner_args(linkserver "--core=cm4")
endif()
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/linkserver.board.cmake)

32
scripts/west_commands/runners/linkserver.py

@ -22,7 +22,7 @@ DEFAULT_LINKSERVER_SEMIHOST_PORT = 3334 @@ -22,7 +22,7 @@ DEFAULT_LINKSERVER_SEMIHOST_PORT = 3334
class LinkServerBinaryRunner(ZephyrBinaryRunner):
'''Runner front-end for NXP Linkserver'''
def __init__(self, cfg, device,
def __init__(self, cfg, device, core,
linkserver=DEFAULT_LINKSERVER_EXE,
dt_flash=True, erase=True,
probe=1,
@ -39,6 +39,7 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner): @@ -39,6 +39,7 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
self.elf_name = cfg.elf_file
self.gdb_cmd = cfg.gdb if cfg.gdb else None
self.device = device
self.core = core
self.linkserver = linkserver
self.dt_flash = dt_flash
self.erase = erase
@ -68,6 +69,8 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner): @@ -68,6 +69,8 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
def do_add_parser(cls, parser):
parser.add_argument('--device', required=True, help='device name')
parser.add_argument('--core', required=False, help='core of the device')
parser.add_argument('--probe', default=1,
help='interface to use (index, no serial number), default is 1')
@ -92,7 +95,7 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner): @@ -92,7 +95,7 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
@classmethod
def do_create(cls, cfg, args):
return LinkServerBinaryRunner(cfg, args.device,
return LinkServerBinaryRunner(cfg, args.device, args.core,
linkserver=args.linkserver,
dt_flash=args.dt_flash,
erase=args.erase,
@ -120,14 +123,22 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner): @@ -120,14 +123,22 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
if command == 'flash':
self.flash(**kwargs)
else:
if self.core is not None:
_cmd_core = [ "-c", self.core ]
else:
_cmd_core = []
linkserver_cmd = ([self.linkserver] +
["gdbserver"] +
["--probe", "#"+str(self.probe) ] +
["--gdb-port", str(self.gdb_port )] +
["--semihost-port", str(self.semihost_port) ] +
self.override_cli +
_cmd_core +
self.override_cli +
[self.device])
self.logger.debug(f'LinkServer cmd: + {linkserver_cmd}')
if command in ('debug', 'attach'):
if self.elf_name is None or not os.path.isfile(self.elf_name):
raise ValueError('Cannot debug; elf file required')
@ -153,8 +164,13 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner): @@ -153,8 +164,13 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
def do_erase(self, **kwargs):
if self.core is not None:
_cmd_core = ":"+self.core
else:
_cmd_core = ""
linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", "#"+str(self.probe)] +
[self.device] + ["erase"])
[self.device+_cmd_core] + ["erase"])
self.logger.debug("flash erase command = " + str(linkserver_cmd))
self.check_call(linkserver_cmd)
@ -170,7 +186,13 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner): @@ -170,7 +186,13 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
def flash(self, **kwargs):
linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", "#"+str(self.probe)] + self.override_cli + [self.device])
if self.core is not None:
_cmd_core = ":"+self.core
else:
_cmd_core = ""
linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", "#"+str(self.probe)] + self.override_cli + [self.device+_cmd_core])
self.logger.debug(f'LinkServer cmd: + {linkserver_cmd}')
if self.erase:
self.do_erase()

Loading…
Cancel
Save