diff options
author | Jeremy Compostella <jeremy.compostella@intel.com> | 2023-09-07 10:33:30 -0700 |
---|---|---|
committer | Subrata Banik <subratabanik@google.com> | 2023-09-12 08:12:02 +0000 |
commit | 1eff77bc59b77735872e675a8df4f059245e4be7 (patch) | |
tree | 6a09a4c448c22e5c6f97138d88526a4a00f5e971 /src/cpu/intel | |
parent | a6a5b25ce4235c4e645d3dc20f8222b1a81c54a3 (diff) |
arch/x86: Reduce max phys address size for Intel TME capable SoCs
On Intel SoCs, if TME is supported, TME key ID bits are reserved and
should be subtracted from the maximum physical addresses available.
BUG=288978352
TEST=Verified that DMAR ACPI table `Host Address Width` field on rex
went from 45 to 41.
Signed-off-by: Cliff Huang <cliff.huang@intel.com>
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Change-Id: I9504a489782ab6ef8950a8631c269ed39c63f34d
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77613
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Wonkyu Kim <wonkyu.kim@intel.com>
Reviewed-by: Bora Guvendik <bora.guvendik@intel.com>
Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com>
Diffstat (limited to 'src/cpu/intel')
-rw-r--r-- | src/cpu/intel/common/Makefile.inc | 2 | ||||
-rw-r--r-- | src/cpu/intel/common/common_init.c | 25 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/cpu/intel/common/Makefile.inc b/src/cpu/intel/common/Makefile.inc index c4ac57ebcf..8b247abe17 100644 --- a/src/cpu/intel/common/Makefile.inc +++ b/src/cpu/intel/common/Makefile.inc @@ -1,6 +1,8 @@ ## SPDX-License-Identifier: GPL-2.0-only +bootblock-$(CONFIG_CPU_INTEL_COMMON) += common_init.c romstage-$(CONFIG_CPU_INTEL_COMMON) += common_init.c +postcar-$(CONFIG_CPU_INTEL_COMMON) += common_init.c ramstage-$(CONFIG_CPU_INTEL_COMMON) += common_init.c ramstage-$(CONFIG_CPU_INTEL_COMMON) += hyperthreading.c ramstage-$(CONFIG_CPU_INTEL_COMMON_VOLTAGE) += voltage.c diff --git a/src/cpu/intel/common/common_init.c b/src/cpu/intel/common/common_init.c index f8608ae029..ff00f0247f 100644 --- a/src/cpu/intel/common/common_init.c +++ b/src/cpu/intel/common/common_init.c @@ -238,3 +238,28 @@ bool is_tme_supported(void) cpuid_regs = cpuid_ext(CPUID_STRUCT_EXTENDED_FEATURE_FLAGS, 0x0); return (cpuid_regs.ecx & CPUID_EXT_FEATURE_TME_SUPPORTED); } + +/* + * Get number of address bits used by Total Memory Encryption (TME) + * + * Returns TME_ACTIVATE[MK_TME_KEYID_BITS] (MSR 0x982 Bits[32-35]). + * + * NOTE: This function should be called after MK-TME features has been + * configured in the MSRs according to the capabilities and platform + * configuration. For instance, after FSP-M. + */ +static int get_tme_keyid_bits(void) +{ + msr_t msr; + + msr = rdmsr(MSR_TME_ACTIVATE); + return msr.hi & TME_ACTIVATE_HI_KEYID_BITS_MASK; +} + +int get_reserved_phys_addr_bits(void) +{ + if (!is_tme_supported()) + return 0; + + return get_tme_keyid_bits(); +} |