amdfwtool: Move the header creation into integration function
Before every integration there is a header creation. We can put them together. And the parameters for PSP/BIOS tables are useless. TEST=Identical test on all AMD SOC platform Change-Id: Ia9d78bb8145855203048208fcd67f8b9cd9d3199 Signed-off-by: Zheng Bao <fishbaozi@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/81253 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
parent
f360095d93
commit
eea834bcfd
@ -935,9 +935,6 @@ static void integrate_psp_levels(context *ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void integrate_psp_firmwares(context *ctx,
|
static void integrate_psp_firmwares(context *ctx,
|
||||||
psp_directory_table *pspdir,
|
|
||||||
psp_directory_table *pspdir2,
|
|
||||||
psp_directory_table *pspdir2_b,
|
|
||||||
amd_fw_entry *fw_table,
|
amd_fw_entry *fw_table,
|
||||||
uint32_t cookie,
|
uint32_t cookie,
|
||||||
amd_cb_config *cb_config)
|
amd_cb_config *cb_config)
|
||||||
@ -946,6 +943,7 @@ static void integrate_psp_firmwares(context *ctx,
|
|||||||
unsigned int i, count;
|
unsigned int i, count;
|
||||||
int level;
|
int level;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
psp_directory_table *pspdir;
|
||||||
uint64_t addr;
|
uint64_t addr;
|
||||||
uint32_t current_table_save;
|
uint32_t current_table_save;
|
||||||
bool recovery_ab = cb_config->recovery_ab;
|
bool recovery_ab = cb_config->recovery_ab;
|
||||||
@ -956,6 +954,17 @@ static void integrate_psp_firmwares(context *ctx,
|
|||||||
* is passed, clearly a 2nd-level table is intended. However, a
|
* is passed, clearly a 2nd-level table is intended. However, a
|
||||||
* 1st-level cookie may indicate level 1 or flattened.
|
* 1st-level cookie may indicate level 1 or flattened.
|
||||||
*/
|
*/
|
||||||
|
pspdir = new_psp_dir(ctx, cb_config->multi_level);
|
||||||
|
|
||||||
|
if (cookie == PSP_COOKIE)
|
||||||
|
ctx->pspdir = pspdir;
|
||||||
|
else if (cookie == PSPL2_COOKIE) {
|
||||||
|
if (ctx->pspdir2 == NULL)
|
||||||
|
ctx->pspdir2 = pspdir;
|
||||||
|
else if (ctx->pspdir2_b == NULL)
|
||||||
|
ctx->pspdir2_b = pspdir;
|
||||||
|
}
|
||||||
|
|
||||||
if (!cb_config->multi_level)
|
if (!cb_config->multi_level)
|
||||||
level = PSP_BOTH;
|
level = PSP_BOTH;
|
||||||
else if (cookie == PSPL2_COOKIE)
|
else if (cookie == PSPL2_COOKIE)
|
||||||
@ -1071,8 +1080,6 @@ static void integrate_psp_firmwares(context *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) (pspdir2); /* TODO: To be removed in next CLs */
|
|
||||||
(void) (pspdir2_b);
|
|
||||||
fill_dir_header(pspdir, count, cookie, ctx);
|
fill_dir_header(pspdir, count, cookie, ctx);
|
||||||
ctx->current_table = current_table_save;
|
ctx->current_table = current_table_save;
|
||||||
}
|
}
|
||||||
@ -1233,8 +1240,6 @@ static void integrate_bios_levels(context *ctx)
|
|||||||
ctx->current_table = current_table_save;
|
ctx->current_table = current_table_save;
|
||||||
}
|
}
|
||||||
static void integrate_bios_firmwares(context *ctx,
|
static void integrate_bios_firmwares(context *ctx,
|
||||||
bios_directory_table *biosdir,
|
|
||||||
bios_directory_table *biosdir2,
|
|
||||||
amd_bios_entry *fw_table,
|
amd_bios_entry *fw_table,
|
||||||
uint32_t cookie,
|
uint32_t cookie,
|
||||||
amd_cb_config *cb_config)
|
amd_cb_config *cb_config)
|
||||||
@ -1246,6 +1251,18 @@ static void integrate_bios_firmwares(context *ctx,
|
|||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint64_t source;
|
uint64_t source;
|
||||||
uint32_t current_table_save;
|
uint32_t current_table_save;
|
||||||
|
bios_directory_table *biosdir;
|
||||||
|
|
||||||
|
biosdir = new_bios_dir(ctx, cb_config->multi_level);
|
||||||
|
|
||||||
|
if (cookie == BHD_COOKIE)
|
||||||
|
ctx->biosdir = biosdir;
|
||||||
|
else if (cookie == BHDL2_COOKIE) {
|
||||||
|
if (ctx->biosdir2 == NULL)
|
||||||
|
ctx->biosdir2 = biosdir;
|
||||||
|
else if (ctx->biosdir2_b == NULL)
|
||||||
|
ctx->biosdir2_b = biosdir;
|
||||||
|
}
|
||||||
|
|
||||||
/* This function can create a primary table, a secondary table, or a
|
/* This function can create a primary table, a secondary table, or a
|
||||||
* flattened table which contains all applicable types. These if-else
|
* flattened table which contains all applicable types. These if-else
|
||||||
@ -1377,7 +1394,7 @@ static void integrate_bios_firmwares(context *ctx,
|
|||||||
break;
|
break;
|
||||||
case AMD_BIOS_BIN:
|
case AMD_BIOS_BIN:
|
||||||
/* Don't make a 2nd copy, point to the same one */
|
/* Don't make a 2nd copy, point to the same one */
|
||||||
if (level == BDT_LVL1 && locate_bdt2_bios(biosdir2, &source, &size)) {
|
if (level == BDT_LVL1 && locate_bdt2_bios(ctx->biosdir2, &source, &size)) {
|
||||||
biosdir->entries[count].source = source;
|
biosdir->entries[count].source = source;
|
||||||
biosdir->entries[count].address_mode =
|
biosdir->entries[count].address_mode =
|
||||||
SET_ADDR_MODE(biosdir, AMD_ADDR_REL_BIOS);
|
SET_ADDR_MODE(biosdir, AMD_ADDR_REL_BIOS);
|
||||||
@ -1692,14 +1709,12 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (cb_config.multi_level) {
|
if (cb_config.multi_level) {
|
||||||
/* Do 2nd PSP directory followed by 1st */
|
/* Do 2nd PSP directory followed by 1st */
|
||||||
ctx.pspdir2 = new_psp_dir(&ctx, cb_config.multi_level);
|
integrate_psp_firmwares(&ctx,
|
||||||
integrate_psp_firmwares(&ctx, ctx.pspdir2, NULL, NULL,
|
|
||||||
amd_psp_fw_table, PSPL2_COOKIE, &cb_config);
|
amd_psp_fw_table, PSPL2_COOKIE, &cb_config);
|
||||||
if (cb_config.recovery_ab && !cb_config.recovery_ab_single_copy) {
|
if (cb_config.recovery_ab && !cb_config.recovery_ab_single_copy) {
|
||||||
/* Create a copy of PSP Directory 2 in the backup slot B.
|
/* Create a copy of PSP Directory 2 in the backup slot B.
|
||||||
Related biosdir2_b copy will be created later. */
|
Related biosdir2_b copy will be created later. */
|
||||||
ctx.pspdir2_b = new_psp_dir(&ctx, cb_config.multi_level);
|
integrate_psp_firmwares(&ctx,
|
||||||
integrate_psp_firmwares(&ctx, ctx.pspdir2_b, NULL, NULL,
|
|
||||||
amd_psp_fw_table, PSPL2_COOKIE, &cb_config);
|
amd_psp_fw_table, PSPL2_COOKIE, &cb_config);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
@ -1712,14 +1727,12 @@ int main(int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
ctx.pspdir2_b = NULL; /* More explicitly */
|
ctx.pspdir2_b = NULL; /* More explicitly */
|
||||||
}
|
}
|
||||||
ctx.pspdir = new_psp_dir(&ctx, cb_config.multi_level);
|
integrate_psp_firmwares(&ctx,
|
||||||
integrate_psp_firmwares(&ctx, ctx.pspdir, ctx.pspdir2, ctx.pspdir2_b,
|
|
||||||
amd_psp_fw_table, PSP_COOKIE, &cb_config);
|
amd_psp_fw_table, PSP_COOKIE, &cb_config);
|
||||||
integrate_psp_levels(&ctx, &cb_config);
|
integrate_psp_levels(&ctx, &cb_config);
|
||||||
} else {
|
} else {
|
||||||
/* flat: PSP 1 cookie and no pointer to 2nd table */
|
/* flat: PSP 1 cookie and no pointer to 2nd table */
|
||||||
ctx.pspdir = new_psp_dir(&ctx, cb_config.multi_level);
|
integrate_psp_firmwares(&ctx,
|
||||||
integrate_psp_firmwares(&ctx, ctx.pspdir, NULL, NULL,
|
|
||||||
amd_psp_fw_table, PSP_COOKIE, &cb_config);
|
amd_psp_fw_table, PSP_COOKIE, &cb_config);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1740,15 +1753,11 @@ int main(int argc, char **argv)
|
|||||||
if (have_bios_tables(amd_bios_table)) {
|
if (have_bios_tables(amd_bios_table)) {
|
||||||
if (cb_config.multi_level) {
|
if (cb_config.multi_level) {
|
||||||
/* Do 2nd level BIOS directory followed by 1st */
|
/* Do 2nd level BIOS directory followed by 1st */
|
||||||
ctx.biosdir2 = new_bios_dir(&ctx, cb_config.multi_level);
|
integrate_bios_firmwares(&ctx,
|
||||||
|
|
||||||
integrate_bios_firmwares(&ctx, ctx.biosdir2, NULL,
|
|
||||||
amd_bios_table, BHDL2_COOKIE, &cb_config);
|
amd_bios_table, BHDL2_COOKIE, &cb_config);
|
||||||
if (cb_config.recovery_ab) {
|
if (cb_config.recovery_ab) {
|
||||||
if (ctx.pspdir2_b != NULL) {
|
if (ctx.pspdir2_b != NULL) {
|
||||||
ctx.biosdir2_b = new_bios_dir(&ctx,
|
integrate_bios_firmwares(&ctx,
|
||||||
cb_config.multi_level);
|
|
||||||
integrate_bios_firmwares(&ctx, ctx.biosdir2_b, NULL,
|
|
||||||
amd_bios_table, BHDL2_COOKIE,
|
amd_bios_table, BHDL2_COOKIE,
|
||||||
&cb_config);
|
&cb_config);
|
||||||
}
|
}
|
||||||
@ -1759,15 +1768,13 @@ int main(int argc, char **argv)
|
|||||||
ctx.biosdir2_b, AMD_FW_BIOS_TABLE,
|
ctx.biosdir2_b, AMD_FW_BIOS_TABLE,
|
||||||
TABLE_ALIGNMENT);
|
TABLE_ALIGNMENT);
|
||||||
} else {
|
} else {
|
||||||
ctx.biosdir = new_bios_dir(&ctx, cb_config.multi_level);
|
integrate_bios_firmwares(&ctx,
|
||||||
integrate_bios_firmwares(&ctx, ctx.biosdir, ctx.biosdir2,
|
|
||||||
amd_bios_table, BHD_COOKIE, &cb_config);
|
amd_bios_table, BHD_COOKIE, &cb_config);
|
||||||
integrate_bios_levels(&ctx);
|
integrate_bios_levels(&ctx);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* flat: BHD1 cookie and no pointer to 2nd table */
|
/* flat: BHD1 cookie and no pointer to 2nd table */
|
||||||
ctx.biosdir = new_bios_dir(&ctx, cb_config.multi_level);
|
integrate_bios_firmwares(&ctx,
|
||||||
integrate_bios_firmwares(&ctx, ctx.biosdir, NULL,
|
|
||||||
amd_bios_table, BHD_COOKIE, &cb_config);
|
amd_bios_table, BHD_COOKIE, &cb_config);
|
||||||
}
|
}
|
||||||
if (!cb_config.use_combo) {
|
if (!cb_config.use_combo) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user