• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 Rockchip Electronics Co. Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms of version 2 of the GNU General Public License as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11  * more details.
12  */
13 
14 #ifndef __LINUX_ROCKCHIP_CPU_H
15 #define __LINUX_ROCKCHIP_CPU_H
16 
17 #include <linux/of.h>
18 
19 #define ROCKCHIP_CPU_MASK		0xffff0000
20 #define ROCKCHIP_CPU_SHIFT		16
21 #define ROCKCHIP_CPU_RV1109		0x11090000
22 #define ROCKCHIP_CPU_RV1126		0x11260000
23 #define ROCKCHIP_CPU_RK312X		0x31260000
24 #define ROCKCHIP_CPU_RK3288		0x32880000
25 #define ROCKCHIP_CPU_RK3308		0x33080000
26 #define ROCKCHIP_CPU_RK3566		0x35660000
27 #define ROCKCHIP_CPU_RK3568		0x35680000
28 
29 #if IS_ENABLED(CONFIG_ROCKCHIP_CPUINFO)
30 
31 extern unsigned long rockchip_soc_id;
32 
33 #define ROCKCHIP_CPU_VERION_MASK	0x0000f000
34 #define ROCKCHIP_CPU_VERION_SHIFT	12
35 
rockchip_get_cpu_version(void)36 static inline unsigned long rockchip_get_cpu_version(void)
37 {
38 	return (rockchip_soc_id & ROCKCHIP_CPU_VERION_MASK)
39 		>> ROCKCHIP_CPU_VERION_SHIFT;
40 }
41 
rockchip_set_cpu_version(unsigned long ver)42 static inline void rockchip_set_cpu_version(unsigned long ver)
43 {
44 	rockchip_soc_id &= ~ROCKCHIP_CPU_VERION_MASK;
45 	rockchip_soc_id |=
46 		(ver << ROCKCHIP_CPU_VERION_SHIFT) & ROCKCHIP_CPU_VERION_MASK;
47 }
48 
rockchip_set_cpu(unsigned long code)49 static inline void rockchip_set_cpu(unsigned long code)
50 {
51 	if (!code)
52 		return;
53 
54 	rockchip_soc_id &= ~ROCKCHIP_CPU_MASK;
55 	rockchip_soc_id |= (code << ROCKCHIP_CPU_SHIFT) & ROCKCHIP_CPU_MASK;
56 }
57 
58 int rockchip_soc_id_init(void);
59 
60 #else
61 
62 #define rockchip_soc_id 0
63 
rockchip_get_cpu_version(void)64 static inline unsigned long rockchip_get_cpu_version(void)
65 {
66 	return 0;
67 }
68 
rockchip_set_cpu_version(unsigned long ver)69 static inline void rockchip_set_cpu_version(unsigned long ver)
70 {
71 }
72 
rockchip_set_cpu(unsigned long code)73 static inline void rockchip_set_cpu(unsigned long code)
74 {
75 }
76 
rockchip_soc_id_init(void)77 static inline int rockchip_soc_id_init(void)
78 {
79 	return 0;
80 }
81 
82 #endif
83 
84 #if defined(CONFIG_CPU_RV1126) || defined(CONFIG_CPU_RV1109)
cpu_is_rv1109(void)85 static inline bool cpu_is_rv1109(void)
86 {
87 	if (rockchip_soc_id)
88 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RV1109;
89 	return of_machine_is_compatible("rockchip,rv1109");
90 }
91 
cpu_is_rv1126(void)92 static inline bool cpu_is_rv1126(void)
93 {
94 	if (rockchip_soc_id)
95 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RV1126;
96 	return of_machine_is_compatible("rockchip,rv1126");
97 }
98 #else
cpu_is_rv1109(void)99 static inline bool cpu_is_rv1109(void) { return false; }
cpu_is_rv1126(void)100 static inline bool cpu_is_rv1126(void) { return false; }
101 #endif
102 
103 #ifdef CONFIG_CPU_RK312X
cpu_is_rk312x(void)104 static inline bool cpu_is_rk312x(void)
105 {
106 	if (rockchip_soc_id)
107 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK312X;
108 	return of_machine_is_compatible("rockchip,rk3126") ||
109 	       of_machine_is_compatible("rockchip,rk3126b") ||
110 	       of_machine_is_compatible("rockchip,rk3126c") ||
111 	       of_machine_is_compatible("rockchip,rk3128");
112 }
113 #else
cpu_is_rk312x(void)114 static inline bool cpu_is_rk312x(void) { return false; }
115 #endif
116 
117 #ifdef CONFIG_CPU_RK3288
cpu_is_rk3288(void)118 static inline bool cpu_is_rk3288(void)
119 {
120 	if (rockchip_soc_id)
121 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3288;
122 	return of_machine_is_compatible("rockchip,rk3288") ||
123 	       of_machine_is_compatible("rockchip,rk3288w");
124 }
125 #else
cpu_is_rk3288(void)126 static inline bool cpu_is_rk3288(void) { return false; }
127 #endif
128 
129 #ifdef CONFIG_CPU_RK3308
cpu_is_rk3308(void)130 static inline bool cpu_is_rk3308(void)
131 {
132 	if (rockchip_soc_id)
133 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3308;
134 
135 	return of_machine_is_compatible("rockchip,rk3308");
136 }
137 #else
cpu_is_rk3308(void)138 static inline bool cpu_is_rk3308(void) { return false; }
139 #endif
140 
141 #if defined(CONFIG_CPU_RK3568)
cpu_is_rk3566(void)142 static inline bool cpu_is_rk3566(void)
143 {
144 	if (rockchip_soc_id)
145 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3566;
146 	return of_machine_is_compatible("rockchip,rk3566");
147 }
148 
cpu_is_rk3568(void)149 static inline bool cpu_is_rk3568(void)
150 {
151 	if (rockchip_soc_id)
152 		return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3568;
153 	return of_machine_is_compatible("rockchip,rk3568");
154 }
155 #else
cpu_is_rk3566(void)156 static inline bool cpu_is_rk3566(void) { return false; }
cpu_is_rk3568(void)157 static inline bool cpu_is_rk3568(void) { return false; }
158 #endif
159 
160 #define ROCKCHIP_SOC_MASK	(ROCKCHIP_CPU_MASK | 0xff)
161 #define ROCKCHIP_SOC_RV1109     (ROCKCHIP_CPU_RV1109 | 0x00)
162 #define ROCKCHIP_SOC_RV1126     (ROCKCHIP_CPU_RV1126 | 0x00)
163 #define ROCKCHIP_SOC_RK3126     (ROCKCHIP_CPU_RK312X | 0x00)
164 #define ROCKCHIP_SOC_RK3126B    (ROCKCHIP_CPU_RK312X | 0x10)
165 #define ROCKCHIP_SOC_RK3126C    (ROCKCHIP_CPU_RK312X | 0x20)
166 #define ROCKCHIP_SOC_RK3128     (ROCKCHIP_CPU_RK312X | 0x01)
167 #define ROCKCHIP_SOC_RK3288     (ROCKCHIP_CPU_RK3288 | 0x00)
168 #define ROCKCHIP_SOC_RK3288W    (ROCKCHIP_CPU_RK3288 | 0x01)
169 #define ROCKCHIP_SOC_RK3308	(ROCKCHIP_CPU_RK3308 | 0x00)
170 #define ROCKCHIP_SOC_RK3308B	(ROCKCHIP_CPU_RK3308 | 0x01)
171 #define ROCKCHIP_SOC_RK3566	(ROCKCHIP_CPU_RK3566 | 0x00)
172 #define ROCKCHIP_SOC_RK3568	(ROCKCHIP_CPU_RK3568 | 0x00)
173 
174 #define ROCKCHIP_SOC(id, ID) \
175 static inline bool soc_is_##id(void) \
176 { \
177 	if (rockchip_soc_id) \
178 		return ((rockchip_soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_ ##ID); \
179 	return of_machine_is_compatible("rockchip,"#id); \
180 }
181 
182 ROCKCHIP_SOC(rv1109, RV1109)
183 ROCKCHIP_SOC(rv1126, RV1126)
184 ROCKCHIP_SOC(rk3126, RK3126)
185 ROCKCHIP_SOC(rk3126b, RK3126B)
186 ROCKCHIP_SOC(rk3126c, RK3126C)
187 ROCKCHIP_SOC(rk3128, RK3128)
188 ROCKCHIP_SOC(rk3288, RK3288)
189 ROCKCHIP_SOC(rk3288w, RK3288W)
190 ROCKCHIP_SOC(rk3308, RK3308)
191 ROCKCHIP_SOC(rk3308b, RK3308B)
192 ROCKCHIP_SOC(rk3566, RK3566)
193 ROCKCHIP_SOC(rk3568, RK3568)
194 
195 #endif
196