summaryrefslogtreecommitdiff
path: root/payloads
diff options
context:
space:
mode:
authorPhilip Prindeville <philipp@redfish-solutions.com>2011-12-23 17:36:09 -0700
committerPatrick Georgi <patrick@georgi-clan.de>2011-12-24 11:55:15 +0100
commit965dacebc54c8108bd30afb757466ac9427272fa (patch)
treef7e25b5ddaff21db682d53d1f56841eea956baf3 /payloads
parentc10cade4042dca08f9c176e93e6457c7a7f4e40a (diff)
Fix missing VM mapping
When processing FORWARD records, we weren't accounting for the pointer being in the physical address space and not the virtual space instead. Change-Id: I35ef637fbec7886d4cfeac5fd650a17eae8d555a Signed-off-by: Philip Prindeville <philipp@redfish-solutions.com> Reviewed-on: http://review.coreboot.org/499 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Diffstat (limited to 'payloads')
-rw-r--r--payloads/libpayload/arch/i386/coreboot.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/payloads/libpayload/arch/i386/coreboot.c b/payloads/libpayload/arch/i386/coreboot.c
index 3c99c4fde0..709f8ae00f 100644
--- a/payloads/libpayload/arch/i386/coreboot.c
+++ b/payloads/libpayload/arch/i386/coreboot.c
@@ -113,6 +113,7 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
{
struct cb_header *header;
unsigned char *ptr = addr;
+ void *forward;
int i;
for (i = 0; i < len; i += 16, ptr += 16) {
@@ -145,7 +146,8 @@ static int cb_parse_header(void *addr, int len, struct sysinfo_t *info)
/* We only care about a few tags here (maybe more later). */
switch (rec->tag) {
case CB_TAG_FORWARD:
- return cb_parse_header((void *)(unsigned long)((struct cb_forward *)rec)->forward, len, info);
+ forward = phys_to_virt((void *)(unsigned long)((struct cb_forward *)rec)->forward);
+ return cb_parse_header(forward, len, info);
continue;
case CB_TAG_MEMORY:
cb_parse_memory(ptr, info);