From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05B4C33E372 for ; Mon, 26 Jan 2026 15:16:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769440561; cv=none; b=XlGxXyvIRIZUFbUpcIyQLrTULVWk7N/daM2zzFL0kl2q3LGcpbT68cGEg/8pEZ+wYPDfhmjC3rP95XmOqylaBMgj1lJQRT+IRxlxTimQ6O40OyNJm3wPA6jifarljQrdMO7r7VJBTEPTJ0iYmfkiYrA9mFTMMWhbpFIkH9FYzWs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769440561; c=relaxed/simple; bh=A0jY92wyX2bqsQxup7u8Vb5ne5fmMKlzadU2xuhFYb0=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=HB25kXXUKU4/U3G5sUr2U1/pdDozrdQUtpx7B9wxEnrSxGb1BL9BP9CZxYP8cxEr8GadiYSZ4J2xny+QmkFwCSk00bAIwjeOgvdGOX9MaQqY9/7KwMkKKzTUOnfRsl/ULk7nehi1Ovl4S9l1Vcs1i2bfDO6tlMvhD/FN5Ff/5qo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Pg7SZbn3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Pg7SZbn3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DBC18C116C6; Mon, 26 Jan 2026 15:15:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1769440560; bh=A0jY92wyX2bqsQxup7u8Vb5ne5fmMKlzadU2xuhFYb0=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=Pg7SZbn3VFWD6R6aeesJto9rNmValbiBBqcZddQN9bNpUJbDyfTx3nlbYBSh0a6Dr 8g0dwgblry564zcbhZ/0Qv2rbH3HYz1BRb8Hx2AaOc+XhMIIkldR0Wa1unPCk8gay8 MH6NN9HmtgAighz8SUSuztLrwXgbJWPDEskcVUBYjtycLBM5vXWlXAzP7VcjaY6mJ5 2/uvSYedvtgnIfnwCLCYh0h44c+8OMGZidSR2ZOWXDkcwu6y2byAlJD2MNIWOLSOtN 7y/KVVTahO5fU+RSViLddyAExxFpkkY/YrbU5FKVNPJo+WOlDiBvroBkzMw4y6U0Hz gwmrtJbDilMTw== Message-ID: <3c3f850b-0acb-4238-8cfc-498496b230a4@kernel.org> Date: Mon, 26 Jan 2026 09:15:58 -0600 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 5/5] x86/CPU/AMD: Print AGESA string from DMI additional information entry To: Borislav Petkov Cc: Yazen Ghannam , Jean Delvare , linux-kernel@vger.kernel.org References: <20260123213056.861317-1-superm1@kernel.org> <20260123213056.861317-6-superm1@kernel.org> <20260126130755.GIaXdnK65MTIiXqg-l@fat_crate.local> Content-Language: en-US From: "Mario Limonciello (AMD) (kernel.org)" In-Reply-To: <20260126130755.GIaXdnK65MTIiXqg-l@fat_crate.local> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 1/26/2026 7:07 AM, Borislav Petkov wrote: > On Fri, Jan 23, 2026 at 03:30:56PM -0600, Mario Limonciello (AMD) wrote: >> From: Yazen Ghannam >> >> Type 40 entries (Additional Information) are summarized in section 7.41 >> as part of the SMBIOS specification. Generally, these entries aren't >> interesting to save. >> >> However on some AMD Zen systems, the AGESA version is stored here. This >> is useful to save to the kernel message logs for debugging. It can be >> used to cross-reference issues. >> >> Implement an iterator for the Additional Information entries. Use this >> to find and print the AGESA string. Do so in AMD code, since the use >> case is AMD-specific. > > Please do not explain the diff. > 👍 >> Signed-off-by: Yazen Ghannam >> Co-developed-by: "Mario Limonciello (AMD)" >> Signed-off-by: "Mario Limonciello (AMD)" >> --- >> v5: >> * Return "" in !CONFIG_DMI case (LKP robot, Yazen) >> v4: >> * New patch (based upon older versions though) >> --- >> arch/x86/kernel/cpu/amd.c | 53 +++++++++++++++++++++++++++++++++++++ >> drivers/firmware/dmi_scan.c | 3 ++- >> include/linux/dmi.h | 18 +++++++++++++ >> 3 files changed, 73 insertions(+), 1 deletion(-) >> >> diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c >> index bc94ff1e250ad..aa04a27aeb107 100644 >> --- a/arch/x86/kernel/cpu/amd.c >> +++ b/arch/x86/kernel/cpu/amd.c >> @@ -1,6 +1,7 @@ >> // SPDX-License-Identifier: GPL-2.0-only >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -1404,3 +1405,55 @@ static __init int print_s5_reset_status_mmio(void) >> return 0; >> } >> late_initcall(print_s5_reset_status_mmio); >> + >> +static void __init amd_dmi_scan_additional(const struct dmi_header *d, void *p) > > It's a static - no need for the "amd_" prefix. > >> +{ >> + struct dmi_a_info *info = (struct dmi_a_info *)d; >> + void *next, *end; > > This needs a > > if (!IS_ENABLED(CONFIG_DMI)) > return; > 👍 >> + >> + /* >> + * DMI Additional Info table has a 'count' field. But it's not very >> + * helpful since the entries are variable length. So don't use it. >> + */ >> + if (info->header.type != DMI_ENTRY_ADDITIONAL || >> + info->header.length < DMI_A_INFO_MIN_SIZE) >> + return; >> + >> + /* >> + * Get the first entry. >> + * The minimum table size guarantees at least one entry is present. >> + */ >> + next = (void *)(info + 1); >> + end = (void *)info + info->header.length; > > This end needs to be corrected to some sane upper limit because we don't trust > firmware one bit. > 👍 >> + >> + do { >> + struct dmi_a_info_entry *entry; >> + const char *string_ptr; >> + >> + entry = (struct dmi_a_info_entry *)next; >> + >> + /* >> + * Not much can be done to validate data. At least the entry >> + * length shouldn't be 0. >> + */ >> + if (!entry->length) >> + return; >> + >> + string_ptr = dmi_string_nosave(&info->header, entry->str_num); >> + >> + /* Only one AGESA string is expected. */ > > Superfluous comment. 👍 > >> + if (!strncmp(string_ptr, "AGESA", 5)) { >> + pr_info("%s\n", string_ptr); > > So on this Zen5 laptop here, this dumps: > > [ 0.840480] AGESA!V9 StrixPI-FP8 1.0.0.1d > > I guess we can make that: > > [ 0.840480] AGESA: V9 StrixPI-FP8 1.0.0.1d > > no? I think if slicing and dicing the string I would instead have us "match" "AGESA!V9" instead and then spit it out like this: AGESA: StrixPI-FP8 1.0.0.1d Then if there's a v10 sentinel some day or something like that we would add a new match then.