[RFC PATCH 15/19] arm: Add gicv4 to domain creation

Mykyta Poturai posted 19 patches 6 days, 22 hours ago
[RFC PATCH 15/19] arm: Add gicv4 to domain creation
Posted by Mykyta Poturai 6 days, 22 hours ago
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