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)				\
20static 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
34SOC_INTEL_IS_CPU(byt, ATOM_SILVERMONT);
35SOC_INTEL_IS_CPU(cht, ATOM_AIRMONT);
36SOC_INTEL_IS_CPU(apl, ATOM_GOLDMONT);
37SOC_INTEL_IS_CPU(glk, ATOM_GOLDMONT_PLUS);
38SOC_INTEL_IS_CPU(cml, KABYLAKE_L);
39
40#undef SOC_INTEL_IS_CPU
41
42#else /* IS_ENABLED(CONFIG_X86) */
43
44static inline bool soc_intel_is_byt(void)
45{
46	return false;
47}
48
49static inline bool soc_intel_is_cht(void)
50{
51	return false;
52}
53
54static inline bool soc_intel_is_apl(void)
55{
56	return false;
57}
58
59static inline bool soc_intel_is_glk(void)
60{
61	return false;
62}
63
64static 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