Currently, the expectation is that the kernel will call amd_iommu_snp_enable() to perform various checks and set the amd_iommu_snp_en flag that the IOMMU uses to adjust its setup routines to account for additional requirements on hosts where SNP is enabled. This is somewhat fragile as it relies on this call being done prior to IOMMU setup. It is more robust to just do this automatically as part of IOMMU initialization, so rework the code accordingly. There is still a need to export information about whether or not the IOMMU is configured in a manner compatible with SNP, so relocate the existing amd_iommu_snp_en flag so it can be used to convey that information in place of the return code that was previously provided by calls to amd_iommu_snp_enable(). While here, also adjust the kernel messages related to IOMMU SNP enablement for consistency/grammar/clarity. Suggested-by: Borislav Petkov (AMD) <bp@alien8.de> Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> Co-developed-by: Michael Roth <michael.roth@amd.com> Signed-off-by: Michael Roth <michael.roth@amd.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Acked-by: Joerg Roedel <jroedel@suse.de> Link: https://lore.kernel.org/r/20240126041126.1927228-4-michael.roth@amd.com
40 lines
965 B
C
40 lines
965 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_X86_IOMMU_H
|
|
#define _ASM_X86_IOMMU_H
|
|
|
|
#include <linux/acpi.h>
|
|
|
|
#include <asm/e820/api.h>
|
|
|
|
extern int force_iommu, no_iommu;
|
|
extern int iommu_detected;
|
|
extern int iommu_merge;
|
|
extern int panic_on_overflow;
|
|
extern bool amd_iommu_snp_en;
|
|
|
|
#ifdef CONFIG_SWIOTLB
|
|
extern bool x86_swiotlb_enable;
|
|
#else
|
|
#define x86_swiotlb_enable false
|
|
#endif
|
|
|
|
/* 10 seconds */
|
|
#define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000)
|
|
|
|
static inline int __init
|
|
arch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr)
|
|
{
|
|
u64 start = rmrr->base_address;
|
|
u64 end = rmrr->end_address + 1;
|
|
int entry_type;
|
|
|
|
entry_type = e820__get_entry_type(start, end);
|
|
if (entry_type == E820_TYPE_RESERVED || entry_type == E820_TYPE_NVS)
|
|
return 0;
|
|
|
|
pr_err(FW_BUG "No firmware reserved region can cover this RMRR [%#018Lx-%#018Lx], contact BIOS vendor for fixes\n",
|
|
start, end - 1);
|
|
return -EINVAL;
|
|
}
|
|
|
|
#endif /* _ASM_X86_IOMMU_H */
|