This patch gets more infomation for "BIOS Model name" from the file "/sys/firmware/dmi/entries/4-0/raw" Before this patch, we can get the output from Centos 7.9: ---------------------------------------------------- BIOS Vendor ID: Ampere(TM) Model name: Neoverse-N1 BIOS Model name: Ampere(TM) Altra(TM) Processor ---------------------------------------------------- After this patch, in Centos 7.9, we get: ---------------------------------------------------- BIOS Vendor ID: Ampere(TM) Model name: Neoverse-N1 BIOS Model name: Ampere(TM) Altra(TM) Processor Q00-00 CPU @ 2.8GHz ---------------------------------------------------- Signed-off-by: Huang Shijie <shijie@xxxxxxxxxxxxxxxxxxxxxx> --- sys-utils/lscpu-arm.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c index 885aadc36..1af689649 100644 --- a/sys-utils/lscpu-arm.c +++ b/sys-utils/lscpu-arm.c @@ -317,6 +317,8 @@ static int arm_rXpY_decode(struct lscpu_cputype *ct) #define PROC_MFR_OFFSET 0x07 #define PROC_VERSION_OFFSET 0x10 +#define PROC_CURRENT_SPEED 0x16 +#define PROC_PART_NUM 0x22 /* * Use firmware to get human readable names @@ -324,7 +326,8 @@ static int arm_rXpY_decode(struct lscpu_cputype *ct) static int arm_smbios_decode(struct lscpu_cputype *ct) { uint8_t data[8192]; - char buf[128], *str; + char buf[128], *str, *str1; + uint16_t current_speed; struct lscpu_dmi_header h; int fd; ssize_t rs; @@ -348,8 +351,12 @@ static int arm_smbios_decode(struct lscpu_cputype *ct) } str = dmi_string(&h, data[PROC_VERSION_OFFSET]); - if (str) { - xstrncpy(buf, str, 127); + str1 = dmi_string(&h, data[PROC_PART_NUM]); + current_speed = *((uint16_t *)(&data[PROC_CURRENT_SPEED])); + if (str || str1) { + snprintf(buf, sizeof(buf), "%s %s CPU @ %d.%dGHz", + (str ?: ""), (str1 ?: ""), + current_speed / 1000, (current_speed % 1000) / 100); ct->bios_modelname = xstrdup(buf); } -- 2.30.2