Patrick Georgi ([email protected]) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2662
-gerrit commit fc2976167726e066d16c1cd8c920d6df90144848 Author: Nico Huber <[email protected]> Date: Fri Mar 8 12:36:04 2013 +0100 amdk8: Increase limits for MMIO to TOLM..MMCONF ACPI tells the OS that TOLM..MMCONF is safe to use for device's MMIO regions. Unfortunately we never told the chipset, but gave it only the region that our own resource assignment used. With this change, devices that are configured by the OS (for whatever reason: PCIe hotplug, because the OS feels like it, or as in our case, a bug in the coreboot resource allocator that leaves devices unallocated) actually work (assuming that there are no other bugs) Change-Id: Ib63c05484739d84198a9f10352be2055c6f14385 Signed-off-by: Nico Huber <[email protected]> Signed-off-by: Patrick Georgi <[email protected]> --- src/northbridge/amd/amdk8/northbridge.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/northbridge/amd/amdk8/northbridge.c b/src/northbridge/amd/amdk8/northbridge.c index 5c1d97a..da8cf48 100644 --- a/src/northbridge/amd/amdk8/northbridge.c +++ b/src/northbridge/amd/amdk8/northbridge.c @@ -33,6 +33,8 @@ #include <cpu/amd/amdk8_sysconf.h> +#include <southbridge/amd/rs690/rs690.h> + struct amdk8_sysconf_t sysconf; #define MAX_FX_DEVS 8 @@ -531,6 +533,10 @@ static void amdk8_set_resources(device_t dev) struct bus *bus; struct resource *res; + struct resource *mem_lowest = NULL, *mem_highest = NULL; + + const uint32_t topmem = (uint32_t)bsp_topmem(); + /* Find the nodeid */ nodeid = amdk8_nodeid(dev); @@ -559,6 +565,29 @@ static void amdk8_set_resources(device_t dev) res->index = index; amdk8_set_resource(dev, res, nodeid); + + if (res->flags & IORESOURCE_MEM) { + if (!mem_lowest || (res->base > topmem && + res->base < mem_lowest->base)) + mem_lowest = res; + if (!mem_highest || + (res->base + res->size) > + (mem_highest->base + mem_highest->size)) + mem_highest = res; + } + } + + if (mem_lowest && mem_lowest->base > topmem) { + mem_lowest->size += mem_lowest->base - topmem; + mem_lowest->base = topmem; + mem_lowest->flags &= ~IORESOURCE_STORED; + amdk8_set_resource(dev, mem_lowest, nodeid); + } + if (mem_highest && (mem_highest->base + mem_highest->size) < + EXT_CONF_BASE_ADDRESS) { + mem_highest->size = EXT_CONF_BASE_ADDRESS - mem_highest->base; + mem_highest->flags &= ~IORESOURCE_STORED; + amdk8_set_resource(dev, mem_highest, nodeid); } compact_resources(dev); -- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

