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