mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
hw/intc/loongarch_extioi: Add extioi virt extension definition
On LoongArch, IRQs can be routed to four vcpus with hardware extended IRQ model. This patch adds the virt extension definition so that the IRQ can route to 256 vcpus. 1.Extended IRQ model: | +-----------+ +-------------|--------+ +-----------+ | IPI/Timer | --> | CPUINTC(0-3)|(4-255) | <-- | IPI/Timer | +-----------+ +-------------|--------+ +-----------+ ^ | | +---------+ | EIOINTC | +---------+ ^ ^ | | +---------+ +---------+ | PCH-PIC | | PCH-MSI | +---------+ +---------+ ^ ^ ^ | | | +--------+ +---------+ +---------+ | UARTs | | Devices | | Devices | +--------+ +---------+ +---------+ 2.Virt extended IRQ model: +-----+ +---------------+ +-------+ | IPI |--> | CPUINTC(0-255)| <-- | Timer | +-----+ +---------------+ +-------+ ^ | +-----------+ | V-EIOINTC | +-----------+ ^ ^ | | +---------+ +---------+ | PCH-PIC | | PCH-MSI | +---------+ +---------+ ^ ^ ^ | | | +--------+ +---------+ +---------+ | UARTs | | Devices | | Devices | +--------+ +---------+ +---------+ Signed-off-by: Song Gao <gaosong@loongson.cn> Reviewed-by: Bibo Mao <maobibo@loongson.cn> Message-Id: <20240528083855.1912757-2-gaosong@loongson.cn>
This commit is contained in:
parent
a73f7a00ee
commit
dc6f37eb95
3 changed files with 146 additions and 23 deletions
|
@ -41,6 +41,24 @@
|
|||
#define EXTIOI_COREMAP_END (0xD00 - APIC_OFFSET)
|
||||
#define EXTIOI_SIZE 0x800
|
||||
|
||||
#define EXTIOI_VIRT_BASE (0x40000000)
|
||||
#define EXTIOI_VIRT_SIZE (0x1000)
|
||||
#define EXTIOI_VIRT_FEATURES (0x0)
|
||||
#define EXTIOI_HAS_VIRT_EXTENSION (0)
|
||||
#define EXTIOI_HAS_ENABLE_OPTION (1)
|
||||
#define EXTIOI_HAS_INT_ENCODE (2)
|
||||
#define EXTIOI_HAS_CPU_ENCODE (3)
|
||||
#define EXTIOI_VIRT_HAS_FEATURES (BIT(EXTIOI_HAS_VIRT_EXTENSION) \
|
||||
| BIT(EXTIOI_HAS_ENABLE_OPTION) \
|
||||
| BIT(EXTIOI_HAS_INT_ENCODE) \
|
||||
| BIT(EXTIOI_HAS_CPU_ENCODE))
|
||||
#define EXTIOI_VIRT_CONFIG (0x4)
|
||||
#define EXTIOI_ENABLE (1)
|
||||
#define EXTIOI_ENABLE_INT_ENCODE (2)
|
||||
#define EXTIOI_ENABLE_CPU_ENCODE (3)
|
||||
#define EXTIOI_VIRT_COREMAP_START (0x40)
|
||||
#define EXTIOI_VIRT_COREMAP_END (0x240)
|
||||
|
||||
typedef struct ExtIOICore {
|
||||
uint32_t coreisr[EXTIOI_IRQS_GROUP_COUNT];
|
||||
DECLARE_BITMAP(sw_isr[LS3A_INTC_IP], EXTIOI_IRQS);
|
||||
|
@ -52,6 +70,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(LoongArchExtIOI, LOONGARCH_EXTIOI)
|
|||
struct LoongArchExtIOI {
|
||||
SysBusDevice parent_obj;
|
||||
uint32_t num_cpu;
|
||||
uint32_t features;
|
||||
uint32_t status;
|
||||
/* hardware state */
|
||||
uint32_t nodetype[EXTIOI_IRQS_NODETYPE_COUNT / 2];
|
||||
uint32_t bounce[EXTIOI_IRQS_GROUP_COUNT];
|
||||
|
@ -65,5 +85,6 @@ struct LoongArchExtIOI {
|
|||
qemu_irq irq[EXTIOI_IRQS];
|
||||
ExtIOICore *cpu;
|
||||
MemoryRegion extioi_system_mem;
|
||||
MemoryRegion virt_extend;
|
||||
};
|
||||
#endif /* LOONGARCH_EXTIOI_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue