fmaptool: Make base offsets absolute in fmap_config.h

fmaptool generates a header file used to hardcode certain values from
the FMAP in coreboot's binaries, to avoid having to find and parse the
FMAP manually for every access. For the offset of the FMAP itself this
has already been using the absolute offset from the base of the whole
ROM, but for individual CBFS sections it only used the offset from the
immediate parent FMAP region. Since the code using it intentionally has
no knowledge of the whole section tree, this causes problems as soon as
the CBFS is a child section of something not at absolute offset 0 (as is
the case for most x86 Chromebooks).

Change-Id: If0c516083949fe5ac8cdae85e00a4461dcbdf853
Reported-by: Rolf Evers-Fischer <embedded24@evers-fischer.de>
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://review.coreboot.org/15273
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Julius Werner 2016-06-20 13:21:36 -07:00 committed by Aaron Durbin
parent 8200761912
commit 119dcee1dd
1 changed files with 2 additions and 1 deletions

View File

@ -108,8 +108,9 @@ static bool write_header(const char *out_fname,
const struct flashmap_descriptor *item =
cbfs_sections_iterator_deref(cbfs_it);
assert(item->offset_known && item->size_known);
unsigned abs_base = fmd_calc_absolute_offset(root, item->name);
fprintf(header, "#define ___FMAP__%s_BASE 0x%x\n",
item->name, item->offset);
item->name, abs_base);
fprintf(header, "#define ___FMAP__%s_SIZE 0x%x\n",
item->name, item->size);
cbfs_sections_iterator_advance(&cbfs_it);