mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
hw/riscv: virt: Make few IMSIC macros and functions public
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> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Message-ID: <20231218150247.466427-5-sunilvl@ventanamicro.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
8199bf48ea
commit
68c8b403c7
2 changed files with 26 additions and 24 deletions
|
@ -38,7 +38,6 @@
|
||||||
#include "kvm/kvm_riscv.h"
|
#include "kvm/kvm_riscv.h"
|
||||||
#include "hw/intc/riscv_aclint.h"
|
#include "hw/intc/riscv_aclint.h"
|
||||||
#include "hw/intc/riscv_aplic.h"
|
#include "hw/intc/riscv_aplic.h"
|
||||||
#include "hw/intc/riscv_imsic.h"
|
|
||||||
#include "hw/intc/sifive_plic.h"
|
#include "hw/intc/sifive_plic.h"
|
||||||
#include "hw/misc/sifive_test.h"
|
#include "hw/misc/sifive_test.h"
|
||||||
#include "hw/platform-bus.h"
|
#include "hw/platform-bus.h"
|
||||||
|
@ -54,28 +53,6 @@
|
||||||
#include "hw/acpi/aml-build.h"
|
#include "hw/acpi/aml-build.h"
|
||||||
#include "qapi/qapi-visit-common.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 accommodate 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 accommodate all IMSIC groups in address space"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* KVM AIA only supports APLIC MSI. APLIC Wired is always emulated by QEMU. */
|
/* KVM AIA only supports APLIC MSI. APLIC Wired is always emulated by QEMU. */
|
||||||
static bool virt_use_kvm_aia(RISCVVirtState *s)
|
static bool virt_use_kvm_aia(RISCVVirtState *s)
|
||||||
{
|
{
|
||||||
|
@ -512,7 +489,7 @@ static void create_fdt_socket_plic(RISCVVirtState *s,
|
||||||
g_free(plic_cells);
|
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;
|
uint32_t ret = 0;
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "hw/riscv/riscv_hart.h"
|
#include "hw/riscv/riscv_hart.h"
|
||||||
#include "hw/sysbus.h"
|
#include "hw/sysbus.h"
|
||||||
#include "hw/block/flash.h"
|
#include "hw/block/flash.h"
|
||||||
|
#include "hw/intc/riscv_imsic.h"
|
||||||
|
|
||||||
#define VIRT_CPUS_MAX_BITS 9
|
#define VIRT_CPUS_MAX_BITS 9
|
||||||
#define VIRT_CPUS_MAX (1 << VIRT_CPUS_MAX_BITS)
|
#define VIRT_CPUS_MAX (1 << VIRT_CPUS_MAX_BITS)
|
||||||
|
@ -127,4 +128,28 @@ enum {
|
||||||
|
|
||||||
bool virt_is_acpi_enabled(RISCVVirtState *s);
|
bool virt_is_acpi_enabled(RISCVVirtState *s);
|
||||||
void virt_acpi_setup(RISCVVirtState *vms);
|
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
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue