Browse Source

fdt: option: add --dtb option to specify dtb binary file

Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
pull/455/head
Chih-Min Chao 6 years ago
parent
commit
65f42ac88a
  1. 19
      riscv/sim.cc
  2. 5
      riscv/sim.h
  3. 3
      spike_main/spike.cc

19
riscv/sim.cc

@ -5,6 +5,7 @@
#include "dts.h"
#include "remote_bitbang.h"
#include "byteorder.h"
#include <fstream>
#include <map>
#include <iostream>
#include <sstream>
@ -211,8 +212,22 @@ void sim_t::make_dtb()
std::vector<char> rom((char*)reset_vec, (char*)reset_vec + sizeof(reset_vec));
dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ, initrd_start, initrd_end, procs, mems);
std::string dtb = dts_compile(dts);
std::string dtb;
if (!dtb_file.empty()) {
std::ifstream fin(dtb_file.c_str(), std::ios::binary);
if (!fin.good()) {
std::cerr << "can't find dtb file: " << dtb_file << std::endl;
exit(-1);
}
std::stringstream strstream;
strstream << fin.rdbuf();
dtb = strstream.str();
} else {
dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ, initrd_start, initrd_end, procs, mems);
dtb = dts_compile(dts);
}
rom.insert(rom.end(), dtb.begin(), dtb.end());
const int align = 0x1000;

5
riscv/sim.h

@ -49,6 +49,10 @@ public:
void set_dtb_enabled(bool value) {
this->dtb_enabled = value;
}
void set_dtb_file(const char* value) {
if (value)
this->dtb_file = value;
}
void set_remote_bitbang(remote_bitbang_t* remote_bitbang) {
this->remote_bitbang = remote_bitbang;
}
@ -68,6 +72,7 @@ private:
reg_t initrd_end;
reg_t start_pc;
std::string dts;
std::string dtb_file;
std::unique_ptr<rom_device_t> boot_rom;
std::unique_ptr<clint_t> clint;
bus_t bus;

3
spike_main/spike.cc

@ -165,6 +165,7 @@ int main(int argc, char** argv)
const char* isa = DEFAULT_ISA;
const char* priv = DEFAULT_PRIV;
const char* varch = DEFAULT_VARCH;
const char* dtb_file = NULL;
uint16_t rbb_port = 0;
bool use_rbb = false;
unsigned dmi_rti = 0;
@ -258,6 +259,7 @@ int main(int argc, char** argv)
parser.option(0, "extension", 1, [&](const char* s){extension = find_extension(s);});
parser.option(0, "dump-dts", 0, [&](const char *s){dump_dts = true;});
parser.option(0, "disable-dtb", 0, [&](const char *s){dtb_enabled = false;});
parser.option(0, "dtb", 1, [&](const char *s){dtb_file = s;});
parser.option(0, "initrd", 1, [&](const char* s){initrd = s;});
parser.option(0, "real-time-clint", 0, [&](const char *s){real_time_clint = true;});
parser.option(0, "extlib", 1, [&](const char *s){
@ -319,6 +321,7 @@ int main(int argc, char** argv)
s.set_remote_bitbang(&(*remote_bitbang));
}
s.set_dtb_enabled(dtb_enabled);
s.set_dtb_file(dtb_file);
if (dump_dts) {
printf("%s", s.get_dts());

Loading…
Cancel
Save