aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Zhao <jerryz123@berkeley.edu>2024-06-30 00:08:54 -0700
committerJerry Zhao <jerryz123@berkeley.edu>2024-06-30 14:14:13 -0700
commit775c012eb86a99ac529f9190d733f3e92e78c1b5 (patch)
tree442fe462a0b5df93f09a7f8de8182e9b5403e5d3
parent1b1a333763eae2e74dbf38b39d9adab39c4bed7c (diff)
downloadriscv-isa-sim-775c012eb86a99ac529f9190d733f3e92e78c1b5.zip
riscv-isa-sim-775c012eb86a99ac529f9190d733f3e92e78c1b5.tar.gz
riscv-isa-sim-775c012eb86a99ac529f9190d733f3e92e78c1b5.tar.bz2
Pass cfg into make_dts
-rw-r--r--riscv/dts.cc21
-rw-r--r--riscv/dts.h7
-rw-r--r--riscv/sim.cc5
3 files changed, 15 insertions, 18 deletions
diff --git a/riscv/dts.cc b/riscv/dts.cc
index 8304171..4f62cdf 100644
--- a/riscv/dts.cc
+++ b/riscv/dts.cc
@@ -13,14 +13,17 @@
#include <sys/types.h>
std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz,
- reg_t initrd_start, reg_t initrd_end,
- const char* bootargs,
- size_t pmpregions,
- size_t pmpgranularity,
- std::vector<processor_t*> procs,
+ const cfg_t* cfg,
+ const isa_parser_t* isa,
std::vector<std::pair<reg_t, abstract_mem_t*>> mems,
std::string device_nodes)
{
+ reg_t initrd_start = cfg->initrd_bounds.first;
+ reg_t initrd_end = cfg->initrd_bounds.second;
+ const char* bootargs = cfg->bootargs;
+ reg_t pmpregions = cfg->pmpregions;
+ reg_t pmpgranularity = cfg->pmpgranularity;
+
std::stringstream s;
s << std::dec <<
"/dts-v1/;\n"
@@ -54,14 +57,14 @@ std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz,
" #address-cells = <1>;\n"
" #size-cells = <0>;\n"
" timebase-frequency = <" << (cpu_hz/insns_per_rtc_tick) << ">;\n";
- for (size_t i = 0; i < procs.size(); i++) {
+ for (size_t i = 0; i < cfg->nprocs(); i++) {
s << " CPU" << i << ": cpu@" << i << " {\n"
" device_type = \"cpu\";\n"
- " reg = <" << i << ">;\n"
+ " reg = <" << cfg->hartids[i] << ">;\n"
" status = \"okay\";\n"
" compatible = \"riscv\";\n"
- " riscv,isa = \"" << procs[i]->get_isa().get_isa_string() << "\";\n"
- " mmu-type = \"riscv," << (procs[i]->get_isa().get_max_xlen() <= 32 ? "sv32" : "sv57") << "\";\n"
+ " riscv,isa = \"" << isa->get_isa_string() << "\";\n"
+ " mmu-type = \"riscv," << (isa->get_max_xlen() <= 32 ? "sv32" : "sv57") << "\";\n"
" riscv,pmpregions = <" << pmpregions << ">;\n"
" riscv,pmpgranularity = <" << pmpgranularity << ">;\n"
" clock-frequency = <" << cpu_hz << ">;\n"
diff --git a/riscv/dts.h b/riscv/dts.h
index 7afe376..73c0a02 100644
--- a/riscv/dts.h
+++ b/riscv/dts.h
@@ -7,11 +7,8 @@
#include <string>
std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz,
- reg_t initrd_start, reg_t initrd_end,
- const char* bootargs,
- size_t pmpregions,
- size_t pmpgranularity,
- std::vector<processor_t*> procs,
+ const cfg_t* cfg,
+ const isa_parser_t* isa,
std::vector<std::pair<reg_t, abstract_mem_t*>> mems,
std::string device_nodes);
diff --git a/riscv/sim.cc b/riscv/sim.cc
index d08e274..3b46338 100644
--- a/riscv/sim.cc
+++ b/riscv/sim.cc
@@ -141,10 +141,7 @@ sim_t::sim_t(const cfg_t *cfg, bool halted,
const std::vector<std::string>& sargs = factory_sargs.second;
device_nodes.append(factory->generate_dts(this, sargs));
}
- dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ,
- initrd_bounds.first, initrd_bounds.second,
- cfg->bootargs, cfg->pmpregions, cfg->pmpgranularity,
- procs, mems, device_nodes);
+ dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ, cfg, &isa, mems, device_nodes);
dtb = dts_compile(dts);
}