1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Helpers for Intel SoC model detection
4  *
5  * Copyright (c) 2019, Intel Corporation.
6  */
7 
8 #ifndef __PLATFORM_DATA_X86_SOC_H
9 #define __PLATFORM_DATA_X86_SOC_H
10 
11 #include <linux/types.h>
12 
13 #if IS_ENABLED(CONFIG_X86)
14 
15 #include <linux/mod_devicetable.h>
16 
17 #include <asm/cpu_device_id.h>
18 
19 #define SOC_INTEL_IS_CPU(soc, type)				\
20 static inline bool soc_intel_is_##soc(void)			\
21 {								\
22 	static const struct x86_cpu_id soc##_cpu_ids[] = {	\
23 		X86_MATCH_INTEL_FAM6_MODEL(type, NULL),		\
24 		{}						\
25 	};							\
26 	const struct x86_cpu_id *id;				\
27 								\
28 	id = x86_match_cpu(soc##_cpu_ids);			\
29 	if (id)							\
30 		return true;					\
31 	return false;						\
32 }
33 
34 SOC_INTEL_IS_CPU(byt, ATOM_SILVERMONT);
35 SOC_INTEL_IS_CPU(cht, ATOM_AIRMONT);
36 SOC_INTEL_IS_CPU(apl, ATOM_GOLDMONT);
37 SOC_INTEL_IS_CPU(glk, ATOM_GOLDMONT_PLUS);
38 SOC_INTEL_IS_CPU(cml, KABYLAKE_L);
39 
40 #undef SOC_INTEL_IS_CPU
41 
42 #else /* IS_ENABLED(CONFIG_X86) */
43 
soc_intel_is_byt(void)44 static inline bool soc_intel_is_byt(void)
45 {
46 	return false;
47 }
48 
soc_intel_is_cht(void)49 static inline bool soc_intel_is_cht(void)
50 {
51 	return false;
52 }
53 
soc_intel_is_apl(void)54 static inline bool soc_intel_is_apl(void)
55 {
56 	return false;
57 }
58 
soc_intel_is_glk(void)59 static inline bool soc_intel_is_glk(void)
60 {
61 	return false;
62 }
63 
soc_intel_is_cml(void)64 static inline bool soc_intel_is_cml(void)
65 {
66 	return false;
67 }
68 #endif /* IS_ENABLED(CONFIG_X86) */
69 
70 #endif /* __PLATFORM_DATA_X86_SOC_H */
71