On Sat, Aug 31, 2019 at 7:58 PM Bin Meng <bmeng...@gmail.com> wrote: > > At present each hart's hartid in a RISC-V hart array is assigned > the same value of its index in the hart array. But for a system > that has multiple hart arrays, this is not the case any more. > > Add a new "hartid-base" property so that hartid number can be > assigned based on the property value. > > Signed-off-by: Bin Meng <bmeng...@gmail.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > > --- > > Changes in v7: > - use `s->hartid_base + idx` directly > > Changes in v6: > - use s->hartid_base directly, instead of an extra variable > > Changes in v5: None > Changes in v4: > - new patch to add a "hartid-base" property to RISC-V hart array > > Changes in v3: None > Changes in v2: None > > hw/riscv/riscv_hart.c | 3 ++- > include/hw/riscv/riscv_hart.h | 1 + > 2 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/hw/riscv/riscv_hart.c b/hw/riscv/riscv_hart.c > index 9deef869..e28db80 100644 > --- a/hw/riscv/riscv_hart.c > +++ b/hw/riscv/riscv_hart.c > @@ -27,6 +27,7 @@ > > 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_END_OF_LIST(), > }; > @@ -45,7 +46,7 @@ static void riscv_hart_realize(RISCVHartArrayState *s, int > idx, > object_initialize_child(OBJECT(s), "harts[*]", &s->harts[idx], > sizeof(RISCVCPU), cpu_type, > &error_abort, NULL); > - s->harts[idx].env.mhartid = idx; > + s->harts[idx].env.mhartid = s->hartid_base + idx; > qemu_register_reset(riscv_harts_cpu_reset, &s->harts[idx]); > object_property_set_bool(OBJECT(&s->harts[idx]), true, > "realized", &err); > diff --git a/include/hw/riscv/riscv_hart.h b/include/hw/riscv/riscv_hart.h > index 0671d88..1984e30 100644 > --- a/include/hw/riscv/riscv_hart.h > +++ b/include/hw/riscv/riscv_hart.h > @@ -32,6 +32,7 @@ typedef struct RISCVHartArrayState { > > /*< public >*/ > uint32_t num_harts; > + uint32_t hartid_base; > char *cpu_type; > RISCVCPU *harts; > } RISCVHartArrayState; > -- > 2.7.4 > >