diff options
author | Dave.Wen <dave.wen@sifive.com> | 2020-05-20 07:11:31 -0700 |
---|---|---|
committer | Dave.Wen <dave.wen@sifive.com> | 2020-05-20 08:01:59 -0700 |
commit | 5720fb6d79c67d4a18de367aa546a1728202a407 (patch) | |
tree | 432622bccb5634d7dd39bae2545d560ecb58dcf9 /riscv/dts.cc | |
parent | 1c558aa3a1d40d689230002bc2d7b7f299b66978 (diff) | |
download | spike-5720fb6d79c67d4a18de367aa546a1728202a407.zip spike-5720fb6d79c67d4a18de367aa546a1728202a407.tar.gz spike-5720fb6d79c67d4a18de367aa546a1728202a407.tar.bz2 |
add configurable LR/SC reservation set
Diffstat (limited to 'riscv/dts.cc')
-rw-r--r-- | riscv/dts.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/riscv/dts.cc b/riscv/dts.cc index 6a38ba0..01444ec 100644 --- a/riscv/dts.cc +++ b/riscv/dts.cc @@ -40,6 +40,7 @@ std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz, s << " CPU" << i << ": cpu@" << i << " {\n" " device_type = \"cpu\";\n" " reg = <" << i << ">;\n" + " reservation-set-size = <64>;\n" " status = \"okay\";\n" " compatible = \"riscv\";\n" " riscv,isa = \"" << procs[i]->get_isa_string() << "\";\n" @@ -169,7 +170,6 @@ std::string dts_compile(const std::string& dts) return dtb.str(); } - static int fdt_get_node_addr_size(void *fdt, int node, reg_t *addr, unsigned long *size, const char *field) { @@ -246,6 +246,23 @@ int fdt_parse_pmp_num(void *fdt, reg_t *pmp_num, const char *compatible) return 0; } +int fdt_parse_reservation_set_size(void *fdt, reg_t *reservation_set_size, + const char *compatible) +{ + int nodeoffset, rc; + + nodeoffset = fdt_node_offset_by_compatible(fdt, -1, compatible); + if (nodeoffset < 0) + return nodeoffset; + + rc = fdt_get_node_addr_size(fdt, nodeoffset, reservation_set_size, NULL, + "reservation-set-size"); + if (rc < 0 || !reservation_set_size) + return -ENODEV; + + return 0; +} + int fdt_parse_pmp_alignment(void *fdt, reg_t *pmp_align, const char *compatible) { |