Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
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

# 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)