]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
efi: arm64: Map Device with Prot Shared
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Thu, 17 Oct 2024 13:14:29 +0000 (14:14 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 23 Oct 2024 09:19:32 +0000 (10:19 +0100)
Device mappings need to be emulated by the VMM so must be mapped shared
with the host.

Reviewed-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Link: https://lore.kernel.org/r/20241017131434.40935-7-steven.price@arm.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/efi.c

index 712718aed5dd9efd8f5222b09de45320edf73dc4..1d25d8899dbf7f32b54737fd04c303f09793cd0b 100644 (file)
@@ -34,8 +34,16 @@ static __init pteval_t create_mapping_protection(efi_memory_desc_t *md)
        u64 attr = md->attribute;
        u32 type = md->type;
 
-       if (type == EFI_MEMORY_MAPPED_IO)
-               return PROT_DEVICE_nGnRE;
+       if (type == EFI_MEMORY_MAPPED_IO) {
+               pgprot_t prot = __pgprot(PROT_DEVICE_nGnRE);
+
+               if (arm64_is_protected_mmio(md->phys_addr,
+                                           md->num_pages << EFI_PAGE_SHIFT))
+                       prot = pgprot_encrypted(prot);
+               else
+                       prot = pgprot_decrypted(prot);
+               return pgprot_val(prot);
+       }
 
        if (region_is_misaligned(md)) {
                static bool __initdata code_is_misaligned;