diff options
author | Kyösti Mälkki <kyosti.malkki@gmail.com> | 2012-07-10 13:10:24 +0300 |
---|---|---|
committer | Patrick Georgi <patrick@georgi-clan.de> | 2012-07-16 18:57:43 +0200 |
commit | de3dde46fd3efaba65656509d4221f29a66257a3 (patch) | |
tree | d643f39c97eae756c190c98352ad04382d536a18 /src/northbridge/amd/amdk8 | |
parent | 2354515f2e9ebf46fca2dc0e3c434940aaac6e9b (diff) |
AMD: Fix GFXUMA with 4GB or more RAM
Northbridge code incorrectly adjusted the last cacheable memory
resource to accomodate room for UMA framebuffer. If system had
4GB or more memory that last resource is not below 4GB and not
the one where UMA is located.
There are three consequences:
The last entry in coreboot memory table is reduced by uma_memory_size.
Due the incorrect code in northbridge code state.tomk,
end of last resource below 4GB, had not been adjusted.
Incrementing that by uma_memory_size diverts a region
possibly claimed for MMIO to RAM, as TOP_MEM is written.
Since the UMA framebuffer did not have IORESOURCE_CACHEABLE,
it was ignored from the MTRR setup and not set uncacheable.
The setting of TOP_MEM and TOP_MEM2, as well as all the MTRRs,
should be copied from BSP to all APs instead of deriving the data
separately for each Logical CPU.
Change-Id: I8e69fc8854b776fe9e4fe6ddfb101eba14888939
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/1217
Tested-by: build bot (Jenkins)
Reviewed-by: Denis Carikli <GNUtoo@no-log.org>
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'src/northbridge/amd/amdk8')
-rw-r--r-- | src/northbridge/amd/amdk8/northbridge.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/src/northbridge/amd/amdk8/northbridge.c b/src/northbridge/amd/amdk8/northbridge.c index a7aa19dc42..c4a8acd643 100644 --- a/src/northbridge/amd/amdk8/northbridge.c +++ b/src/northbridge/amd/amdk8/northbridge.c @@ -1093,16 +1093,8 @@ static void amdk8_domain_set_resources(device_t dev) sizek -= (4*1024*1024 - mmio_basek); } } - /* If sizek == 0, it was split at mmio_basek without a hole. - * Don't create an empty ram_resource. - */ -#if CONFIG_GFXUMA - /* Deduct uma memory before reporting because - * this is what the mtrr code expects */ - sizek -= uma_memory_size / 1024; -#endif - if (sizek) - ram_resource(dev, (idx | i), basek, sizek); + + ram_resource(dev, (idx | i), basek, sizek); idx += 0x10; #if CONFIG_WRITE_HIGH_TABLES printk(BIOS_DEBUG, "%d: mmio_basek=%08lx, basek=%08x, limitk=%08x\n", |