Message ID | 20230712163943.98994-4-sunilvl@ventanamicro.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | RISC-V: ACPI: Enable AIA and update RHC | expand |
On 7/12/23 13:39, Sunil V L wrote: > Some macros and static function related to IMSIC are defined > in virt.c. They are required in virt-acpi-build.c. So, make them > public. > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> > --- Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> > hw/riscv/virt.c | 25 +------------------------ > include/hw/riscv/virt.h | 25 +++++++++++++++++++++++++ > 2 files changed, 26 insertions(+), 24 deletions(-) > > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index 46d3341113..f6067db8ec 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -37,7 +37,6 @@ > #include "hw/riscv/numa.h" > #include "hw/intc/riscv_aclint.h" > #include "hw/intc/riscv_aplic.h" > -#include "hw/intc/riscv_imsic.h" > #include "hw/intc/sifive_plic.h" > #include "hw/misc/sifive_test.h" > #include "hw/platform-bus.h" > @@ -53,28 +52,6 @@ > #include "hw/acpi/aml-build.h" > #include "qapi/qapi-visit-common.h" > > -/* > - * The virt machine physical address space used by some of the devices > - * namely ACLINT, PLIC, APLIC, and IMSIC depend on number of Sockets, > - * number of CPUs, and number of IMSIC guest files. > - * > - * Various limits defined by VIRT_SOCKETS_MAX_BITS, VIRT_CPUS_MAX_BITS, > - * and VIRT_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization > - * of virt machine physical address space. > - */ > - > -#define VIRT_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHIFT) > -#if VIRT_IMSIC_GROUP_MAX_SIZE < \ > - IMSIC_GROUP_SIZE(VIRT_CPUS_MAX_BITS, VIRT_IRQCHIP_MAX_GUESTS_BITS) > -#error "Can't accomodate single IMSIC group in address space" > -#endif > - > -#define VIRT_IMSIC_MAX_SIZE (VIRT_SOCKETS_MAX * \ > - VIRT_IMSIC_GROUP_MAX_SIZE) > -#if 0x4000000 < VIRT_IMSIC_MAX_SIZE > -#error "Can't accomodate all IMSIC groups in address space" > -#endif > - > static const MemMapEntry virt_memmap[] = { > [VIRT_DEBUG] = { 0x0, 0x100 }, > [VIRT_MROM] = { 0x1000, 0xf000 }, > @@ -505,7 +482,7 @@ static void create_fdt_socket_plic(RISCVVirtState *s, > g_free(plic_cells); > } > > -static uint32_t imsic_num_bits(uint32_t count) > +uint32_t imsic_num_bits(uint32_t count) > { > uint32_t ret = 0; > > diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h > index 4ef1f660ab..00c22492a7 100644 > --- a/include/hw/riscv/virt.h > +++ b/include/hw/riscv/virt.h > @@ -23,6 +23,7 @@ > #include "hw/riscv/riscv_hart.h" > #include "hw/sysbus.h" > #include "hw/block/flash.h" > +#include "hw/intc/riscv_imsic.h" > > #define VIRT_CPUS_MAX_BITS 9 > #define VIRT_CPUS_MAX (1 << VIRT_CPUS_MAX_BITS) > @@ -128,4 +129,28 @@ enum { > > bool virt_is_acpi_enabled(RISCVVirtState *s); > void virt_acpi_setup(RISCVVirtState *vms); > +uint32_t imsic_num_bits(uint32_t count); > + > +/* > + * The virt machine physical address space used by some of the devices > + * namely ACLINT, PLIC, APLIC, and IMSIC depend on number of Sockets, > + * number of CPUs, and number of IMSIC guest files. > + * > + * Various limits defined by VIRT_SOCKETS_MAX_BITS, VIRT_CPUS_MAX_BITS, > + * and VIRT_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization > + * of virt machine physical address space. > + */ > + > +#define VIRT_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHIFT) > +#if VIRT_IMSIC_GROUP_MAX_SIZE < \ > + IMSIC_GROUP_SIZE(VIRT_CPUS_MAX_BITS, VIRT_IRQCHIP_MAX_GUESTS_BITS) > +#error "Can't accomodate single IMSIC group in address space" > +#endif > + > +#define VIRT_IMSIC_MAX_SIZE (VIRT_SOCKETS_MAX * \ > + VIRT_IMSIC_GROUP_MAX_SIZE) > +#if 0x4000000 < VIRT_IMSIC_MAX_SIZE > +#error "Can't accomodate all IMSIC groups in address space" > +#endif > + > #endif
On Thu, Jul 13, 2023 at 2:42 AM Sunil V L <sunilvl@ventanamicro.com> wrote: > > Some macros and static function related to IMSIC are defined > in virt.c. They are required in virt-acpi-build.c. So, make them > public. > > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Alistair > --- > hw/riscv/virt.c | 25 +------------------------ > include/hw/riscv/virt.h | 25 +++++++++++++++++++++++++ > 2 files changed, 26 insertions(+), 24 deletions(-) > > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index 46d3341113..f6067db8ec 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -37,7 +37,6 @@ > #include "hw/riscv/numa.h" > #include "hw/intc/riscv_aclint.h" > #include "hw/intc/riscv_aplic.h" > -#include "hw/intc/riscv_imsic.h" > #include "hw/intc/sifive_plic.h" > #include "hw/misc/sifive_test.h" > #include "hw/platform-bus.h" > @@ -53,28 +52,6 @@ > #include "hw/acpi/aml-build.h" > #include "qapi/qapi-visit-common.h" > > -/* > - * The virt machine physical address space used by some of the devices > - * namely ACLINT, PLIC, APLIC, and IMSIC depend on number of Sockets, > - * number of CPUs, and number of IMSIC guest files. > - * > - * Various limits defined by VIRT_SOCKETS_MAX_BITS, VIRT_CPUS_MAX_BITS, > - * and VIRT_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization > - * of virt machine physical address space. > - */ > - > -#define VIRT_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHIFT) > -#if VIRT_IMSIC_GROUP_MAX_SIZE < \ > - IMSIC_GROUP_SIZE(VIRT_CPUS_MAX_BITS, VIRT_IRQCHIP_MAX_GUESTS_BITS) > -#error "Can't accomodate single IMSIC group in address space" > -#endif > - > -#define VIRT_IMSIC_MAX_SIZE (VIRT_SOCKETS_MAX * \ > - VIRT_IMSIC_GROUP_MAX_SIZE) > -#if 0x4000000 < VIRT_IMSIC_MAX_SIZE > -#error "Can't accomodate all IMSIC groups in address space" > -#endif > - > static const MemMapEntry virt_memmap[] = { > [VIRT_DEBUG] = { 0x0, 0x100 }, > [VIRT_MROM] = { 0x1000, 0xf000 }, > @@ -505,7 +482,7 @@ static void create_fdt_socket_plic(RISCVVirtState *s, > g_free(plic_cells); > } > > -static uint32_t imsic_num_bits(uint32_t count) > +uint32_t imsic_num_bits(uint32_t count) > { > uint32_t ret = 0; > > diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h > index 4ef1f660ab..00c22492a7 100644 > --- a/include/hw/riscv/virt.h > +++ b/include/hw/riscv/virt.h > @@ -23,6 +23,7 @@ > #include "hw/riscv/riscv_hart.h" > #include "hw/sysbus.h" > #include "hw/block/flash.h" > +#include "hw/intc/riscv_imsic.h" > > #define VIRT_CPUS_MAX_BITS 9 > #define VIRT_CPUS_MAX (1 << VIRT_CPUS_MAX_BITS) > @@ -128,4 +129,28 @@ enum { > > bool virt_is_acpi_enabled(RISCVVirtState *s); > void virt_acpi_setup(RISCVVirtState *vms); > +uint32_t imsic_num_bits(uint32_t count); > + > +/* > + * The virt machine physical address space used by some of the devices > + * namely ACLINT, PLIC, APLIC, and IMSIC depend on number of Sockets, > + * number of CPUs, and number of IMSIC guest files. > + * > + * Various limits defined by VIRT_SOCKETS_MAX_BITS, VIRT_CPUS_MAX_BITS, > + * and VIRT_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization > + * of virt machine physical address space. > + */ > + > +#define VIRT_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHIFT) > +#if VIRT_IMSIC_GROUP_MAX_SIZE < \ > + IMSIC_GROUP_SIZE(VIRT_CPUS_MAX_BITS, VIRT_IRQCHIP_MAX_GUESTS_BITS) > +#error "Can't accomodate single IMSIC group in address space" > +#endif > + > +#define VIRT_IMSIC_MAX_SIZE (VIRT_SOCKETS_MAX * \ > + VIRT_IMSIC_GROUP_MAX_SIZE) > +#if 0x4000000 < VIRT_IMSIC_MAX_SIZE > +#error "Can't accomodate all IMSIC groups in address space" > +#endif > + > #endif > -- > 2.39.2 > >
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 46d3341113..f6067db8ec 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -37,7 +37,6 @@ #include "hw/riscv/numa.h" #include "hw/intc/riscv_aclint.h" #include "hw/intc/riscv_aplic.h" -#include "hw/intc/riscv_imsic.h" #include "hw/intc/sifive_plic.h" #include "hw/misc/sifive_test.h" #include "hw/platform-bus.h" @@ -53,28 +52,6 @@ #include "hw/acpi/aml-build.h" #include "qapi/qapi-visit-common.h" -/* - * The virt machine physical address space used by some of the devices - * namely ACLINT, PLIC, APLIC, and IMSIC depend on number of Sockets, - * number of CPUs, and number of IMSIC guest files. - * - * Various limits defined by VIRT_SOCKETS_MAX_BITS, VIRT_CPUS_MAX_BITS, - * and VIRT_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization - * of virt machine physical address space. - */ - -#define VIRT_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHIFT) -#if VIRT_IMSIC_GROUP_MAX_SIZE < \ - IMSIC_GROUP_SIZE(VIRT_CPUS_MAX_BITS, VIRT_IRQCHIP_MAX_GUESTS_BITS) -#error "Can't accomodate single IMSIC group in address space" -#endif - -#define VIRT_IMSIC_MAX_SIZE (VIRT_SOCKETS_MAX * \ - VIRT_IMSIC_GROUP_MAX_SIZE) -#if 0x4000000 < VIRT_IMSIC_MAX_SIZE -#error "Can't accomodate all IMSIC groups in address space" -#endif - static const MemMapEntry virt_memmap[] = { [VIRT_DEBUG] = { 0x0, 0x100 }, [VIRT_MROM] = { 0x1000, 0xf000 }, @@ -505,7 +482,7 @@ static void create_fdt_socket_plic(RISCVVirtState *s, g_free(plic_cells); } -static uint32_t imsic_num_bits(uint32_t count) +uint32_t imsic_num_bits(uint32_t count) { uint32_t ret = 0; diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 4ef1f660ab..00c22492a7 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -23,6 +23,7 @@ #include "hw/riscv/riscv_hart.h" #include "hw/sysbus.h" #include "hw/block/flash.h" +#include "hw/intc/riscv_imsic.h" #define VIRT_CPUS_MAX_BITS 9 #define VIRT_CPUS_MAX (1 << VIRT_CPUS_MAX_BITS) @@ -128,4 +129,28 @@ enum { bool virt_is_acpi_enabled(RISCVVirtState *s); void virt_acpi_setup(RISCVVirtState *vms); +uint32_t imsic_num_bits(uint32_t count); + +/* + * The virt machine physical address space used by some of the devices + * namely ACLINT, PLIC, APLIC, and IMSIC depend on number of Sockets, + * number of CPUs, and number of IMSIC guest files. + * + * Various limits defined by VIRT_SOCKETS_MAX_BITS, VIRT_CPUS_MAX_BITS, + * and VIRT_IRQCHIP_MAX_GUESTS_BITS are tuned for maximum utilization + * of virt machine physical address space. + */ + +#define VIRT_IMSIC_GROUP_MAX_SIZE (1U << IMSIC_MMIO_GROUP_MIN_SHIFT) +#if VIRT_IMSIC_GROUP_MAX_SIZE < \ + IMSIC_GROUP_SIZE(VIRT_CPUS_MAX_BITS, VIRT_IRQCHIP_MAX_GUESTS_BITS) +#error "Can't accomodate single IMSIC group in address space" +#endif + +#define VIRT_IMSIC_MAX_SIZE (VIRT_SOCKETS_MAX * \ + VIRT_IMSIC_GROUP_MAX_SIZE) +#if 0x4000000 < VIRT_IMSIC_MAX_SIZE +#error "Can't accomodate all IMSIC groups in address space" +#endif + #endif
Some macros and static function related to IMSIC are defined in virt.c. They are required in virt-acpi-build.c. So, make them public. Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> --- hw/riscv/virt.c | 25 +------------------------ include/hw/riscv/virt.h | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 24 deletions(-)