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