From 0754e00ace632c4a9e22670da3d676d6e9352aa2 Mon Sep 17 00:00:00 2001 From: Nico Huber Date: Thu, 22 Jun 2023 23:17:40 +0200 Subject: [PATCH] allocator_v4: Fix top-level allocations w/o IORESOURCE_ABOVE_4G MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When moving the code to allocate at the top level in commit 9260ea60bfa4 (allocator_v4: Use memranges only for toplevel), a call to restrict the limit of the resource was dropped. Probably by accident in one of the earliest rebases. Without this call to effective_limit(), 64-bit resour- ces at the top level, i.e. PCI bus 0, were always placed above 4G. Even when this was not requested with the IORESOURCE_ABOVE_4G flag. Tested on kontron/ktqm77 where the issue could be reproduced with x86_64. Without the fix, boot hangs when trying to access the GMA MMIO registers of PCI 00:02.0, which were placed above 4G. Change-Id: Ied3a0695ef5e91f092bf2d442c1c482057643483 Signed-off-by: Nico Huber Found-by: 9elements QA Reviewed-on: https://review.coreboot.org/c/coreboot/+/76090 Reviewed-by: Felix Singer Reviewed-by: Kyösti Mälkki Reviewed-by: Eric Lai Reviewed-by: Paul Menzel Reviewed-by: Lean Sheng Tan Reviewed-by: Arthur Heymans Tested-by: build bot (Jenkins) --- src/device/resource_allocator_v4.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/device/resource_allocator_v4.c b/src/device/resource_allocator_v4.c index e64d8ade2d..96d44882ed 100644 --- a/src/device/resource_allocator_v4.c +++ b/src/device/resource_allocator_v4.c @@ -401,8 +401,8 @@ static void allocate_toplevel_resources(const struct device *const domain, if (!res->size) continue; - if (!memranges_steal(&ranges, res->limit, res->size, res->align, type, &base, - CONFIG(RESOURCE_ALLOCATION_TOP_DOWN))) { + if (!memranges_steal(&ranges, effective_limit(res), res->size, res->align, + type, &base, CONFIG(RESOURCE_ALLOCATION_TOP_DOWN))) { printk(BIOS_ERR, "Resource didn't fit!!!\n"); print_failed_res(dev, res); continue;