diff options
author | Jerry Zhao <jerryz123@berkeley.edu> | 2023-06-04 21:37:04 -0700 |
---|---|---|
committer | Jerry Zhao <jerryz123@berkeley.edu> | 2023-06-20 12:23:47 -0700 |
commit | b9275b7ce23937b6ba0345eb30ebb9c82dbd3c3f (patch) | |
tree | 12a161c5f024a46a2d0eeaca57bbbf2d8dc9702c /riscv | |
parent | fa27eeb3b77cdeeefabdbf225cd17edad21a5e97 (diff) | |
download | riscv-isa-sim-b9275b7ce23937b6ba0345eb30ebb9c82dbd3c3f.zip riscv-isa-sim-b9275b7ce23937b6ba0345eb30ebb9c82dbd3c3f.tar.gz riscv-isa-sim-b9275b7ce23937b6ba0345eb30ebb9c82dbd3c3f.tar.bz2 |
Inline make_dtb into sim_t constructor
make_dtb is only called here, this simplifies later work
towards refactoring device DTS node generation
Diffstat (limited to 'riscv')
-rw-r--r-- | riscv/sim.cc | 64 | ||||
-rw-r--r-- | riscv/sim.h | 1 |
2 files changed, 29 insertions, 36 deletions
diff --git a/riscv/sim.cc b/riscv/sim.cc index 858ace3..10e86be 100644 --- a/riscv/sim.cc +++ b/riscv/sim.cc @@ -109,7 +109,35 @@ sim_t::sim_t(const cfg_t *cfg, bool halted, if (!dtb_enabled) return; // Load dtb_file if provided, otherwise self-generate a dts/dtb - make_dtb(dtb_file); + if (dtb_file) { + std::ifstream fin(dtb_file, 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 { + std::pair<reg_t, reg_t> initrd_bounds = cfg->initrd_bounds(); + dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ, + initrd_bounds.first, initrd_bounds.second, + cfg->bootargs(), cfg->pmpregions, procs, mems); + dtb = dts_compile(dts); + } + + int fdt_code = fdt_check_header(dtb.c_str()); + if (fdt_code) { + std::cerr << "Failed to read DTB from "; + if (!dtb_file) { + std::cerr << "auto-generated DTS string"; + } else { + std::cerr << "`" << dtb_file << "'"; + } + std::cerr << ": " << fdt_strerror(fdt_code) << ".\n"; + exit(-1); + } void *fdt = (void *)dtb.c_str(); @@ -303,40 +331,6 @@ bool sim_t::mmio_store(reg_t paddr, size_t len, const uint8_t* bytes) return bus.store(paddr, len, bytes); } -void sim_t::make_dtb(const char* dtb_file) -{ - if (dtb_file) { - std::ifstream fin(dtb_file, 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 { - std::pair<reg_t, reg_t> initrd_bounds = cfg->initrd_bounds(); - dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ, - initrd_bounds.first, initrd_bounds.second, - cfg->bootargs(), cfg->pmpregions, procs, mems); - dtb = dts_compile(dts); - } - - int fdt_code = fdt_check_header(dtb.c_str()); - if (fdt_code) { - std::cerr << "Failed to read DTB from "; - if (!dtb_file) { - std::cerr << "auto-generated DTS string"; - } else { - std::cerr << "`" << dtb_file << "'"; - } - std::cerr << ": " << fdt_strerror(fdt_code) << ".\n"; - exit(-1); - } -} - void sim_t::set_rom() { const int reset_vec_size = 8; diff --git a/riscv/sim.h b/riscv/sim.h index 7689d54..7f08ec1 100644 --- a/riscv/sim.h +++ b/riscv/sim.h @@ -98,7 +98,6 @@ private: virtual char* addr_to_mem(reg_t paddr) override; virtual bool mmio_load(reg_t paddr, size_t len, uint8_t* bytes) override; virtual bool mmio_store(reg_t paddr, size_t len, const uint8_t* bytes) override; - void make_dtb(const char* dtb_file); void set_rom(); virtual const char* get_symbol(uint64_t paddr) override; |