aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Zhao <jerryz123@berkeley.edu>2023-06-04 21:37:04 -0700
committerJerry Zhao <jerryz123@berkeley.edu>2023-06-20 12:23:47 -0700
commitb9275b7ce23937b6ba0345eb30ebb9c82dbd3c3f (patch)
tree12a161c5f024a46a2d0eeaca57bbbf2d8dc9702c
parentfa27eeb3b77cdeeefabdbf225cd17edad21a5e97 (diff)
downloadriscv-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
-rw-r--r--riscv/sim.cc64
-rw-r--r--riscv/sim.h1
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;