Re: [PATCH v2 1/2] lscpu-arm: Include the ARM SMC CC SOC_ID name.
Paul Benoit <[email protected]> Wed, 20 May 2026 10:33:45 -0400
| Newsgroups | org.kernel.vger.util-linux |
|---|---|
| Message-ID | <[email protected]> |
Hi, I'm checking in to see if there are any comments on v2 of my patch set. Since it been a while since I sent the patches, below is a reminder of where things stand after the maintainer comments and my responses on v1. v2 is no longer using the SMC CC SOC_ID Name as a proxy/override for entries in the CPU parts table(s). While it would be nice to not have to update the CPU parts tables when new SMC CC compliant SoCs are created, it would only have worked if all CPUs of a given SoC are of the same type. v2 will display the optional SMC CC SOC_ID name in a manner similar to how the "BIOS Model name" is displayed. the "SMCCC SOC_ID name" and "BIOS Model name" strings will not necessarily be similar as the SoC and system/firmware may be produced by different companies/ organizations. v2 corrects the names of the 2 existing entries in the Ampere Computing cpu part table. Regards, Paul On 2/11/2026 4:23 PM, Paul Benoit wrote: > On ARM SMC CC 1.6 compliant systems, output the optional SMC CC SOC_ID > name if available. > > Vendor ID: Ampere > BIOS Vendor ID: Ampere (R) > Model name: Ampere-1a > SMCCC SOC_ID name: AmpereOne (R) A192-32X > BIOS Model name: AmpereOne (R) A192-32X CPU @ 3.2GH > > Signed-off-by: Paul Benoit <[email protected]> > --- > sys-utils/lscpu-arm.c | 38 ++++++++++++++++++++++++++++++++++++++ > sys-utils/lscpu.c | 2 ++ > sys-utils/lscpu.h | 4 ++++ > 3 files changed, 44 insertions(+) > > diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c > index ed255a3c7..f388080ad 100644 > --- a/sys-utils/lscpu-arm.c > +++ b/sys-utils/lscpu-arm.c > @@ -11,6 +11,7 @@ > * The information here is gathered from > * - ARM manuals > * - Linux kernel: arch/armX/include/asm/cputype.h > + * - Linux kernel: Documentation/ABI/testing/sysfs-devices-soc > * - GCC sources: config/arch/arch-cores.def > * - Ancient wisdom > * - SMBIOS tables (if applicable) > @@ -460,6 +461,41 @@ static int arm_rXpY_decode(struct lscpu_cputype *ct) > return 0; > } > > +static void on_smc_platform_get_socidname(struct lscpu_cputype *ct) > +{ > + char *machinename = NULL; > + char *soc_id_jep106_id_str = NULL; > + > + /* On systems that support SMC CC (Secure Monitor Call Calling > + * Convention, get the SOC_ID name. The Linux kernel obtains it from > + * Trusted Firmware via an SMC CC call, and sets > + * /sys/bus/soc/devices/soc0/machine _PATH_SOC_ID to this value. lscpu > + * will obtain the value from there. > + * > + * Documentation/ABI/testing/sysfs-devices-soc, in the Linux kernel > + * source tree, gives insight into detecting a SMC CC compliant system > + * by checking that start of the _PATH_SOC_ID value for "jep106:". > + */ > + ul_path_read_string(NULL, &soc_id_jep106_id_str, _PATH_SOC_ID); > + > + if (soc_id_jep106_id_str) { > + if (strncmp(soc_id_jep106_id_str, "jep106:", 7) == 0) { > + ul_path_read_string(NULL, &machinename, > + _PATH_SOC_MACHINENAME); > + if (machinename) { > + if (strnlen(machinename, sizeof(machinename))) { > + free(ct->socid_name); > + ct->socid_name = xstrdup(machinename); > + } > + > + free(machinename); > + } > + } > + > + free(soc_id_jep106_id_str); > + } > +} > + > static void arm_decode(struct lscpu_cxt *cxt, struct lscpu_cputype *ct) > { > if (is_live(cxt) && access(_PATH_SYS_DMI, R_OK) == 0) > @@ -468,6 +504,8 @@ static void arm_decode(struct lscpu_cxt *cxt, struct lscpu_cputype *ct) > arm_ids_decode(ct); > arm_rXpY_decode(ct); > > + on_smc_platform_get_socidname(ct); > + > if (is_live(cxt) && cxt->is_cluster) > ct->nr_socket_on_cluster = get_number_of_physical_sockets_from_dmi(); > } > diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c > index 4556aa6df..cd2d00312 100644 > --- a/sys-utils/lscpu.c > +++ b/sys-utils/lscpu.c > @@ -895,6 +895,8 @@ print_summary_cputype(struct lscpu_cxt *cxt, > struct libscols_line *sec) > { > sec = add_summary_s(tb, sec, _("Model name:"), ct->modelname ? ct->modelname : "-"); > + if (ct->socid_name) > + add_summary_s(tb, sec, _("SMCCC SOC_ID name:"), ct->socid_name); > if (ct->bios_modelname) > add_summary_s(tb, sec, _("BIOS Model name:"), ct->bios_modelname); > if (ct->bios_family) > diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h > index 0fae5d29e..b8011bc55 100644 > --- a/sys-utils/lscpu.h > +++ b/sys-utils/lscpu.h > @@ -46,6 +46,8 @@ UL_DEBUG_DECLARE_MASK(lscpu); > #define _PATH_SYS_NODE _PATH_SYS_SYSTEM "/node" > #define _PATH_SYS_DMI "/sys/firmware/dmi/tables/DMI" > #define _PATH_ACPI_PPTT "/sys/firmware/acpi/tables/PPTT" > +#define _PATH_SOC_ID "/sys/devices/soc0/soc_id" > +#define _PATH_SOC_MACHINENAME "/sys/devices/soc0/machine" > > struct lscpu_cache { > int id; /* unique identifier */ > @@ -119,6 +121,8 @@ struct lscpu_cputype { > size_t nr_socket_on_cluster; /* the number of sockets if the is_cluster is 1 */ > > char *isa; /* loongarch */ > + > + char *socid_name; /* aarch64 */ > }; > > /* dispatching modes */