Introduce a capability flag to the capabilities property of a domain node in
the hyperlaunch device tree. In the domain construction, use the capability
flag to determine if CDF_hardware should be set on the domain config.

Signed-off-by: Daniel P. Smith <dpsm...@apertussolutions.com>
---
 xen/arch/x86/domain-builder/core.c     | 3 ++-
 xen/arch/x86/domain-builder/fdt.c      | 2 ++
 xen/arch/x86/include/asm/boot-domain.h | 1 +
 xen/arch/x86/setup.c                   | 8 ++++++--
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/xen/arch/x86/domain-builder/core.c 
b/xen/arch/x86/domain-builder/core.c
index 6ab4e6fe5333..8d137ecaaf84 100644
--- a/xen/arch/x86/domain-builder/core.c
+++ b/xen/arch/x86/domain-builder/core.c
@@ -96,7 +96,8 @@ void __init builder_init(struct boot_info *bi)
         i = first_boot_module_index(bi, BOOTMOD_UNKNOWN);
         bi->mods[i].type = BOOTMOD_KERNEL;
         bi->domains[0].kernel = &bi->mods[i];
-        bi->domains[0].capabilities |= BUILD_CAPS_CONTROL;
+        bi->domains[0].capabilities |=
+            (BUILD_CAPS_CONTROL | BUILD_CAPS_HARDWARE);
         bi->nr_domains = 1;
     }
 }
diff --git a/xen/arch/x86/domain-builder/fdt.c 
b/xen/arch/x86/domain-builder/fdt.c
index d2a7e010ea77..1af58ed4eb86 100644
--- a/xen/arch/x86/domain-builder/fdt.c
+++ b/xen/arch/x86/domain-builder/fdt.c
@@ -267,6 +267,8 @@ static int __init process_domain_node(
             printk("  caps: ");
             if ( bd->capabilities & BUILD_CAPS_CONTROL )
                 printk("c");
+            if ( bd->capabilities & BUILD_CAPS_HARDWARE )
+                printk(" h");
             printk("\n");
         }
     }
diff --git a/xen/arch/x86/include/asm/boot-domain.h 
b/xen/arch/x86/include/asm/boot-domain.h
index b0f956cd734e..18d144de2fea 100644
--- a/xen/arch/x86/include/asm/boot-domain.h
+++ b/xen/arch/x86/include/asm/boot-domain.h
@@ -15,6 +15,7 @@ struct boot_domain {
 
 #define BUILD_CAPS_NONE          (0)
 #define BUILD_CAPS_CONTROL       (1 << 0)
+#define BUILD_CAPS_HARDWARE      (1 << 1)
     uint32_t capabilities;
 
                                           /* On     | Off    */
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 41e46f05a520..760262ea3d4c 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1035,8 +1035,12 @@ static struct domain *__init create_dom0(struct 
boot_info *bi)
             XEN_X86_EMU_LAPIC | XEN_X86_EMU_IOAPIC | XEN_X86_EMU_VPCI;
     }
 
-    if ( iommu_enabled )
-        dom0_cfg.flags |= XEN_DOMCTL_CDF_iommu;
+    if ( bd->capabilities & BUILD_CAPS_HARDWARE )
+    {
+        create_flags |= CDF_hardware;
+        if ( iommu_enabled )
+            dom0_cfg.flags |= XEN_DOMCTL_CDF_iommu;
+    }
 
     if ( bd->domid == DOMID_INVALID )
         /* Create initial domain.  Not d0 for pvshim. */
-- 
2.30.2


Reply via email to