xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/cpu.h (revision f36ea2f6e17621c4d9dd97c4dbfab62d03d061df)
1 /* SPDX-License-Identifier: GPL-2.0+  */
2 /*
3  * Rockchip Electronics Co., Ltd.
4  *
5  */
6 
7 #ifndef __ASM_ARCH_CPU_H
8 #define __ASM_ARCH_CPU_H
9 
10 #include <asm/io.h>
11 #include <dm/device.h>
12 
13 #define ROCKCHIP_CPU_MASK       0xffff0000
14 #define ROCKCHIP_CPU_RK312X     0x31260000
15 #define ROCKCHIP_CPU_RK3288     0x32880000
16 #define ROCKCHIP_CPU_RK3308	0x33080000
17 #define ROCKCHIP_CPU_RK3566	0x35660000
18 #define ROCKCHIP_CPU_RK3568	0x35680000
19 
20 #define ROCKCHIP_SOC_MASK	(ROCKCHIP_CPU_MASK | 0xff)
21 #define ROCKCHIP_SOC_RK3126     (ROCKCHIP_CPU_RK312X | 0x00)
22 #define ROCKCHIP_SOC_RK3126B    (ROCKCHIP_CPU_RK312X | 0x10)
23 #define ROCKCHIP_SOC_RK3126C    (ROCKCHIP_CPU_RK312X | 0x20)
24 #define ROCKCHIP_SOC_RK3128     (ROCKCHIP_CPU_RK312X | 0x01)
25 #define ROCKCHIP_SOC_RK3288     (ROCKCHIP_CPU_RK3288 | 0x00)
26 #define ROCKCHIP_SOC_RK3288W    (ROCKCHIP_CPU_RK3288 | 0x01)
27 #define ROCKCHIP_SOC_RK3308	(ROCKCHIP_CPU_RK3308 | 0x00)
28 #define ROCKCHIP_SOC_RK3308B	(ROCKCHIP_CPU_RK3308 | 0x01)
29 #define ROCKCHIP_SOC_RK3566	(ROCKCHIP_CPU_RK3566 | 0x00)
30 #define ROCKCHIP_SOC_RK3568	(ROCKCHIP_CPU_RK3568 | 0x00)
31 
32 static inline unsigned long rockchip_get_cpu_version(void)
33 {
34 #if defined(CONFIG_ROCKCHIP_RK3568)
35 #define PMUGRF_SOC_CON15	0xfdc20100
36 	if (readl(PMUGRF_SOC_CON15) & GENMASK(15, 14))
37 		return 1;
38 	else
39 		return 0;
40 #else
41 	return 0;
42 #endif
43 }
44 
45 static inline int rockchip_soc_id(void)
46 {
47 #if defined(CONFIG_ROCKCHIP_RK3288)
48 	/* RK3288W HDMI Revision ID is 0x1A */
49 	if (readl(0xFF980004) == 0x1A)
50 		return ROCKCHIP_SOC_RK3288W;
51 	else
52 		return ROCKCHIP_SOC_RK3288;
53 #elif defined(CONFIG_ROCKCHIP_RK3308)
54 	/*
55 	 * The CHIP_ID is stored in GRF_CHIP_ID:
56 	 * RK3308:  0xcea (3306 in decimal)
57 	 * RK3308B: 0x3308
58 	 *
59 	 */
60 	if (readl(0xFF000800) == 3306)
61 		return ROCKCHIP_SOC_RK3308;
62 	else
63 		return ROCKCHIP_SOC_RK3308B;
64 #elif defined(CONFIG_ROCKCHIP_RK3568)
65 	if (of_machine_is_compatible("rockchip,rk3566"))
66 		return ROCKCHIP_SOC_RK3566;
67 	else
68 		return ROCKCHIP_SOC_RK3568;
69 #else
70 	return 0;
71 #endif
72 }
73 
74 #define ROCKCHIP_SOC(id, ID) \
75 static inline bool soc_is_##id(void) \
76 { \
77 	int soc_id = rockchip_soc_id(); \
78 	if (soc_id) \
79 		return ((soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_ ##ID); \
80 	return false; \
81 }
82 
83 ROCKCHIP_SOC(rk3126, RK3126)
84 ROCKCHIP_SOC(rk3126b, RK3126B)
85 ROCKCHIP_SOC(rk3126c, RK3126C)
86 ROCKCHIP_SOC(rk3128, RK3128)
87 ROCKCHIP_SOC(rk3288, RK3288)
88 ROCKCHIP_SOC(rk3288w, RK3288W)
89 ROCKCHIP_SOC(rk3308, RK3308)
90 ROCKCHIP_SOC(rk3308b, RK3308B)
91 ROCKCHIP_SOC(rk3566, RK3566)
92 ROCKCHIP_SOC(rk3568, RK3568)
93 
94 #endif
95