Skip to content

Commit

Permalink
LoongArch: KVM: add virt extioi cpu encode support
Browse files Browse the repository at this point in the history
Upstream: no

The extioi controller can send interrupts to only
four cpus and cannot send interrupts to other cpus.
This patch enables extioi to send interrupts to
a maximum of 256 cpus.

Signed-off-by: Xianglai Li <lixianglai@loongson.cn>
  • Loading branch information
lixianglai committed Feb 27, 2025
1 parent e519dcd commit 8e66951
Show file tree
Hide file tree
Showing 3 changed files with 254 additions and 69 deletions.
22 changes: 22 additions & 0 deletions arch/loongarch/include/asm/kvm_extioi.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,23 @@
#define EXTIOI_COREMAP_START 0x800
#define EXTIOI_COREMAP_END 0x8ff

#define EIOINTC_VIRT_BASE (0x40000000)
#define EIOINTC_VIRT_SIZE (0x1000)

#define EIOINTC_VIRT_FEATURES (0x0)
#define EIOINTC_HAS_VIRT_EXTENSION (0)
#define EIOINTC_HAS_ENABLE_OPTION (1)
#define EIOINTC_HAS_INT_ENCODE (2)
#define EIOINTC_HAS_CPU_ENCODE (3)
#define EIOINTC_VIRT_HAS_FEATURES ((1U << EIOINTC_HAS_VIRT_EXTENSION) \
| (1U << EIOINTC_HAS_ENABLE_OPTION) \
| (1U << EIOINTC_HAS_INT_ENCODE) \
| (1U << EIOINTC_HAS_CPU_ENCODE))
#define EIOINTC_VIRT_CONFIG (0x4)
#define EIOINTC_ENABLE (1)
#define EIOINTC_ENABLE_INT_ENCODE (2)
#define EIOINTC_ENABLE_CPU_ENCODE (3)

#define LS3A_INTC_IP 8

#define EXTIOI_SW_COREMAP_FLAG (1 << 0)
Expand All @@ -42,6 +59,11 @@ struct loongarch_extioi {
spinlock_t lock;
struct kvm *kvm;
struct kvm_io_device device;
struct kvm_io_device device_vext;
uint32_t num_cpu;
uint32_t features;
uint32_t status;

/* hardware state */
union nodetype {
u64 reg_u64[EXTIOI_IRQS_NODETYPE_COUNT / 4];
Expand Down
11 changes: 11 additions & 0 deletions arch/loongarch/include/uapi/asm/kvm.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,17 @@ struct kvm_iocsr_entry {

#define KVM_DEV_LOONGARCH_EXTIOI_GRP_REGS 0x40000003

#define KVM_DEV_LOONGARCH_EXTIOI_GRP_SW_STATUS 0x40000006
#define KVM_DEV_LOONGARCH_EXTIOI_SW_STATUS_NUM_CPU 0x0
#define KVM_DEV_LOONGARCH_EXTIOI_SW_STATUS_FEATURE 0x1
#define KVM_DEV_LOONGARCH_EXTIOI_SW_STATUS_STATE 0x2

#define KVM_DEV_LOONGARCH_EXTIOI_GRP_CTRL 0x40000007
#define KVM_DEV_LOONGARCH_EXTIOI_CTRL_INIT_NUM_CPU 0x0
#define KVM_DEV_LOONGARCH_EXTIOI_CTRL_INIT_FEATURE 0x1
#define KVM_DEV_LOONGARCH_EXTIOI_CTRL_LOAD_FINISHED 0x3


#define KVM_DEV_LOONGARCH_PCH_PIC_GRP_CTRL 0x40000004
#define KVM_DEV_LOONGARCH_PCH_PIC_CTRL_INIT 0

Expand Down
Loading

0 comments on commit 8e66951

Please sign in to comment.