artiq_flash: add preinit-command option

This commit is contained in:
Sebastien Bourdeauducq 2017-11-01 17:34:10 +08:00
parent 6089d44fd0
commit 4a57b52241
1 changed files with 20 additions and 17 deletions

View File

@ -5,6 +5,7 @@ import os
import subprocess import subprocess
import tempfile import tempfile
import shutil import shutil
from functools import partial
from artiq import __artiq_dir__ as artiq_dir from artiq import __artiq_dir__ as artiq_dir
from artiq.frontend.bit2bin import bit2bin from artiq.frontend.bit2bin import bit2bin
@ -38,8 +39,10 @@ Prerequisites:
help="target board, default: %(default)s") help="target board, default: %(default)s")
parser.add_argument("-m", "--adapter", default=None, parser.add_argument("-m", "--adapter", default=None,
help="target adapter, default: board-dependent") help="target adapter, default: board-dependent")
parser.add_argument("--target-file", default=None, parser.add_argument("--preinit-command", default=[], action="append",
help="use alternative OpenOCD target file") help="add a pre-initialization OpenOCD command. "
"Useful for selecting a development board "
"when several are connected.")
parser.add_argument("-f", "--storage", help="write file to storage area") parser.add_argument("-f", "--storage", help="write file to storage area")
parser.add_argument("-d", "--dir", help="look for files in this directory") parser.add_argument("-d", "--dir", help="look for files in this directory")
parser.add_argument("action", metavar="ACTION", nargs="*", parser.add_argument("action", metavar="ACTION", nargs="*",
@ -67,10 +70,15 @@ def proxy_path():
class Programmer: class Programmer:
def __init__(self, target_file): def __init__(self, target_file, preinit_commands):
self.target_file = target_file self.target_file = target_file
self.preinit_commands = preinit_commands
self.prog = [] self.prog = []
def init(self):
self.prog.extend(self.preinit_commands)
self.prog.append("init")
def load(self, bitfile): def load(self, bitfile):
raise NotImplementedError raise NotImplementedError
@ -96,9 +104,10 @@ class Programmer:
class ProgrammerJtagSpi7(Programmer): class ProgrammerJtagSpi7(Programmer):
def __init__(self, target_file): def __init__(self, target, preinit_commands):
Programmer.__init__(self, target_file) Programmer.__init__(self, os.path.join("board", target + ".cfg"),
self.prog.append("init") preinit_commands)
self.init()
def load(self, bitfile): def load(self, bitfile):
self.prog.append("pld load 0 " + bitfile) self.prog.append("pld load 0 " + bitfile)
@ -117,10 +126,9 @@ class ProgrammerJtagSpi7(Programmer):
class ProgrammerSayma(Programmer): class ProgrammerSayma(Programmer):
def __init__(self, target_file): def __init__(self, preinit_commands):
# TODO: use target_file
# TODO: support Sayma RTM # TODO: support Sayma RTM
Programmer.__init__(self, None) Programmer.__init__(self, None, preinit_commands)
self.proxy_loaded = False self.proxy_loaded = False
self.prog += [ self.prog += [
"interface ftdi", "interface ftdi",
@ -149,9 +157,8 @@ class ProgrammerSayma(Programmer):
"target create amc_xcu.proxy testee -chain-position amc_xcu.tap", "target create amc_xcu.proxy testee -chain-position amc_xcu.tap",
"flash bank amc_xcu.spi0 jtagspi 0 0 0 0 amc_xcu.proxy $XILINX_USER1 $AMC_DR_LEN", "flash bank amc_xcu.spi0 jtagspi 0 0 0 0 amc_xcu.proxy $XILINX_USER1 $AMC_DR_LEN",
"flash bank amc_xcu.spi1 jtagspi 0 0 0 0 amc_xcu.proxy $XILINX_USER2 $AMC_DR_LEN", "flash bank amc_xcu.spi1 jtagspi 0 0 0 0 amc_xcu.proxy $XILINX_USER2 $AMC_DR_LEN",
"init"
] ]
self.init()
def load(self, bitfile): def load(self, bitfile):
self.prog.append("pld load 0 " + bitfile) self.prog.append("pld load 0 " + bitfile)
@ -180,7 +187,7 @@ def main():
config = { config = {
"kc705": { "kc705": {
"programmer_factory": ProgrammerJtagSpi7, "programmer_factory": partial(ProgrammerJtagSpi7, "kc705"),
"proxy_bitfile": "bscan_spi_xc7k325t.bit", "proxy_bitfile": "bscan_spi_xc7k325t.bit",
"adapters": ["nist_clock", "nist_qc2"], "adapters": ["nist_clock", "nist_qc2"],
"gateware": (0, 0x000000), "gateware": (0, 0x000000),
@ -216,11 +223,7 @@ def main():
raise SystemExit("Binaries directory '{}' does not exist" raise SystemExit("Binaries directory '{}' does not exist"
.format(bin_dir)) .format(bin_dir))
if opts.target_file is None: programmer = config["programmer_factory"](opts.preinit_command)
target_file = os.path.join("board", opts.target + ".cfg")
else:
target_file = opts.target_file
programmer = config["programmer_factory"](target_file)
conv = False conv = False
for action in opts.action: for action in opts.action: