summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2020-05-18 16:00:53 -0700
committerPatrick Georgi <pgeorgi@google.com>2020-05-26 15:15:05 +0000
commitafaae8aa00d59a1a74e7f7891d8def8cc21d9eb2 (patch)
treefa4cc04c19d7eed82e43f7509060ac94f0bbf046
parentf531244d20998091bd8c311a4183de0bcc9f6ff2 (diff)
downloadcoreboot-afaae8aa00d59a1a74e7f7891d8def8cc21d9eb2.tar.xz
device_util,agesa/family14: Do not consider unassigned resources in find_pci_tolm()
This change updates find_pci_tolm() to not consider any unassigned resources. This is achieved by adding the following checks: 1. Call search_bus_resources() with mask set to IORESOURCE_MEM | IORESOURCE_ASSIGNED. 2. In the callback tolm_test, check that the new resource selected has a non-zero size. This change is being made so that the resource allocator does not have to set the IORESOURCE_ASSIGNED flag for marking a resource as invalid. Change-Id: I796784dd93aa165e20a672c985b4875991901c87 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/41524 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
-rw-r--r--src/device/device_util.c11
-rw-r--r--src/northbridge/amd/agesa/family14/northbridge.c3
2 files changed, 11 insertions, 3 deletions
diff --git a/src/device/device_util.c b/src/device/device_util.c
index 88608597f2..22c3db1c44 100644
--- a/src/device/device_util.c
+++ b/src/device/device_util.c
@@ -883,6 +883,13 @@ void tolm_test(void *gp, struct device *dev, struct resource *new)
best = *best_p;
+ /*
+ * If resource is not allocated any space i.e. size is zero,
+ * then do not consider this resource in tolm calculations.
+ */
+ if (new->size == 0)
+ return;
+
if (!best || (best->base > new->base))
best = new;
@@ -893,9 +900,9 @@ u32 find_pci_tolm(struct bus *bus)
{
struct resource *min = NULL;
u32 tolm;
+ unsigned long mask_match = IORESOURCE_MEM | IORESOURCE_ASSIGNED;
- search_bus_resources(bus, IORESOURCE_MEM, IORESOURCE_MEM,
- tolm_test, &min);
+ search_bus_resources(bus, mask_match, mask_match, tolm_test, &min);
tolm = 0xffffffffUL;
diff --git a/src/northbridge/amd/agesa/family14/northbridge.c b/src/northbridge/amd/agesa/family14/northbridge.c
index 5cb99d6ec2..34fc0c08b3 100644
--- a/src/northbridge/amd/agesa/family14/northbridge.c
+++ b/src/northbridge/amd/agesa/family14/northbridge.c
@@ -284,8 +284,9 @@ static void amdfam14_link_read_bases(struct device *dev, u32 nodeid, u32 link)
static u32 my_find_pci_tolm(struct bus *bus, u32 tolm)
{
struct resource *min;
+ unsigned long mask_match = IORESOURCE_MEM | IORESOURCE_ASSIGNED;
min = 0;
- search_bus_resources(bus, IORESOURCE_MEM, IORESOURCE_MEM, tolm_test,
+ search_bus_resources(bus, mask_match, mask_match, tolm_test,
&min);
if (min && tolm > min->base) {
tolm = min->base;