From 5d6061d0ba73ce268f1d45f434827d8df7466700 Mon Sep 17 00:00:00 2001 From: Felix Held Date: Tue, 10 Mar 2026 15:30:05 +0100 Subject: [PATCH] util/amdfwtool: add support for Strix Halo SoC For amdfwtool, the Strix Halo SoC is similar to the Glinda SoC. Main difference is the ISH PSP ID which was taken from the ISH table from the UEFI reference implementation. Change-Id: I6262dc8d72144ccdcd814586ef72684c15d3561d Signed-off-by: Felix Held Reviewed-on: https://review.coreboot.org/c/coreboot/+/91638 Reviewed-by: Ritul Guru Reviewed-by: Alicja Michalska Tested-by: build bot (Jenkins) --- util/amdfwtool/amdfwtool.c | 7 +++++++ util/amdfwtool/amdfwtool.h | 1 + util/amdfwtool/data_parse.c | 6 +++++- util/amdfwtool/signed_psp.c | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/util/amdfwtool/amdfwtool.c b/util/amdfwtool/amdfwtool.c index af24697bca..6cd991110a 100644 --- a/util/amdfwtool/amdfwtool.c +++ b/util/amdfwtool/amdfwtool.c @@ -675,6 +675,7 @@ static void fill_psp_directory_to_efs(embedded_firmware *amd_romsig, void *pspdi case PLATFORM_RENOIR: case PLATFORM_GENOA: case PLATFORM_FAEGAN: + case PLATFORM_STRIXHALO: default: /* for combo, it is also combo_psp_directory */ amd_romsig->new_psp_directory = @@ -707,6 +708,7 @@ static void fill_bios_directory_to_efs(embedded_firmware *amd_romsig, void *bios case PLATFORM_PHOENIX: case PLATFORM_GLINDA: case PLATFORM_FAEGAN: + case PLATFORM_STRIXHALO: break; case PLATFORM_CARRIZO: case PLATFORM_STONEYRIDGE: @@ -752,6 +754,9 @@ static uint32_t get_psp_id(enum platform soc_id) case PLATFORM_FAEGAN: psp_id = 0xbc0e1000; break; + case PLATFORM_STRIXHALO: + psp_id = 0xbc0e0900; + break; case PLATFORM_CARRIZO: default: psp_id = 0; @@ -1620,6 +1625,7 @@ static int set_efs_table(uint8_t soc_id, amd_cb_config *cb_config, case PLATFORM_GLINDA: case PLATFORM_GENOA: case PLATFORM_FAEGAN: + case PLATFORM_STRIXHALO: amd_romsig->spi_readmode_f17_mod_30_3f = cb_config->efs_spi_readmode; amd_romsig->spi_fastspeed_f17_mod_30_3f = cb_config->efs_spi_speed; switch (cb_config->efs_spi_micron_flag) { @@ -1679,6 +1685,7 @@ static bool is_initial_alignment_required(enum platform soc_id) case PLATFORM_PHOENIX: case PLATFORM_GLINDA: case PLATFORM_FAEGAN: + case PLATFORM_STRIXHALO: return false; default: return true; diff --git a/util/amdfwtool/amdfwtool.h b/util/amdfwtool/amdfwtool.h index fe3f72b85d..e0fae5e697 100644 --- a/util/amdfwtool/amdfwtool.h +++ b/util/amdfwtool/amdfwtool.h @@ -35,6 +35,7 @@ enum platform { PLATFORM_GLINDA, PLATFORM_GENOA, PLATFORM_FAEGAN, + PLATFORM_STRIXHALO, }; typedef enum _amd_fw_type { diff --git a/util/amdfwtool/data_parse.c b/util/amdfwtool/data_parse.c index 2ea37efd67..961b6a1c18 100644 --- a/util/amdfwtool/data_parse.c +++ b/util/amdfwtool/data_parse.c @@ -119,6 +119,8 @@ static enum platform identify_platform(char *soc_name) return PLATFORM_GENOA; else if (!strcasecmp(soc_name, "Faegan")) return PLATFORM_FAEGAN; + else if (!strcasecmp(soc_name, "Strixhalo")) + return PLATFORM_STRIXHALO; else return PLATFORM_UNKNOWN; } @@ -791,7 +793,8 @@ static uint8_t process_one_line(char *oneline, regmatch_t *match, char *dir, static bool needs_ish(enum platform platform_type) { if (platform_type == PLATFORM_MENDOCINO || platform_type == PLATFORM_PHOENIX || - platform_type == PLATFORM_GLINDA || platform_type == PLATFORM_FAEGAN) + platform_type == PLATFORM_GLINDA || platform_type == PLATFORM_FAEGAN || + platform_type == PLATFORM_STRIXHALO) return true; else return false; @@ -818,6 +821,7 @@ static bool is_second_gen(enum platform platform_type) case PLATFORM_GLINDA: case PLATFORM_GENOA: case PLATFORM_FAEGAN: + case PLATFORM_STRIXHALO: return true; case PLATFORM_UNKNOWN: default: diff --git a/util/amdfwtool/signed_psp.c b/util/amdfwtool/signed_psp.c index 18215a04c2..14d0a13b9b 100644 --- a/util/amdfwtool/signed_psp.c +++ b/util/amdfwtool/signed_psp.c @@ -41,6 +41,7 @@ static uint16_t get_psp_fw_type(enum platform soc_id, struct amd_fw_header *head case PLATFORM_PHOENIX: case PLATFORM_GLINDA: case PLATFORM_FAEGAN: + case PLATFORM_STRIXHALO: /* Fallback to fw_type if fw_id is not populated, which serves the same purpose on older SoCs. */ return header->fw_id ? header->fw_id : header->fw_type;