Re: [PATCH] lscpu: Add FUJITSU aarch64 A64FX cpupart

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

 



On Thu, Oct 15, 2020 at 01:53:21PM -0500, Jeffrey Bastian wrote:
> On Thu, Oct 08, 2020 at 08:10:12AM -0400, Masayoshi Mizuma wrote:
> > Hi Jeffrey,
> > 
> > Could you try the following patch?
> 
> This patch works for X-Gene and eMAG, but unfortunately it broke the
> output on the Altra.  The Altra is based on the Neoverse N1 design from
> ARM and so it inherited the N1 values in the MIDR register (at least on
> the prototype I'm using).
> 
> Before your patch:
> 
> [root@ampere-altra ~]# ./lscpu | grep -e Vendor -e Model -e Stepping
> Vendor ID:                       Ampere(TM)
> Model:                           1
> Model name:                      Ampere(TM) Altra(TM) Processor
> Stepping:                        0x3
> 
> After your patch:
> 
> [root@ampere-altra ~]# ./lscpu | grep -e Vendor -e Model -e Stepping
> Vendor ID:                       ARM
> Model:                           1
> Model name:                      Neoverse-N1
> Stepping:                        r3p1
> 
> Raw cpuinfo values:
> 
> [root@ampere-altra ~]# grep -m5 CPU /proc/cpuinfo
> CPU implementer	: 0x41
> CPU architecture: 8
> CPU variant	: 0x3
> CPU part	: 0xd0c
> CPU revision	: 1

Thank you for your testing! Probably the Altra should use SMBIOS info, not
hard corded table.

I'll send the v2.

- Masa
> 
> 
> 
> > ====================================================================
> > From: Masayoshi Mizuma <m.mizuma@xxxxxxxxxxxxxx>
> > Subject: [PATCH] lscpu-arm: Set the order to search the model name
> > 
> > After commit: 367c85c47 ("lscpu: use SMBIOS tables on ARM for lscpu"),
> > Model name for A64FX shows like as:
> > 
> >   Model name:       461F0010
> > 
> > That's because 367c85c47 changes to get the modelname from Processor
> > Version of SMBIOS.
> > 
> > The SMBIOS info would be great if the system is based on SBBR v1.2E and
> > BBR v1.0 because the specs require the Processor Version of SMBIOS
> > as "This field must provide a human readable description of the processor
> > part number".
> > 
> > However, it's not good for the systems aren't based on the specs,
> > like A64FX. Such systems need to have the model name to the hard
> > corded table.
> > 
> > Let's set the order; first, search the hard corded table, then SMBIOS.
> > 
> > Note, some systems, like APM X-Gene, may not match the information
> > between MIDR register (/proc/cpuinfo) and SMBIOS. To be consistency,
> > use Processor Manufacturer of SMBIOS when Processor Version is used
> > even if the hard corded table has the vendor id.
> > 
> > Signed-off-by: Masayoshi Mizuma <m.mizuma@xxxxxxxxxxxxxx>
> > ---
> > sys-utils/lscpu-arm.c | 30 ++++++++++++++++--------------
> > 1 file changed, 16 insertions(+), 14 deletions(-)
> > 
> > diff --git a/sys-utils/lscpu-arm.c b/sys-utils/lscpu-arm.c
> > index 20c7291e5..4e48f6d65 100644
> > --- a/sys-utils/lscpu-arm.c
> > +++ b/sys-utils/lscpu-arm.c
> > @@ -110,7 +110,6 @@ static const struct id_part cavium_part[] = {
> > };
> > 
> > static const struct id_part apm_part[] = {
> > -    { 0x000, "X-Gene" },
> >     { -1, "unknown" },
> > };
> > 
> > @@ -288,6 +287,7 @@ static int __arm_cpu_smbios(struct lscpu_desc *desc)
> > 	struct lscpu_dmi_header h;
> > 	int fd;
> > 	ssize_t rs;
> > +	int use_smbios = 0;
> > 
> > 	fd = open(_PATH_SYS_DMI_TYPE4, O_RDONLY);
> > 	if (fd < 0)
> > @@ -301,16 +301,21 @@ static int __arm_cpu_smbios(struct lscpu_desc *desc)
> > 
> > 	to_dmi_header(&h, data);
> > 
> > -	str = dmi_string(&h, data[PROC_MFR_OFFSET]);
> > -	if (str) {
> > -		xstrncpy(buf, str, 127);
> > -		desc->vendor = xstrdup(buf);
> > +	if (!desc->modelname) {
> > +		str = dmi_string(&h, data[PROC_VERSION_OFFSET]);
> > +		if (str) {
> > +			xstrncpy(buf, str, 127);
> > +			desc->modelname = xstrdup(buf);
> > +			use_smbios = 1;
> > +		}
> > 	}
> > 
> > -	str = dmi_string(&h, data[PROC_VERSION_OFFSET]);
> > -	if (str) {
> > -		xstrncpy(buf, str, 127);
> > -		desc->modelname = xstrdup(buf);
> > +	if ((startswith(desc->vendor, "0x")) || use_smbios) {
> > +		str = dmi_string(&h, data[PROC_MFR_OFFSET]);
> > +		if (str) {
> > +			xstrncpy(buf, str, 127);
> > +			desc->vendor = xstrdup(buf);
> > +		}
> > 	}
> > 
> > 	return 0;
> > @@ -318,14 +323,11 @@ static int __arm_cpu_smbios(struct lscpu_desc *desc)
> > 
> > void arm_cpu_decode(struct lscpu_desc *desc, struct lscpu_modifier *mod)
> > {
> > -	int rc = -1;
> > +	__arm_cpu_decode(desc);
> > 
> > 	/* use SMBIOS Type 4 data if available,
> > 	 * else fall back to manual decoding using the tables above */
> > 	if (mod->system == SYSTEM_LIVE &&
> > 	    access(_PATH_SYS_DMI_TYPE4, R_OK) == 0)
> > -		rc = __arm_cpu_smbios(desc);
> > -
> > -	if (rc)
> > -		__arm_cpu_decode(desc);
> > +		__arm_cpu_smbios(desc);
> > }
> > -- 
> > 2.27.0
> > 
> > 
> > Thanks,
> > Masa
> > 
> 
> -- 
> Jeff Bastian
> Kernel QE - Hardware Enablement
> Red Hat
> 



[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