summaryrefslogtreecommitdiff
path: root/src/cpu/intel/common
diff options
context:
space:
mode:
authorJeremy Compostella <jeremy.compostella@intel.com>2023-10-17 19:18:41 -0700
committerSubrata Banik <subratabanik@google.com>2023-10-20 17:51:46 +0000
commit6dff1fd7d5e419b2f947f516551dcab3f4ebe30a (patch)
tree699f4cf1a0f2da74a8ec27f5619443fe986ce33c /src/cpu/intel/common
parentd947639a486beef26b8daa164e3e3832196903c9 (diff)
cpu/intel/common: Define build time physical address reserved bits
According the Intel Software Developer Manual, CPUID.80000008H:EAX[15:8] reports the physical-address width supported by the processor. Unfortunately, it does not necessarily reflect the physical-address space the system can actulally use as some of those bits can be reserved for internal hardware use. It is critical for coreboot to know the actual physical address size. Overestimating this size can lead to device resource overlaps due to the hardware ignoring upper reserved bits. On rex for instance, it creates some reboot hangs due to an overlap between thunderbolt and Input Output Manager (IOM) address space. As some SoCs, such as Meteor Lake, have physical address reserved bits which cannot be probed at runtime, this commit introduces `CPU_INTEL_COMMON_RESERVED_PHYS_ADDR_BITS' Kconfig to set the number of physical address reserved bits at compilation time for those SoCs. A runtime detection by hardware probing will be attempted if the value is 0 (default). BUG=b:288978352 Change-Id: I8748fa3e5bdfd339e973d562c5a201d5616f813e Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/78451 Reviewed-by: Subrata Banik <subratabanik@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Kapil Porwal <kapilporwal@google.com>
Diffstat (limited to 'src/cpu/intel/common')
-rw-r--r--src/cpu/intel/common/Kconfig8
-rw-r--r--src/cpu/intel/common/common_init.c3
2 files changed, 11 insertions, 0 deletions
diff --git a/src/cpu/intel/common/Kconfig b/src/cpu/intel/common/Kconfig
index 51b8ccb83f..0f6bd6879a 100644
--- a/src/cpu/intel/common/Kconfig
+++ b/src/cpu/intel/common/Kconfig
@@ -31,6 +31,14 @@ config SET_MSR_AESNI_LOCK_BIT
config CPU_INTEL_COMMON_TIMEBASE
bool
+config CPU_INTEL_COMMON_RESERVED_PHYS_ADDR_BITS
+ int
+ help
+ Specify the number of physical address reserved bits. This
+ config can be set for SoCs with reserved bits which cannot
+ be probed at runtime. A runtime detection by hardware
+ probing will be attempted if the value is -1.
+
endif
config CPU_INTEL_COMMON_VOLTAGE
diff --git a/src/cpu/intel/common/common_init.c b/src/cpu/intel/common/common_init.c
index 55bc59eb75..83a21e05ed 100644
--- a/src/cpu/intel/common/common_init.c
+++ b/src/cpu/intel/common/common_init.c
@@ -258,6 +258,9 @@ static unsigned int get_tme_keyid_bits(void)
unsigned int get_reserved_phys_addr_bits(void)
{
+ if (CONFIG_CPU_INTEL_COMMON_RESERVED_PHYS_ADDR_BITS)
+ return CONFIG_CPU_INTEL_COMMON_RESERVED_PHYS_ADDR_BITS;
+
if (!is_tme_supported())
return 0;