[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <3c3f850b-0acb-4238-8cfc-498496b230a4@kernel.org>
Date: Mon, 26 Jan 2026 09:15:58 -0600
From: "Mario Limonciello (AMD) (kernel.org)" <superm1@...nel.org>
To: Borislav Petkov <bp@...en8.de>
Cc: Yazen Ghannam <yazen.ghannam@....com>, Jean Delvare <jdelvare@...e.com>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v5 5/5] x86/CPU/AMD: Print AGESA string from DMI
additional information entry
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 <yazen.ghannam@....com>
>>
>> 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 <yazen.ghannam@....com>
>> Co-developed-by: "Mario Limonciello (AMD)" <superm1@...nel.org>
>> Signed-off-by: "Mario Limonciello (AMD)" <superm1@...nel.org>
>> ---
>> 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 <linux/export.h>
>> #include <linux/bitops.h>
>> +#include <linux/dmi.h>
>> #include <linux/elf.h>
>> #include <linux/mm.h>
>> #include <linux/kvm_types.h>
>> @@ -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.
Powered by blists - more mailing lists