- Add ARM CCA to the supporting firmware feature.

Signed-off-by: Kazuhiro Abe <[email protected]>
---
 src/qemu/qemu_firmware.c                      | 19 ++++++++++++++-
 .../qemu/firmware/50-edk2-aarch64-armcca.json | 24 +++++++++++++++++++
 tests/qemufirmwaretest.c                      |  3 +++
 3 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100644 
tests/qemufirmwaredata/usr/share/qemu/firmware/50-edk2-aarch64-armcca.json

diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
index 9391956521..4395e79223 100644
--- a/src/qemu/qemu_firmware.c
+++ b/src/qemu/qemu_firmware.c
@@ -142,6 +142,7 @@ typedef enum {
     QEMU_FIRMWARE_FEATURE_AMD_SEV_ES,
     QEMU_FIRMWARE_FEATURE_AMD_SEV_SNP,
     QEMU_FIRMWARE_FEATURE_INTEL_TDX,
+    QEMU_FIRMWARE_FEATURE_ARM_CCA,
     QEMU_FIRMWARE_FEATURE_ENROLLED_KEYS,
     QEMU_FIRMWARE_FEATURE_REQUIRES_SMM,
     QEMU_FIRMWARE_FEATURE_SECURE_BOOT,
@@ -161,6 +162,7 @@ VIR_ENUM_IMPL(qemuFirmwareFeature,
               "amd-sev-es",
               "amd-sev-snp",
               "intel-tdx",
+              "arm-rme",
               "enrolled-keys",
               "requires-smm",
               "secure-boot",
@@ -1092,6 +1094,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
     bool supportsSEVES = false;
     bool supportsSEVSNP = false;
     bool supportsTDX = false;
+    bool supportsARMCCA = false;
     bool supportsSecureBoot = false;
     bool hasEnrolledKeys = false;
     int reqSecureBoot;
@@ -1169,6 +1172,10 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
             supportsTDX = true;
             break;
 
+        case QEMU_FIRMWARE_FEATURE_ARM_CCA:
+            supportsARMCCA = true;
+            break;
+
         case QEMU_FIRMWARE_FEATURE_REQUIRES_SMM:
             requiresSMM = true;
             break;
@@ -1400,8 +1407,15 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
             }
             break;
 
-        case VIR_DOMAIN_LAUNCH_SECURITY_PV:
         case VIR_DOMAIN_LAUNCH_SECURITY_CCA:
+            if (!supportsARMCCA) {
+                VIR_DEBUG("Domain requires ARM-CCA firmware '%s' doesn't 
support it",
+                          path);
+                return false;
+            }
+            break;
+
+        case VIR_DOMAIN_LAUNCH_SECURITY_PV:
             break;
 
         case VIR_DOMAIN_LAUNCH_SECURITY_NONE:
@@ -1516,6 +1530,7 @@ qemuFirmwareEnableFeaturesModern(virDomainDef *def,
         case QEMU_FIRMWARE_FEATURE_AMD_SEV_ES:
         case QEMU_FIRMWARE_FEATURE_AMD_SEV_SNP:
         case QEMU_FIRMWARE_FEATURE_INTEL_TDX:
+        case QEMU_FIRMWARE_FEATURE_ARM_CCA:
         case QEMU_FIRMWARE_FEATURE_VERBOSE_DYNAMIC:
         case QEMU_FIRMWARE_FEATURE_VERBOSE_STATIC:
         case QEMU_FIRMWARE_FEATURE_NONE:
@@ -1566,6 +1581,7 @@ qemuFirmwareSanityCheck(const qemuFirmware *fw,
         case QEMU_FIRMWARE_FEATURE_AMD_SEV_ES:
         case QEMU_FIRMWARE_FEATURE_AMD_SEV_SNP:
         case QEMU_FIRMWARE_FEATURE_INTEL_TDX:
+        case QEMU_FIRMWARE_FEATURE_ARM_CCA:
             isConfidential = true;
             break;
         case QEMU_FIRMWARE_FEATURE_NONE:
@@ -2062,6 +2078,7 @@ qemuFirmwareGetSupported(const char *machine,
             case QEMU_FIRMWARE_FEATURE_AMD_SEV_ES:
             case QEMU_FIRMWARE_FEATURE_AMD_SEV_SNP:
             case QEMU_FIRMWARE_FEATURE_INTEL_TDX:
+            case QEMU_FIRMWARE_FEATURE_ARM_CCA:
             case QEMU_FIRMWARE_FEATURE_ENROLLED_KEYS:
             case QEMU_FIRMWARE_FEATURE_SECURE_BOOT:
             case QEMU_FIRMWARE_FEATURE_VERBOSE_DYNAMIC:
diff --git 
a/tests/qemufirmwaredata/usr/share/qemu/firmware/50-edk2-aarch64-armcca.json 
b/tests/qemufirmwaredata/usr/share/qemu/firmware/50-edk2-aarch64-armcca.json
new file mode 100644
index 0000000000..681c1eadac
--- /dev/null
+++ b/tests/qemufirmwaredata/usr/share/qemu/firmware/50-edk2-aarch64-armcca.json
@@ -0,0 +1,24 @@
+{
+    "description": "UEFI firmware for ARM64 virtual machines with CCA support",
+    "interface-types": [
+        "uefi"
+    ],
+    "mapping": {
+        "device": "memory",
+        "filename": "/usr/share/edk2/aarch64/QEMU_EFI-armcca.fd"
+    },
+    "targets": [
+        {
+            "architecture": "aarch64",
+            "machines": [
+                "virt-*"
+            ]
+        }
+    ],
+    "features": [
+        "arm-rme"
+    ],
+    "tags": [
+
+    ]
+}
diff --git a/tests/qemufirmwaretest.c b/tests/qemufirmwaretest.c
index a4fb5c9b9c..091f385abb 100644
--- a/tests/qemufirmwaretest.c
+++ b/tests/qemufirmwaretest.c
@@ -89,6 +89,7 @@ testFWPrecedence(const void *opaque G_GNUC_UNUSED)
         PREFIX "/share/qemu/firmware/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json",
         PREFIX "/share/qemu/firmware/40-edk2-ovmf-4m-qcow2-x64-sb.json",
         PREFIX "/share/qemu/firmware/41-edk2-ovmf-2m-raw-x64-sb.json",
+        PREFIX "/share/qemu/firmware/50-edk2-aarch64-armcca.json",
         PREFIX "/share/qemu/firmware/50-edk2-aarch64-qcow2.json",
         PREFIX "/share/qemu/firmware/50-edk2-loongarch64.json",
         PREFIX "/share/qemu/firmware/50-edk2-ovmf-4m-qcow2-x64-nosb.json",
@@ -269,6 +270,7 @@ mymain(void)
     
DO_PARSE_TEST("usr/share/qemu/firmware/31-edk2-ovmf-2m-raw-x64-sb-enrolled.json");
     DO_PARSE_TEST("usr/share/qemu/firmware/40-edk2-ovmf-4m-qcow2-x64-sb.json");
     DO_PARSE_TEST("usr/share/qemu/firmware/41-edk2-ovmf-2m-raw-x64-sb.json");
+    DO_PARSE_TEST("usr/share/qemu/firmware/50-edk2-aarch64-armcca.json");
     DO_PARSE_TEST("usr/share/qemu/firmware/50-edk2-aarch64-qcow2.json");
     DO_PARSE_TEST("usr/share/qemu/firmware/50-edk2-loongarch64.json");
     
DO_PARSE_TEST("usr/share/qemu/firmware/50-edk2-ovmf-4m-qcow2-x64-nosb.json");
@@ -329,6 +331,7 @@ mymain(void)
                       "/usr/share/edk2/ovmf/MICROVM.fd:NULL",
                       VIR_DOMAIN_OS_DEF_FIRMWARE_EFI);
     DO_SUPPORTED_TEST("virt-3.1", VIR_ARCH_AARCH64, false,
+                      "/usr/share/edk2/aarch64/QEMU_EFI-armcca.fd:NULL:"
                       
"/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.qcow2:/usr/share/edk2/aarch64/vars-template-pflash.qcow2:"
                       
"/usr/share/edk2/aarch64/QEMU_EFI-silent-pflash.raw:/usr/share/edk2/aarch64/vars-template-pflash.raw:"
                       
"/usr/share/edk2/aarch64/QEMU_EFI-pflash.qcow2:/usr/share/edk2/aarch64/vars-template-pflash.qcow2:"
-- 
2.43.0

Reply via email to