util/amdfwtool: Add changes to reserve BIOS SIG
changes to reserve space for AMD_BIOS_SIG when BIOS image is signed with RTMSignature. Change-Id: Ia832fe83a3e29279c029fefc934c3ef4d335e2ea Signed-off-by: Ritul Guru <ritul.bits@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/66259 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
@@ -291,6 +291,7 @@ amd_fw_entry amd_fw_table[] = {
|
|||||||
|
|
||||||
amd_bios_entry amd_bios_table[] = {
|
amd_bios_entry amd_bios_table[] = {
|
||||||
{ .type = AMD_BIOS_RTM_PUBKEY, .inst = 0, .level = BDT_BOTH },
|
{ .type = AMD_BIOS_RTM_PUBKEY, .inst = 0, .level = BDT_BOTH },
|
||||||
|
{ .type = AMD_BIOS_SIG, .inst = 0, .level = BDT_BOTH },
|
||||||
{ .type = AMD_BIOS_APCB, .inst = 0, .level = BDT_BOTH },
|
{ .type = AMD_BIOS_APCB, .inst = 0, .level = BDT_BOTH },
|
||||||
{ .type = AMD_BIOS_APCB, .inst = 1, .level = BDT_BOTH },
|
{ .type = AMD_BIOS_APCB, .inst = 1, .level = BDT_BOTH },
|
||||||
{ .type = AMD_BIOS_APCB, .inst = 2, .level = BDT_BOTH },
|
{ .type = AMD_BIOS_APCB, .inst = 2, .level = BDT_BOTH },
|
||||||
@@ -1007,6 +1008,7 @@ static void integrate_bios_firmwares(context *ctx,
|
|||||||
if (!(fw_table[i].level & level))
|
if (!(fw_table[i].level & level))
|
||||||
continue;
|
continue;
|
||||||
if (fw_table[i].filename == NULL && (
|
if (fw_table[i].filename == NULL && (
|
||||||
|
fw_table[i].type != AMD_BIOS_SIG &&
|
||||||
fw_table[i].type != AMD_BIOS_APOB &&
|
fw_table[i].type != AMD_BIOS_APOB &&
|
||||||
fw_table[i].type != AMD_BIOS_APOB_NV &&
|
fw_table[i].type != AMD_BIOS_APOB_NV &&
|
||||||
fw_table[i].type != AMD_BIOS_L2_PTR &&
|
fw_table[i].type != AMD_BIOS_L2_PTR &&
|
||||||
@@ -1016,6 +1018,10 @@ static void integrate_bios_firmwares(context *ctx,
|
|||||||
|
|
||||||
/* BIOS Directory items may have additional requirements */
|
/* BIOS Directory items may have additional requirements */
|
||||||
|
|
||||||
|
/* SIG needs a size, else no choice but to skip */
|
||||||
|
if (fw_table[i].type == AMD_BIOS_SIG && !fw_table[i].size)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* Check APOB_NV requirements */
|
/* Check APOB_NV requirements */
|
||||||
if (fw_table[i].type == AMD_BIOS_APOB_NV) {
|
if (fw_table[i].type == AMD_BIOS_APOB_NV) {
|
||||||
if (!fw_table[i].size && !fw_table[i].src)
|
if (!fw_table[i].size && !fw_table[i].src)
|
||||||
@@ -1072,6 +1078,17 @@ static void integrate_bios_firmwares(context *ctx,
|
|||||||
biosdir->entries[count].subprog = fw_table[i].subpr;
|
biosdir->entries[count].subprog = fw_table[i].subpr;
|
||||||
|
|
||||||
switch (fw_table[i].type) {
|
switch (fw_table[i].type) {
|
||||||
|
case AMD_BIOS_SIG:
|
||||||
|
/* Reserve size bytes within amdfw.rom */
|
||||||
|
biosdir->entries[count].size = fw_table[i].size;
|
||||||
|
biosdir->entries[count].source = RUN_CURRENT(*ctx);
|
||||||
|
biosdir->entries[count].address_mode =
|
||||||
|
SET_ADDR_MODE_BY_TABLE(biosdir);
|
||||||
|
memset(BUFF_CURRENT(*ctx), 0xff,
|
||||||
|
biosdir->entries[count].size);
|
||||||
|
ctx->current = ALIGN(ctx->current
|
||||||
|
+ biosdir->entries[count].size, 0x100U);
|
||||||
|
break;
|
||||||
case AMD_BIOS_APOB:
|
case AMD_BIOS_APOB:
|
||||||
biosdir->entries[count].size = fw_table[i].size;
|
biosdir->entries[count].size = fw_table[i].size;
|
||||||
biosdir->entries[count].source = fw_table[i].src;
|
biosdir->entries[count].source = fw_table[i].src;
|
||||||
@@ -1232,6 +1249,7 @@ enum {
|
|||||||
LONGOPT_SPI_READ_MODE = 256,
|
LONGOPT_SPI_READ_MODE = 256,
|
||||||
LONGOPT_SPI_SPEED = 257,
|
LONGOPT_SPI_SPEED = 257,
|
||||||
LONGOPT_SPI_MICRON_FLAG = 258,
|
LONGOPT_SPI_MICRON_FLAG = 258,
|
||||||
|
LONGOPT_BIOS_SIG = 259,
|
||||||
};
|
};
|
||||||
|
|
||||||
static char const optstring[] = {AMDFW_OPT_CONFIG, ':',
|
static char const optstring[] = {AMDFW_OPT_CONFIG, ':',
|
||||||
@@ -1266,6 +1284,7 @@ static struct option long_options[] = {
|
|||||||
{"bios-bin-src", required_argument, 0, AMDFW_OPT_BIOSBIN_SOURCE },
|
{"bios-bin-src", required_argument, 0, AMDFW_OPT_BIOSBIN_SOURCE },
|
||||||
{"bios-bin-dest", required_argument, 0, AMDFW_OPT_BIOSBIN_DEST },
|
{"bios-bin-dest", required_argument, 0, AMDFW_OPT_BIOSBIN_DEST },
|
||||||
{"bios-uncomp-size", required_argument, 0, AMDFW_OPT_BIOS_UNCOMP_SIZE },
|
{"bios-uncomp-size", required_argument, 0, AMDFW_OPT_BIOS_UNCOMP_SIZE },
|
||||||
|
{"bios-sig-size", required_argument, 0, LONGOPT_BIOS_SIG },
|
||||||
{"ucode", required_argument, 0, AMDFW_OPT_UCODE },
|
{"ucode", required_argument, 0, AMDFW_OPT_UCODE },
|
||||||
{"apob-nv-base", required_argument, 0, AMDFW_OPT_APOB_NVBASE },
|
{"apob-nv-base", required_argument, 0, AMDFW_OPT_APOB_NVBASE },
|
||||||
{"apob-nv-size", required_argument, 0, AMDFW_OPT_APOB_NVSIZE },
|
{"apob-nv-size", required_argument, 0, AMDFW_OPT_APOB_NVSIZE },
|
||||||
@@ -1620,6 +1639,11 @@ int main(int argc, char **argv)
|
|||||||
register_fw_addr(AMD_BIOS_BIN, 0, 0, optarg);
|
register_fw_addr(AMD_BIOS_BIN, 0, 0, optarg);
|
||||||
sub = instance = 0;
|
sub = instance = 0;
|
||||||
break;
|
break;
|
||||||
|
case LONGOPT_BIOS_SIG:
|
||||||
|
/* BIOS signature size */
|
||||||
|
register_fw_addr(AMD_BIOS_SIG, 0, 0, optarg);
|
||||||
|
sub = instance = 0;
|
||||||
|
break;
|
||||||
case AMDFW_OPT_UCODE:
|
case AMDFW_OPT_UCODE:
|
||||||
register_bdt_data(AMD_BIOS_UCODE, sub,
|
register_bdt_data(AMD_BIOS_UCODE, sub,
|
||||||
instance, optarg);
|
instance, optarg);
|
||||||
|
@@ -67,7 +67,8 @@ typedef enum _amd_fw_type {
|
|||||||
} amd_fw_type;
|
} amd_fw_type;
|
||||||
|
|
||||||
typedef enum _amd_bios_type {
|
typedef enum _amd_bios_type {
|
||||||
AMD_BIOS_RTM_PUBKEY = 5,
|
AMD_BIOS_RTM_PUBKEY = 0x05,
|
||||||
|
AMD_BIOS_SIG = 0x07,
|
||||||
AMD_BIOS_APCB = 0x60,
|
AMD_BIOS_APCB = 0x60,
|
||||||
AMD_BIOS_APOB = 0x61,
|
AMD_BIOS_APOB = 0x61,
|
||||||
AMD_BIOS_BIN = 0x62,
|
AMD_BIOS_BIN = 0x62,
|
||||||
|
Reference in New Issue
Block a user