Message ID | 20180305160415.16760-56-andre.przywara@linaro.org |
---|---|
State | New |
Headers | show |
Series | New VGIC(-v2) implementation | expand |
Hi Andre, On 05/03/18 16:04, Andre Przywara wrote: > Enable the VGIC operation by properly initialising the registers > in the hypervisor GIC interface. > > This is based on Linux commit f7b6985cc3d0, written by Eric Auger. > > Signed-off-by: Andre Przywara <andre.przywara@linaro.org> Would you mind to move that patch before #53? This feels more logical as the first user in there. > --- > Changelog RFC ... v1: > - drop unneeded vgic_vmcr initialization > - use update_hcr_status wrapper > > xen/arch/arm/vgic/vgic-v2.c | 6 ++++++ > xen/arch/arm/vgic/vgic.h | 1 + > 2 files changed, 7 insertions(+) > > diff --git a/xen/arch/arm/vgic/vgic-v2.c b/xen/arch/arm/vgic/vgic-v2.c > index da64b4758c..b7d6493e5a 100644 > --- a/xen/arch/arm/vgic/vgic-v2.c > +++ b/xen/arch/arm/vgic/vgic-v2.c > @@ -221,6 +221,12 @@ void vgic_v2_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr) > gic_hw_ops->write_lr(lr, &lr_val); > } > > +void vgic_v2_enable(struct vcpu *vcpu) > +{ > + /* Get the show on the road... */ > + gic_hw_ops->update_hcr_status(GICH_HCR_EN, 1); > +} > + > int vgic_v2_map_resources(struct domain *d) > { > struct vgic_dist *dist = &d->arch.vgic; > diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h > index 6fab994b9c..bd0c3fe5ab 100644 > --- a/xen/arch/arm/vgic/vgic.h > +++ b/xen/arch/arm/vgic/vgic.h > @@ -61,6 +61,7 @@ void vgic_sync_hardware_irq(struct domain *d, > void vgic_v2_fold_lr_state(struct vcpu *vcpu); > void vgic_v2_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); > void vgic_v2_set_underflow(struct vcpu *vcpu); > +void vgic_v2_enable(struct vcpu *vcpu); > int vgic_v2_map_resources(struct domain *d); > int vgic_register_dist_iodev(struct domain *d, gfn_t dist_base_fn, > enum vgic_type); > Cheers,
diff --git a/xen/arch/arm/vgic/vgic-v2.c b/xen/arch/arm/vgic/vgic-v2.c index da64b4758c..b7d6493e5a 100644 --- a/xen/arch/arm/vgic/vgic-v2.c +++ b/xen/arch/arm/vgic/vgic-v2.c @@ -221,6 +221,12 @@ void vgic_v2_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr) gic_hw_ops->write_lr(lr, &lr_val); } +void vgic_v2_enable(struct vcpu *vcpu) +{ + /* Get the show on the road... */ + gic_hw_ops->update_hcr_status(GICH_HCR_EN, 1); +} + int vgic_v2_map_resources(struct domain *d) { struct vgic_dist *dist = &d->arch.vgic; diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h index 6fab994b9c..bd0c3fe5ab 100644 --- a/xen/arch/arm/vgic/vgic.h +++ b/xen/arch/arm/vgic/vgic.h @@ -61,6 +61,7 @@ void vgic_sync_hardware_irq(struct domain *d, void vgic_v2_fold_lr_state(struct vcpu *vcpu); void vgic_v2_populate_lr(struct vcpu *vcpu, struct vgic_irq *irq, int lr); void vgic_v2_set_underflow(struct vcpu *vcpu); +void vgic_v2_enable(struct vcpu *vcpu); int vgic_v2_map_resources(struct domain *d); int vgic_register_dist_iodev(struct domain *d, gfn_t dist_base_fn, enum vgic_type);
Enable the VGIC operation by properly initialising the registers in the hypervisor GIC interface. This is based on Linux commit f7b6985cc3d0, written by Eric Auger. Signed-off-by: Andre Przywara <andre.przywara@linaro.org> --- Changelog RFC ... v1: - drop unneeded vgic_vmcr initialization - use update_hcr_status wrapper xen/arch/arm/vgic/vgic-v2.c | 6 ++++++ xen/arch/arm/vgic/vgic.h | 1 + 2 files changed, 7 insertions(+)