• 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) >> ROCKCHIP_CPU_VERION_SHIFT;
39 }
40 
rockchip_set_cpu_version(unsigned long ver)41 static inline void rockchip_set_cpu_version(unsigned long ver)
42 {
43     rockchip_soc_id &= ~ROCKCHIP_CPU_VERION_MASK;
44     rockchip_soc_id |= (ver << ROCKCHIP_CPU_VERION_SHIFT) & ROCKCHIP_CPU_VERION_MASK;
45 }
46 
rockchip_set_cpu(unsigned long code)47 static inline void rockchip_set_cpu(unsigned long code)
48 {
49     if (!code) {
50         return;
51     }
52 
53     rockchip_soc_id &= ~ROCKCHIP_CPU_MASK;
54     rockchip_soc_id |= (code << ROCKCHIP_CPU_SHIFT) & ROCKCHIP_CPU_MASK;
55 }
56 #else
57 
58 #define rockchip_soc_id 0
59 
rockchip_get_cpu_version(void)60 static inline unsigned long rockchip_get_cpu_version(void)
61 {
62     return 0;
63 }
64 
rockchip_set_cpu_version(unsigned long ver)65 static inline void rockchip_set_cpu_version(unsigned long ver)
66 {
67 }
68 
rockchip_set_cpu(unsigned long code)69 static inline void rockchip_set_cpu(unsigned long code)
70 {
71 }
72 #endif
73 
74 #if defined(CONFIG_CPU_RV1126) || defined(CONFIG_CPU_RV1109)
cpu_is_rv1109(void)75 static inline bool cpu_is_rv1109(void)
76 {
77     if (rockchip_soc_id) {
78         return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RV1109;
79     }
80     return of_machine_is_compatible("rockchip,rv1109");
81 }
82 
cpu_is_rv1126(void)83 static inline bool cpu_is_rv1126(void)
84 {
85     if (rockchip_soc_id) {
86         return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RV1126;
87     }
88     return of_machine_is_compatible("rockchip,rv1126");
89 }
90 #else
cpu_is_rv1109(void)91 static inline bool cpu_is_rv1109(void)
92 {
93     return false;
94 }
cpu_is_rv1126(void)95 static inline bool cpu_is_rv1126(void)
96 {
97     return false;
98 }
99 #endif
100 
101 #ifdef CONFIG_CPU_RK312X
cpu_is_rk312x(void)102 static inline bool cpu_is_rk312x(void)
103 {
104     if (rockchip_soc_id) {
105         return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK312X;
106     }
107     return of_machine_is_compatible("rockchip,rk3126") || of_machine_is_compatible("rockchip,rk3126b") ||
108            of_machine_is_compatible("rockchip,rk3126c") || of_machine_is_compatible("rockchip,rk3128");
109 }
110 #else
cpu_is_rk312x(void)111 static inline bool cpu_is_rk312x(void)
112 {
113     return false;
114 }
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     }
123     return of_machine_is_compatible("rockchip,rk3288") || of_machine_is_compatible("rockchip,rk3288w");
124 }
125 #else
cpu_is_rk3288(void)126 static inline bool cpu_is_rk3288(void)
127 {
128     return false;
129 }
130 #endif
131 
132 #ifdef CONFIG_CPU_RK3308
cpu_is_rk3308(void)133 static inline bool cpu_is_rk3308(void)
134 {
135     if (rockchip_soc_id) {
136         return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3308;
137     }
138 
139     return of_machine_is_compatible("rockchip,rk3308");
140 }
141 #else
cpu_is_rk3308(void)142 static inline bool cpu_is_rk3308(void)
143 {
144     return false;
145 }
146 #endif
147 
148 #if defined(CONFIG_CPU_RK3568)
cpu_is_rk3566(void)149 static inline bool cpu_is_rk3566(void)
150 {
151     if (rockchip_soc_id) {
152         return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3566;
153     }
154     return of_machine_is_compatible("rockchip,rk3566");
155 }
156 
cpu_is_rk3568(void)157 static inline bool cpu_is_rk3568(void)
158 {
159     if (rockchip_soc_id) {
160         return (rockchip_soc_id & ROCKCHIP_CPU_MASK) == ROCKCHIP_CPU_RK3568;
161     }
162     return of_machine_is_compatible("rockchip,rk3568");
163 }
164 #else
cpu_is_rk3566(void)165 static inline bool cpu_is_rk3566(void)
166 {
167     return false;
168 }
cpu_is_rk3568(void)169 static inline bool cpu_is_rk3568(void)
170 {
171     return false;
172 }
173 #endif
174 
175 #define ROCKCHIP_SOC_MASK (ROCKCHIP_CPU_MASK | 0xff)
176 #define ROCKCHIP_SOC_RV1109 (ROCKCHIP_CPU_RV1109 | 0x00)
177 #define ROCKCHIP_SOC_RV1126 (ROCKCHIP_CPU_RV1126 | 0x00)
178 #define ROCKCHIP_SOC_RK3126 (ROCKCHIP_CPU_RK312X | 0x00)
179 #define ROCKCHIP_SOC_RK3126B (ROCKCHIP_CPU_RK312X | 0x10)
180 #define ROCKCHIP_SOC_RK3126C (ROCKCHIP_CPU_RK312X | 0x20)
181 #define ROCKCHIP_SOC_RK3128 (ROCKCHIP_CPU_RK312X | 0x01)
182 #define ROCKCHIP_SOC_RK3288 (ROCKCHIP_CPU_RK3288 | 0x00)
183 #define ROCKCHIP_SOC_RK3288W (ROCKCHIP_CPU_RK3288 | 0x01)
184 #define ROCKCHIP_SOC_RK3308 (ROCKCHIP_CPU_RK3308 | 0x00)
185 #define ROCKCHIP_SOC_RK3308B (ROCKCHIP_CPU_RK3308 | 0x01)
186 #define ROCKCHIP_SOC_RK3566 (ROCKCHIP_CPU_RK3566 | 0x00)
187 #define ROCKCHIP_SOC_RK3568 (ROCKCHIP_CPU_RK3568 | 0x00)
188 
189 #define ROCKCHIP_SOC(id, ID)                                                                                           \
190     static inline bool soc_is_##id(void)                                                                               \
191     {                                                                                                                  \
192         if (rockchip_soc_id)                                                                                           \
193             return ((rockchip_soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_##ID);                                       \
194         return of_machine_is_compatible("rockchip," #id);                                                              \
195     }
196 
197 ROCKCHIP_SOC(rv1109, RV1109)
198 ROCKCHIP_SOC(rv1126, RV1126)
199 ROCKCHIP_SOC(rk3126, RK3126)
200 ROCKCHIP_SOC(rk3126b, RK3126B)
201 ROCKCHIP_SOC(rk3126c, RK3126C)
202 ROCKCHIP_SOC(rk3128, RK3128)
203 ROCKCHIP_SOC(rk3288, RK3288)
204 ROCKCHIP_SOC(rk3288w, RK3288W)
205 ROCKCHIP_SOC(rk3308, RK3308)
206 ROCKCHIP_SOC(rk3308b, RK3308B)
207 ROCKCHIP_SOC(rk3566, RK3566)
208 ROCKCHIP_SOC(rk3568, RK3568)
209 
210 #endif
211