Attention is currently required from: Zheng Bao.

Bao Zheng would like Zheng Bao to review this change.

View Change

amdfwtool: Use relative address for EFS gen2

The second generation EFS (offset 0x24[0]=0) uses
"binary relative" offsets and not "x86 physical
MMIO address" like gen1.

Chips like Cezanne can also run with phycical address,
so no problem comes up so far.

BUG=b:188754219
Test=Majolica (Cezanne)

Change-Id: I3a54f8ce5004915a7fa407dcd7d59a64d88aad0d
Signed-off-by: Zheng Bao <fishbaozi@gmail.com>
---
M util/amdfwtool/amdfwtool.c
1 file changed, 9 insertions(+), 3 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/11/55211/1
diff --git a/util/amdfwtool/amdfwtool.c b/util/amdfwtool/amdfwtool.c
index 825dea6..feefeac 100644
--- a/util/amdfwtool/amdfwtool.c
+++ b/util/amdfwtool/amdfwtool.c
@@ -343,11 +343,12 @@
typedef struct _context {
char *rom; /* target buffer, size of flash device */
uint32_t rom_size; /* size of flash device */
+ uint32_t abs_address;
uint32_t current; /* pointer within flash & proxy buffer */
} context;

#define RUN_BASE(ctx) (0xFFFFFFFF - (ctx).rom_size + 1)
-#define RUN_OFFSET(ctx, offset) (RUN_BASE(ctx) + (offset))
+#define RUN_OFFSET(ctx, offset) ((ctx).abs_address ? RUN_BASE(ctx) + (offset) : (offset))
#define RUN_CURRENT(ctx) RUN_OFFSET((ctx), (ctx).current)
#define BUFF_OFFSET(ctx, offset) ((void *)((ctx).rom + (offset)))
#define BUFF_CURRENT(ctx) BUFF_OFFSET((ctx), (ctx).current)
@@ -1533,8 +1534,6 @@
romsig_offset = ctx.current = dir_location - rom_base_address;
else
romsig_offset = ctx.current = AMD_ROMSIG_OFFSET;
- printf(" AMDFWTOOL Using firmware directory location of 0x%08x\n",
- RUN_CURRENT(ctx));

amd_romsig = BUFF_OFFSET(ctx, romsig_offset);
amd_romsig->signature = EMBEDDED_FW_SIGNATURE;
@@ -1545,6 +1544,10 @@
if (soc_id != PLATFORM_UNKNOWN) {
retval = set_efs_table(soc_id, amd_romsig, efs_spi_readmode,
efs_spi_speed, efs_spi_micron_flag);
+ if (amd_romsig->efs_gen.gen == EFS_SECOND_GEN)
+ ctx.abs_address = 0;
+ else
+ ctx.abs_address = 1;
if (retval) {
fprintf(stderr, "ERROR: Failed to initialize EFS table!\n");
return retval;
@@ -1553,6 +1556,9 @@
fprintf(stderr, "WARNING: No SOC name specified.\n");
}

+ printf(" AMDFWTOOL Using firmware directory location of 0x%08x\n",
+ RUN_CURRENT(ctx));
+
integrate_firmwares(&ctx, amd_romsig, amd_fw_table);

ctx.current = ALIGN(ctx.current, 0x10000U); /* TODO: is it necessary? */

To view, visit change 55211. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I3a54f8ce5004915a7fa407dcd7d59a64d88aad0d
Gerrit-Change-Number: 55211
Gerrit-PatchSet: 1
Gerrit-Owner: Bao Zheng <fishbaozi@gmail.com>
Gerrit-Reviewer: Zheng Bao
Gerrit-Attention: Zheng Bao
Gerrit-MessageType: newchange