You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
# Copyright (c) 2024 tinyVision.ai Inc. |
|
# |
|
# SPDX-License-Identifier: Apache-2.0 |
|
|
|
"""Runner for the ecpprog programming tool for Lattice FPGAs.""" |
|
# https://github.com/gregdavill/ecpprog |
|
|
|
from runners.core import BuildConfiguration, RunnerCaps, ZephyrBinaryRunner |
|
|
|
|
|
class EcpprogBinaryRunner(ZephyrBinaryRunner): |
|
"""Runner front-end for programming the FPGA flash at some offset.""" |
|
|
|
def __init__(self, cfg, device=None): |
|
super().__init__(cfg) |
|
self.device = device |
|
|
|
@classmethod |
|
def name(cls): |
|
return "ecpprog" |
|
|
|
@classmethod |
|
def capabilities(cls): |
|
return RunnerCaps(commands={"flash"}) |
|
|
|
@classmethod |
|
def do_add_parser(cls, parser): |
|
parser.add_argument( |
|
"--device", dest="device", help="Device identifier such as i:<vid>:<pid>" |
|
) |
|
|
|
@classmethod |
|
def do_create(cls, cfg, args): |
|
return EcpprogBinaryRunner(cfg, device=args.device) |
|
|
|
def do_run(self, command, **kwargs): |
|
build_conf = BuildConfiguration(self.cfg.build_dir) |
|
load_offset = build_conf.get("CONFIG_FLASH_LOAD_OFFSET", 0) |
|
command = ("ecpprog", "-o", hex(load_offset), self.cfg.bin_file) |
|
self.logger.debug(" ".join(command)) |
|
self.check_call(command)
|
|
|