summaryrefslogtreecommitdiffstats
path: root/hw/riscv/riscv_hart.c
diff options
context:
space:
mode:
authorBin Meng2020-09-01 03:38:57 +0200
committerAlistair Francis2020-09-10 00:54:18 +0200
commit4100d5e6dc28cdd89d3eec6e4ddeb9d1a159c330 (patch)
tree8976db8de135bd8097e8902b4c261d3988893ee5 /hw/riscv/riscv_hart.c
parenttarget/riscv: cpu: Add a new 'resetvec' property (diff)
downloadqemu-4100d5e6dc28cdd89d3eec6e4ddeb9d1a159c330.tar.gz
qemu-4100d5e6dc28cdd89d3eec6e4ddeb9d1a159c330.tar.xz
qemu-4100d5e6dc28cdd89d3eec6e4ddeb9d1a159c330.zip
hw/riscv: hart: Add a new 'resetvec' property
RISC-V machines do not instantiate RISC-V CPUs directly, instead they do that via the hart array. Add a new property for the reset vector address to allow the value to be passed to the CPU, before CPU is realized. Signed-off-by: Bin Meng <bin.meng@windriver.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <1598924352-89526-3-git-send-email-bmeng.cn@gmail.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Diffstat (limited to 'hw/riscv/riscv_hart.c')
-rw-r--r--hw/riscv/riscv_hart.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/hw/riscv/riscv_hart.c b/hw/riscv/riscv_hart.c
index f59fe52f0f..613ea2aaa0 100644
--- a/hw/riscv/riscv_hart.c
+++ b/hw/riscv/riscv_hart.c
@@ -31,6 +31,8 @@ static Property riscv_harts_props[] = {
DEFINE_PROP_UINT32("num-harts", RISCVHartArrayState, num_harts, 1),
DEFINE_PROP_UINT32("hartid-base", RISCVHartArrayState, hartid_base, 0),
DEFINE_PROP_STRING("cpu-type", RISCVHartArrayState, cpu_type),
+ DEFINE_PROP_UINT64("resetvec", RISCVHartArrayState, resetvec,
+ DEFAULT_RSTVEC),
DEFINE_PROP_END_OF_LIST(),
};
@@ -44,6 +46,7 @@ static bool riscv_hart_realize(RISCVHartArrayState *s, int idx,
char *cpu_type, Error **errp)
{
object_initialize_child(OBJECT(s), "harts[*]", &s->harts[idx], cpu_type);
+ qdev_prop_set_uint64(DEVICE(&s->harts[idx]), "resetvec", s->resetvec);
s->harts[idx].env.mhartid = s->hartid_base + idx;
qemu_register_reset(riscv_harts_cpu_reset, &s->harts[idx]);
return qdev_realize(DEVICE(&s->harts[idx]), NULL, errp);