Allow creating domains with GIC_V4 version.
Signed-off-by: Mykyta Poturai <mykyta_poturai@epam.com>
---
xen/arch/arm/dom0less-build.c | 1 +
xen/arch/arm/domain.c | 16 ++++++++++++++++
xen/arch/arm/vgic.c | 2 ++
xen/include/public/arch-arm.h | 2 ++
4 files changed, 21 insertions(+)
diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c
index 4181c10538..3c4b074b05 100644
--- a/xen/arch/arm/dom0less-build.c
+++ b/xen/arch/arm/dom0less-build.c
@@ -157,6 +157,7 @@ int __init make_intc_domU_node(struct kernel_info *kinfo)
{
#ifdef CONFIG_GICV3
case GIC_V3:
+ case GIC_V4:
return make_gicv3_domU_node(kinfo);
#endif
#ifdef CONFIG_VGICV2
diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c
index 507df807ed..864e5511c9 100644
--- a/xen/arch/arm/domain.c
+++ b/xen/arch/arm/domain.c
@@ -604,6 +604,14 @@ int arch_sanitise_domain_config(struct xen_domctl_createdomain *config)
config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V3;
break;
+ case GIC_V4:
+ config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V4;
+ break;
+
+ case GIC_V4_1:
+ config->arch.gic_version = XEN_DOMCTL_CONFIG_GIC_V4_1;
+ break;
+
default:
ASSERT_UNREACHABLE();
return -EINVAL;
@@ -679,6 +687,14 @@ int arch_domain_create(struct domain *d,
d->arch.vgic.version = GIC_V3;
break;
+ case XEN_DOMCTL_CONFIG_GIC_V4:
+ d->arch.vgic.version = GIC_V4;
+ break;
+
+ case XEN_DOMCTL_CONFIG_GIC_V4_1:
+ d->arch.vgic.version = GIC_V4_1;
+ break;
+
default:
BUG();
}
diff --git a/xen/arch/arm/vgic.c b/xen/arch/arm/vgic.c
index 6baf870ad5..e5752faeb7 100644
--- a/xen/arch/arm/vgic.c
+++ b/xen/arch/arm/vgic.c
@@ -153,6 +153,7 @@ int domain_vgic_register(struct domain *d, unsigned int *mmio_count)
{
#ifdef CONFIG_GICV3
case GIC_V3:
+ case GIC_V4:
if ( vgic_v3_init(d, mmio_count) )
return -ENODEV;
break;
@@ -929,6 +930,7 @@ unsigned int vgic_max_vcpus(unsigned int domctl_vgic_version)
#ifdef CONFIG_GICV3
case XEN_DOMCTL_CONFIG_GIC_V3:
+ case XEN_DOMCTL_CONFIG_GIC_V4:
return 4096;
#endif
diff --git a/xen/include/public/arch-arm.h b/xen/include/public/arch-arm.h
index 96365e5603..12690cf3ac 100644
--- a/xen/include/public/arch-arm.h
+++ b/xen/include/public/arch-arm.h
@@ -322,6 +322,8 @@ DEFINE_XEN_GUEST_HANDLE(vcpu_guest_context_t);
#define XEN_DOMCTL_CONFIG_GIC_NATIVE 0
#define XEN_DOMCTL_CONFIG_GIC_V2 1
#define XEN_DOMCTL_CONFIG_GIC_V3 2
+#define XEN_DOMCTL_CONFIG_GIC_V4 3
+#define XEN_DOMCTL_CONFIG_GIC_V4_1 4
#define XEN_DOMCTL_CONFIG_TEE_NONE 0
#define XEN_DOMCTL_CONFIG_TEE_OPTEE 1
--
2.51.2