diff options
Diffstat (limited to 'drivers/iommu/amd/init.c')
| -rw-r--r-- | drivers/iommu/amd/init.c | 16 | 
1 files changed, 10 insertions, 6 deletions
| diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index 2a822b229bd0..1eacd43cb436 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -20,7 +20,7 @@  #include <linux/amd-iommu.h>  #include <linux/export.h>  #include <linux/kmemleak.h> -#include <linux/mem_encrypt.h> +#include <linux/cc_platform.h>  #include <asm/pci-direct.h>  #include <asm/iommu.h>  #include <asm/apic.h> @@ -121,8 +121,10 @@ struct ivhd_entry {  	u8 type;  	u16 devid;  	u8 flags; -	u32 ext; -	u32 hidh; +	struct_group(ext_hid, +		u32 ext; +		u32 hidh; +	);  	u64 cid;  	u8 uidf;  	u8 uidl; @@ -964,7 +966,7 @@ static bool copy_device_table(void)  		pr_err("The address of old device table is above 4G, not trustworthy!\n");  		return false;  	} -	old_devtb = (sme_active() && is_kdump_kernel()) +	old_devtb = (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT) && is_kdump_kernel())  		    ? (__force void *)ioremap_encrypted(old_devtb_phys,  							dev_table_size)  		    : memremap(old_devtb_phys, dev_table_size, MEMREMAP_WB); @@ -1377,7 +1379,8 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  				break;  			} -			memcpy(hid, (u8 *)(&e->ext), ACPIHID_HID_LEN - 1); +			BUILD_BUG_ON(sizeof(e->ext_hid) != ACPIHID_HID_LEN - 1); +			memcpy(hid, &e->ext_hid, ACPIHID_HID_LEN - 1);  			hid[ACPIHID_HID_LEN - 1] = '\0';  			if (!(*hid)) { @@ -3032,7 +3035,8 @@ static int __init amd_iommu_init(void)  static bool amd_iommu_sme_check(void)  { -	if (!sme_active() || (boot_cpu_data.x86 != 0x17)) +	if (!cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT) || +	    (boot_cpu_data.x86 != 0x17))  		return true;  	/* For Fam17h, a specific level of support is required */ |