Message ID | 20211211041917.135345-17-anup.patel@wdc.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | QEMU RISC-V AIA support | expand |
On Fri, Dec 10, 2021 at 8:35 PM Anup Patel <anup.patel@wdc.com> wrote: > > We should use the AIA INTC compatible string in the CPU INTC > DT nodes when the CPUs support AIA feature. This will allow > Linux INTC driver to use AIA local interrupt CSRs. > > Signed-off-by: Anup Patel <anup.patel@wdc.com> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > --- > hw/riscv/virt.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index 3af074148e..936156554c 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -211,8 +211,17 @@ static void create_fdt_socket_cpus(RISCVVirtState *s, int socket, > qemu_fdt_add_subnode(mc->fdt, intc_name); > qemu_fdt_setprop_cell(mc->fdt, intc_name, "phandle", > intc_phandles[cpu]); > - qemu_fdt_setprop_string(mc->fdt, intc_name, "compatible", > - "riscv,cpu-intc"); > + if (riscv_feature(&s->soc[socket].harts[cpu].env, > + RISCV_FEATURE_AIA)) { > + static const char * const compat[2] = { > + "riscv,cpu-intc-aia", "riscv,cpu-intc" > + }; > + qemu_fdt_setprop_string_array(mc->fdt, name, "compatible", > + (char **)&compat, ARRAY_SIZE(compat)); I think this should be intc_name rather than name. Kip > + } else { > + qemu_fdt_setprop_string(mc->fdt, intc_name, "compatible", > + "riscv,cpu-intc"); > + } > qemu_fdt_setprop(mc->fdt, intc_name, "interrupt-controller", NULL, 0); > qemu_fdt_setprop_cell(mc->fdt, intc_name, "#interrupt-cells", 1); > > -- > 2.25.1 > >
On Wed, Dec 15, 2021 at 6:38 AM Kip Walker <kip@rivosinc.com> wrote: > > On Fri, Dec 10, 2021 at 8:35 PM Anup Patel <anup.patel@wdc.com> wrote: > > > > We should use the AIA INTC compatible string in the CPU INTC > > DT nodes when the CPUs support AIA feature. This will allow > > Linux INTC driver to use AIA local interrupt CSRs. > > > > Signed-off-by: Anup Patel <anup.patel@wdc.com> > > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > > --- > > hw/riscv/virt.c | 13 +++++++++++-- > > 1 file changed, 11 insertions(+), 2 deletions(-) > > > > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > > index 3af074148e..936156554c 100644 > > --- a/hw/riscv/virt.c > > +++ b/hw/riscv/virt.c > > @@ -211,8 +211,17 @@ static void create_fdt_socket_cpus(RISCVVirtState *s, int socket, > > qemu_fdt_add_subnode(mc->fdt, intc_name); > > qemu_fdt_setprop_cell(mc->fdt, intc_name, "phandle", > > intc_phandles[cpu]); > > - qemu_fdt_setprop_string(mc->fdt, intc_name, "compatible", > > - "riscv,cpu-intc"); > > + if (riscv_feature(&s->soc[socket].harts[cpu].env, > > + RISCV_FEATURE_AIA)) { > > + static const char * const compat[2] = { > > + "riscv,cpu-intc-aia", "riscv,cpu-intc" > > + }; > > + qemu_fdt_setprop_string_array(mc->fdt, name, "compatible", > > + (char **)&compat, ARRAY_SIZE(compat)); > > I think this should be intc_name rather than name. Ahh, good catch. I will fix this typo in the next revision. Thanks, Anup > > Kip > > > + } else { > > + qemu_fdt_setprop_string(mc->fdt, intc_name, "compatible", > > + "riscv,cpu-intc"); > > + } > > qemu_fdt_setprop(mc->fdt, intc_name, "interrupt-controller", NULL, 0); > > qemu_fdt_setprop_cell(mc->fdt, intc_name, "#interrupt-cells", 1); > > > > -- > > 2.25.1 > > > >
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 3af074148e..936156554c 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -211,8 +211,17 @@ static void create_fdt_socket_cpus(RISCVVirtState *s, int socket, qemu_fdt_add_subnode(mc->fdt, intc_name); qemu_fdt_setprop_cell(mc->fdt, intc_name, "phandle", intc_phandles[cpu]); - qemu_fdt_setprop_string(mc->fdt, intc_name, "compatible", - "riscv,cpu-intc"); + if (riscv_feature(&s->soc[socket].harts[cpu].env, + RISCV_FEATURE_AIA)) { + static const char * const compat[2] = { + "riscv,cpu-intc-aia", "riscv,cpu-intc" + }; + qemu_fdt_setprop_string_array(mc->fdt, name, "compatible", + (char **)&compat, ARRAY_SIZE(compat)); + } else { + qemu_fdt_setprop_string(mc->fdt, intc_name, "compatible", + "riscv,cpu-intc"); + } qemu_fdt_setprop(mc->fdt, intc_name, "interrupt-controller", NULL, 0); qemu_fdt_setprop_cell(mc->fdt, intc_name, "#interrupt-cells", 1);