|
@@ -62,16 +62,17 @@ bool vgic_supports_direct_msis(struct kvm *kvm)
|
|
|
static unsigned long vgic_mmio_read_v3_misc(struct kvm_vcpu *vcpu,
|
|
|
gpa_t addr, unsigned int len)
|
|
|
{
|
|
|
+ struct vgic_dist *vgic = &vcpu->kvm->arch.vgic;
|
|
|
u32 value = 0;
|
|
|
|
|
|
switch (addr & 0x0c) {
|
|
|
case GICD_CTLR:
|
|
|
- if (vcpu->kvm->arch.vgic.enabled)
|
|
|
+ if (vgic->enabled)
|
|
|
value |= GICD_CTLR_ENABLE_SS_G1;
|
|
|
value |= GICD_CTLR_ARE_NS | GICD_CTLR_DS;
|
|
|
break;
|
|
|
case GICD_TYPER:
|
|
|
- value = vcpu->kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
|
|
|
+ value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS;
|
|
|
value = (value >> 5) - 1;
|
|
|
if (vgic_has_its(vcpu->kvm)) {
|
|
|
value |= (INTERRUPT_ID_BITS_ITS - 1) << 19;
|
|
@@ -82,6 +83,7 @@ static unsigned long vgic_mmio_read_v3_misc(struct kvm_vcpu *vcpu,
|
|
|
break;
|
|
|
case GICD_IIDR:
|
|
|
value = (PRODUCT_ID_KVM << GICD_IIDR_PRODUCT_ID_SHIFT) |
|
|
|
+ (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) |
|
|
|
(IMPLEMENTER_ARM << GICD_IIDR_IMPLEMENTER_SHIFT);
|
|
|
break;
|
|
|
default:
|