diff options
author | Bin Meng | 2020-09-01 03:38:57 +0200 |
---|---|---|
committer | Alistair Francis | 2020-09-10 00:54:18 +0200 |
commit | 4100d5e6dc28cdd89d3eec6e4ddeb9d1a159c330 (patch) | |
tree | 8976db8de135bd8097e8902b4c261d3988893ee5 /hw/riscv/riscv_hart.c | |
parent | target/riscv: cpu: Add a new 'resetvec' property (diff) | |
download | qemu-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.c | 3 |
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); |