xref: /openbmc/linux/arch/x86/lib/cpu.c (revision ac94be498f84f7327533b62faca4c3da64434904)
1457c8996SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2e683014cSPaul Gortmaker #include <linux/types.h>
3e683014cSPaul Gortmaker #include <linux/export.h>
4*04f5bda8SValdis Klētnieks #include <asm/cpu.h>
599f925ceSBorislav Petkov 
x86_family(unsigned int sig)699f925ceSBorislav Petkov unsigned int x86_family(unsigned int sig)
799f925ceSBorislav Petkov {
899f925ceSBorislav Petkov 	unsigned int x86;
999f925ceSBorislav Petkov 
1099f925ceSBorislav Petkov 	x86 = (sig >> 8) & 0xf;
1199f925ceSBorislav Petkov 
1299f925ceSBorislav Petkov 	if (x86 == 0xf)
1399f925ceSBorislav Petkov 		x86 += (sig >> 20) & 0xff;
1499f925ceSBorislav Petkov 
1599f925ceSBorislav Petkov 	return x86;
1699f925ceSBorislav Petkov }
1799f925ceSBorislav Petkov EXPORT_SYMBOL_GPL(x86_family);
1899f925ceSBorislav Petkov 
x86_model(unsigned int sig)1999f925ceSBorislav Petkov unsigned int x86_model(unsigned int sig)
2099f925ceSBorislav Petkov {
2199f925ceSBorislav Petkov 	unsigned int fam, model;
2299f925ceSBorislav Petkov 
2399f925ceSBorislav Petkov 	fam = x86_family(sig);
2499f925ceSBorislav Petkov 
2599f925ceSBorislav Petkov 	model = (sig >> 4) & 0xf;
2699f925ceSBorislav Petkov 
2799f925ceSBorislav Petkov 	if (fam >= 0x6)
2899f925ceSBorislav Petkov 		model += ((sig >> 16) & 0xf) << 4;
2999f925ceSBorislav Petkov 
3099f925ceSBorislav Petkov 	return model;
3199f925ceSBorislav Petkov }
3299f925ceSBorislav Petkov EXPORT_SYMBOL_GPL(x86_model);
3399f925ceSBorislav Petkov 
x86_stepping(unsigned int sig)3499f925ceSBorislav Petkov unsigned int x86_stepping(unsigned int sig)
3599f925ceSBorislav Petkov {
3699f925ceSBorislav Petkov 	return sig & 0xf;
3799f925ceSBorislav Petkov }
3899f925ceSBorislav Petkov EXPORT_SYMBOL_GPL(x86_stepping);
39