|
13 | 13 | #include <sys/types.h>
|
14 | 14 |
|
15 | 15 | std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz,
|
16 |
| - reg_t initrd_start, reg_t initrd_end, |
17 |
| - const char* bootargs, |
18 |
| - size_t pmpregions, |
19 |
| - size_t pmpgranularity, |
20 |
| - std::vector<processor_t*> procs, |
| 16 | + const cfg_t* cfg, |
| 17 | + const isa_parser_t* isa, |
21 | 18 | std::vector<std::pair<reg_t, abstract_mem_t*>> mems,
|
22 | 19 | std::string device_nodes)
|
23 | 20 | {
|
| 21 | + reg_t initrd_start = cfg->initrd_bounds.first; |
| 22 | + reg_t initrd_end = cfg->initrd_bounds.second; |
| 23 | + const char* bootargs = cfg->bootargs; |
| 24 | + reg_t pmpregions = cfg->pmpregions; |
| 25 | + reg_t pmpgranularity = cfg->pmpgranularity; |
| 26 | + |
24 | 27 | std::stringstream s;
|
25 | 28 | s << std::dec <<
|
26 | 29 | "/dts-v1/;\n"
|
@@ -54,14 +57,14 @@ std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz,
|
54 | 57 | " #address-cells = <1>;\n"
|
55 | 58 | " #size-cells = <0>;\n"
|
56 | 59 | " timebase-frequency = <" << (cpu_hz/insns_per_rtc_tick) << ">;\n";
|
57 |
| - for (size_t i = 0; i < procs.size(); i++) { |
| 60 | + for (size_t i = 0; i < cfg->nprocs(); i++) { |
58 | 61 | s << " CPU" << i << ": cpu@" << i << " {\n"
|
59 | 62 | " device_type = \"cpu\";\n"
|
60 |
| - " reg = <" << i << ">;\n" |
| 63 | + " reg = <" << cfg->hartids[i] << ">;\n" |
61 | 64 | " status = \"okay\";\n"
|
62 | 65 | " compatible = \"riscv\";\n"
|
63 |
| - " riscv,isa = \"" << procs[i]->get_isa().get_isa_string() << "\";\n" |
64 |
| - " mmu-type = \"riscv," << (procs[i]->get_isa().get_max_xlen() <= 32 ? "sv32" : "sv57") << "\";\n" |
| 66 | + " riscv,isa = \"" << isa->get_isa_string() << "\";\n" |
| 67 | + " mmu-type = \"riscv," << (isa->get_max_xlen() <= 32 ? "sv32" : "sv57") << "\";\n" |
65 | 68 | " riscv,pmpregions = <" << pmpregions << ">;\n"
|
66 | 69 | " riscv,pmpgranularity = <" << pmpgranularity << ">;\n"
|
67 | 70 | " clock-frequency = <" << cpu_hz << ">;\n"
|
|
0 commit comments