diff options
author | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-04-27 21:16:21 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2020-05-19 19:56:55 -0700 |
commit | cf0fc9b5b25566da1689c24e07871bf91aa00a44 (patch) | |
tree | cba07f628f215b420b9b54645fa928d099aeedbf /riscv/dts.cc | |
parent | 1def3e9a740a609f4363c96c153ab96699a38671 (diff) | |
download | spike-cf0fc9b5b25566da1689c24e07871bf91aa00a44.zip spike-cf0fc9b5b25566da1689c24e07871bf91aa00a44.tar.gz spike-cf0fc9b5b25566da1689c24e07871bf91aa00a44.tar.bz2 |
fdt: add pmp parsing helper
Signed-off-by: Chih-Min Chao <chihmin.chao@sifive.com>
Diffstat (limited to 'riscv/dts.cc')
-rw-r--r-- | riscv/dts.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/riscv/dts.cc b/riscv/dts.cc index c9daa96..3257976 100644 --- a/riscv/dts.cc +++ b/riscv/dts.cc @@ -44,6 +44,7 @@ std::string make_dts(size_t insns_per_rtc_tick, size_t cpu_hz, " compatible = \"riscv\";\n" " riscv,isa = \"" << procs[i]->get_isa_string() << "\";\n" " mmu-type = \"riscv," << (procs[i]->get_max_xlen() <= 32 ? "sv32" : "sv48") << "\";\n" + " riscv,pmpregions = <16>;\n" " clock-frequency = <" << cpu_hz << ">;\n" " CPU" << i << "_intc: interrupt-controller {\n" " #interrupt-cells = <1>;\n" @@ -227,3 +228,18 @@ int fdt_parse_clint(void *fdt, unsigned long *clint_addr, return 0; } + +int fdt_parse_pmp(void *fdt, unsigned long *pmp_num, 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, pmp_num, NULL, "riscv,pmpregions"); + if (rc < 0 || !pmp_num) + return -ENODEV; + + return 0; +} |