From b9275b7ce23937b6ba0345eb30ebb9c82dbd3c3f Mon Sep 17 00:00:00 2001 From: Jerry Zhao Date: Sun, 4 Jun 2023 21:37:04 -0700 Subject: Inline make_dtb into sim_t constructor make_dtb is only called here, this simplifies later work towards refactoring device DTS node generation --- riscv/sim.cc | 64 +++++++++++++++++++++++++++--------------------------------- 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 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 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; -- cgit v1.1