|
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