From cf6d9ac22f2afd96b6f0b33cb67abb9a7828839d Mon Sep 17 00:00:00 2001 From: Arthur Heymans Date: Thu, 31 Aug 2023 18:08:02 +0200 Subject: device/Kconfig: Add an option to allocate above 4G by default Historically resource allocation in coreboot was 32bit x86 thing. To remain compatible with this behavior (e.g. to keep 32bit payloads happy), resource allocation limits resources to 32 bits unless explicitly overridden. However this behavior is not always appropriate: e.g. on non x86 platforms the PCIe mem decode window could be above 4G. Another case on x86 is where the decode window(s) below 4G are not adequate for fitting all resources and the payload is 64bit capable (e.g. Linux). This adds a Kconfig flag to override the behavior to limit resources to 32bit by default and to allocate resources according to the real hardware limits. TEST=intel/archercity CRB Signed-off-by: Arthur Heymans Change-Id: I01218a8a3efc4a5f8ba344808949ca6b8898525f Reviewed-on: https://review.coreboot.org/c/coreboot/+/78331 Reviewed-by: Lean Sheng Tan Reviewed-by: Nico Huber Tested-by: build bot (Jenkins) Reviewed-by: Shuo Liu --- src/device/Kconfig | 7 +++++++ src/device/resource_allocator_v4.c | 3 +++ 2 files changed, 10 insertions(+) (limited to 'src') diff --git a/src/device/Kconfig b/src/device/Kconfig index 83afa8cda6..374427a372 100644 --- a/src/device/Kconfig +++ b/src/device/Kconfig @@ -1005,6 +1005,13 @@ config RESOURCE_ALLOCATION_TOP_DOWN undeclared resources. EDK2 is currently reported to also have problems on some platforms, at least with Intel's IGD. +config ALWAYS_ALLOW_ABOVE_4G_ALLOCATION + bool + default n if ARCH_X86 + default y + help + Don't limit mem resources to 4G, but to their actual limit. + config XHCI_UTILS def_bool n help diff --git a/src/device/resource_allocator_v4.c b/src/device/resource_allocator_v4.c index 96d44882ed..73ec9c1dba 100644 --- a/src/device/resource_allocator_v4.c +++ b/src/device/resource_allocator_v4.c @@ -84,6 +84,9 @@ static bool dev_has_children(const struct device *dev) static resource_t effective_limit(const struct resource *const res) { + if (CONFIG(ALWAYS_ALLOW_ABOVE_4G_ALLOCATION)) + return res->limit; + /* Always allow bridge resources above 4G. */ if (res->flags & IORESOURCE_BRIDGE) return res->limit; -- cgit v1.2.3