[RFC PATCH 2/2] lscpu: add bios_family

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In the arm platform, we do not have the "CPU family" as X86.
In the linux kernel, it is hardcode to set the "CPU architecuture:8"
which should be changed for arm v9 in future.

This patch adds "bios_family" field, which we can get from the DMI table.
In the ampere Altra platform, we can get the new lscpu output:
    ----------------------------------------------------------------
	Architecture:                    aarch64
	CPU op-mode(s):                  32-bit, 64-bit
	Byte Order:                      Little Endian
	CPU(s):                          160
	On-line CPU(s) list:             0-159
	Vendor ID:                       ARM
	BIOS Vendor ID:                  Ampere(R)
	Model name:                      Neoverse-N1
	BIOS Model name:                 Ampere(R) Altra(R) Processor Q00-00 CPU @ 3.0GHz
	BIOS CPU family:                 257
	Model:                           1
	Thread(s) per core:              1
    ----------------------------------------------------------------

Signed-off-by: Huang Shijie <shijie@xxxxxxxxxxxxxxxxxxxxxx>
---
 This patch is just RFC, if it is not proper, we can drop it.

---
 sys-utils/lscpu-cputype.c |  1 +
 sys-utils/lscpu-dmi.c     | 10 ++++++++++
 sys-utils/lscpu.c         |  2 ++
 sys-utils/lscpu.h         |  2 ++
 4 files changed, 15 insertions(+)

diff --git a/sys-utils/lscpu-cputype.c b/sys-utils/lscpu-cputype.c
index d5ca8e1f1..d5f0eb7d6 100644
--- a/sys-utils/lscpu-cputype.c
+++ b/sys-utils/lscpu-cputype.c
@@ -81,6 +81,7 @@ void lscpu_unref_cputype(struct lscpu_cputype *ct)
 		free(ct->model);
 		free(ct->modelname);
 		free(ct->bios_modelname);
+		free(ct->bios_family);
 		free(ct->revision);	/* alternative for model (ppc) */
 		free(ct->stepping);
 		free(ct->bogomips);
diff --git a/sys-utils/lscpu-dmi.c b/sys-utils/lscpu-dmi.c
index d05380891..ef82cf828 100644
--- a/sys-utils/lscpu-dmi.c
+++ b/sys-utils/lscpu-dmi.c
@@ -73,6 +73,11 @@ int parse_dmi_table(uint16_t len, uint16_t num,
 				di->processor_version = dmi_string(&h, data[0x10]);
 				di->current_speed = *((uint16_t *)(&data[0x16]));
 				di->part_num = dmi_string(&h, data[0x22]);
+
+				if (data[0x6] == 0xfe)
+					di->processor_family = *((uint16_t *)(&data[0x28]));
+				else
+					di->processor_family = data[0x6];
 			}
 			di->sockets++;
 			break;
@@ -116,6 +121,11 @@ int dmi_decode_cputype(struct lscpu_cputype *ct)
 			di.current_speed/1000, (di.current_speed % 1000) / 100);
 	ct->bios_modelname = xstrdup(buf);
 
+	/* Get CPU family */
+	memset(buf, 0, sizeof(buf));
+	sprintf(buf, "%d", di.processor_family);
+	ct->bios_family = xstrdup(buf);
+
 	free(data);
 	return 0;
 }
diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c
index 5a99a9a5b..827e84a6d 100644
--- a/sys-utils/lscpu.c
+++ b/sys-utils/lscpu.c
@@ -863,6 +863,8 @@ print_summary_cputype(struct lscpu_cxt *cxt,
 		sec = add_summary_s(tb, sec, _("Model name:"), ct->modelname);
 	if (ct->bios_modelname)
 		add_summary_s(tb, sec, _("BIOS Model name:"), ct->bios_modelname);
+	if (ct->bios_family)
+		add_summary_s(tb, sec, _("BIOS CPU family:"), ct->bios_family);
 	if (ct->machinetype)
 		add_summary_s(tb, sec, _("Machine type:"), ct->machinetype);
 	if (ct->family)
diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h
index 4dc8e0a23..79477b469 100644
--- a/sys-utils/lscpu.h
+++ b/sys-utils/lscpu.h
@@ -65,6 +65,7 @@ struct lscpu_cputype {
 	char	*model;
 	char	*modelname;
 	char	*bios_modelname; /* aarch64 */
+	char	*bios_family; /* aarch64 */
 	char	*revision;	/* alternative for model (ppc) */
 	char	*stepping;
 	char    *bogomips;
@@ -318,6 +319,7 @@ struct dmi_info {
 	int sockets;
 
 	/* Processor Information */
+	uint16_t processor_family;
 	char *processor_manufacturer;
 	char *processor_version;
 	uint16_t current_speed;
-- 
2.30.2




[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux