diff --git a/libgm/src/Bitstream.cpp b/libgm/src/Bitstream.cpp index 57fe7bb..57c6694 100644 --- a/libgm/src/Bitstream.cpp +++ b/libgm/src/Bitstream.cpp @@ -43,7 +43,7 @@ static constexpr const uint8_t CMD_FRAM = 0xd2; static constexpr const uint8_t CMD_SERDES = 0xd7; // static constexpr const uint8_t CMD_D2D = 0xd8; // static constexpr const uint8_t CMD_PATH = 0xd9; -static constexpr const uint8_t CMD_JUMP = 0xda; // +static constexpr const uint8_t CMD_JUMP = 0xda; static constexpr const uint8_t CMD_CHG_STATUS = 0xdb; static constexpr const uint8_t CMD_WAIT_PLL = 0xdc; // static constexpr const uint8_t CMD_SPLL = 0xdd; @@ -266,6 +266,17 @@ class BitstreamReadWriter write_nops(4); } + void write_cmd_jump(uint32_t addr) + { + write_header(CMD_JUMP, 4); + write_byte(uint8_t(addr & 0xFF)); + write_byte(uint8_t((addr >> 8UL) & 0xFF)); + write_byte(uint8_t((addr >> 16UL) & 0xFF)); + write_byte(uint8_t((addr >> 24UL) & 0xFF)); + insert_crc16(); + write_nops(2); + } + void write_cmd_cfgmode(uint8_t crcmode, std::vector spimode) { write_header(CMD_CFGMODE, spimode.size() > 0 ? 6 : 2); @@ -1005,7 +1016,10 @@ Bitstream Bitstream::serialise_chip(const Chip &chip, const std::map(), "CRC error behaviour (check, ignore, unused)"); options.add_options()("spimode", po::value(), "SPI Mode to use (single, dual, quad)"); options.add_options()("reconfig", "enable reconfiguration in bitstream"); + options.add_options()("cpeconfig", "enable CPE configuration interface"); + options.add_options()("bootaddr", po::value(), "boot address for secondary bitstream"); po::positional_options_description pos; options.add_options()("input", po::value()->required(), "input textual configuration"); pos.add("input", 1); @@ -99,6 +101,14 @@ int main(int argc, char *argv[]) bitopts["reconfig"] = "yes"; } + if (vm.count("cpeconfig")) { + bitopts["cpeconfig"] = "yes"; + } + + if (vm.count("bootaddr")) { + bitopts["bootaddr"] = std::to_string(vm["bootaddr"].as()); + } + std::string textcfg((std::istreambuf_iterator(config_file)), std::istreambuf_iterator()); ChipConfig cc;