Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/hw/arm/virt.c b/hw/arm/virt.c
- index 2972bb3..47caea2 100644
- --- a/hw/arm/virt.c
- +++ b/hw/arm/virt.c
- @@ -67,6 +67,8 @@ enum {
- VIRT_CPUPERIPHS,
- VIRT_GIC_DIST,
- VIRT_GIC_CPU,
- + VIRT_GIC_VDIST,
- + VIRT_GIC_VCPU,
- VIRT_UART,
- VIRT_MMIO,
- VIRT_RTC,
- @@ -130,6 +132,8 @@ static const MemMapEntry a15memmap[] = {
- /* GIC distributor and CPU interfaces sit inside the CPU peripheral space */
- [VIRT_GIC_DIST] = { 0x08000000, 0x00010000 },
- [VIRT_GIC_CPU] = { 0x08010000, 0x00010000 },
- + [VIRT_GIC_VDIST] = { 0x08030000, 0x00010000 },
- + [VIRT_GIC_VCPU] = { 0x08010000, 0x00010000 },
- [VIRT_GIC_V2M] = { 0x08020000, 0x00001000 },
- [VIRT_UART] = { 0x09000000, 0x00001000 },
- [VIRT_RTC] = { 0x09010000, 0x00001000 },
- @@ -356,12 +360,20 @@ static void fdt_add_gic_node(VirtBoardInfo *vbi)
- 2, vbi->memmap[VIRT_GIC_DIST].base,
- 2, vbi->memmap[VIRT_GIC_DIST].size,
- 2, vbi->memmap[VIRT_GIC_CPU].base,
- - 2, vbi->memmap[VIRT_GIC_CPU].size);
- + 2, vbi->memmap[VIRT_GIC_CPU].size,
- + 2, vbi->memmap[VIRT_GIC_VDIST].base,
- + 2, vbi->memmap[VIRT_GIC_VDIST].size,
- + 2, vbi->memmap[VIRT_GIC_VCPU].base,
- + 2, vbi->memmap[VIRT_GIC_VCPU].size);
- qemu_fdt_setprop_cell(vbi->fdt, "/intc", "#address-cells", 0x2);
- qemu_fdt_setprop_cell(vbi->fdt, "/intc", "#size-cells", 0x2);
- qemu_fdt_setprop(vbi->fdt, "/intc", "ranges", NULL, 0);
- qemu_fdt_setprop_cell(vbi->fdt, "/intc", "phandle", vbi->gic_phandle);
- + qemu_fdt_setprop_cells(vbi->fdt, "/intc", "interrupts",
- + GIC_FDT_IRQ_TYPE_PPI, 9,
- + GIC_FDT_IRQ_FLAGS_LEVEL_HI | 0xf00);
- +
- }
- static void create_v2m(VirtBoardInfo *vbi, qemu_irq *pic)
- diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c
- index 2cb7d25..5ee0102 100644
- --- a/hw/intc/arm_gic_kvm.c
- +++ b/hw/intc/arm_gic_kvm.c
- @@ -625,6 +625,7 @@ static void kvm_arm_gic_realize(DeviceState *dev, Error **errp)
- KVM_DEV_ARM_VGIC_GRP_ADDR,
- KVM_VGIC_V2_ADDR_TYPE_CPU,
- s->dev_fd);
- +
- }
- static void kvm_arm_gic_class_init(ObjectClass *klass, void *data)
- diff --git a/kvm-all.c b/kvm-all.c
- index b2b1bc3..c9761b5 100644
- --- a/kvm-all.c
- +++ b/kvm-all.c
- @@ -968,6 +968,8 @@ int kvm_set_irq(KVMState *s, int irq, int level)
- event.level = level;
- event.irq = irq;
- + if ((irq & KVM_ARM_IRQ_NUM_MASK) != 33)
- + printf("%s IRQ: %d\n", __func__, irq & KVM_ARM_IRQ_NUM_MASK);
- ret = kvm_vm_ioctl(s, s->irq_set_ioctl, &event);
- if (ret < 0) {
- perror("kvm_set_irq");
- @@ -1968,6 +1970,7 @@ int kvm_device_ioctl(int fd, int type, ...)
- trace_kvm_device_ioctl(fd, type, arg);
- ret = ioctl(fd, type, arg);
- if (ret == -1) {
- + printf("%s\n", __func__);
- ret = -errno;
- }
- return ret;
- diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h
- index c8abf25..ab3353d 100644
- --- a/linux-headers/asm-arm64/kvm.h
- +++ b/linux-headers/asm-arm64/kvm.h
- @@ -75,6 +75,9 @@ struct kvm_regs {
- #define KVM_VGIC_V2_ADDR_TYPE_DIST 0
- #define KVM_VGIC_V2_ADDR_TYPE_CPU 1
- +#define KVM_VGIC_V2_ADDR_TYPE_VDIST 4
- +#define KVM_VGIC_V2_ADDR_TYPE_VCPU 5
- +
- #define KVM_VGIC_V2_DIST_SIZE 0x1000
- #define KVM_VGIC_V2_CPU_SIZE 0x2000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement