1 /* SPDX-License-Identifier: GPL-2.0+  */
2 /*
3  * Rockchip Electronics Co., Ltd.
4  */
5 
6 #ifndef __ASM_ARCH_CPU_RK3288_H
7 #define __ASM_ARCH_CPU_RK3288_H
8 
9 #include <asm/io.h>
10 
11 #define ROCKCHIP_CPU_MASK       0xffff0000
12 #define ROCKCHIP_CPU_RK3288     0x32880000
13 
14 #define ROCKCHIP_SOC_MASK	(ROCKCHIP_CPU_MASK | 0xff)
15 #define ROCKCHIP_SOC_RK3288     (ROCKCHIP_CPU_RK3288 | 0x00)
16 #define ROCKCHIP_SOC_RK3288W    (ROCKCHIP_CPU_RK3288 | 0x01)
17 
18 #define RK3288_HDMI_PHYS	0xff980000
19 #define HDMI_CONFIG0_ID		0x4
20 #define RK3288W_HDMI_REVID	0x1a
21 
rockchip_soc_id(void)22 static inline int rockchip_soc_id(void)
23 {
24 	u8 reg;
25 
26 #if defined(CONFIG_ROCKCHIP_RK3288)
27 	reg = readb(RK3288_HDMI_PHYS + HDMI_CONFIG0_ID);
28 	if (reg == RK3288W_HDMI_REVID)
29 		return ROCKCHIP_SOC_RK3288W;
30 	else
31 		return ROCKCHIP_SOC_RK3288;
32 #else
33 	return 0;
34 #endif
35 }
36 
37 #define ROCKCHIP_SOC(id, ID) \
38 static inline bool soc_is_##id(void) \
39 { \
40 	int soc_id = rockchip_soc_id(); \
41 	if (soc_id) \
42 		return ((soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_ ##ID); \
43 	return false; \
44 }
45 
46 ROCKCHIP_SOC(rk3288, RK3288)
47 ROCKCHIP_SOC(rk3288w, RK3288W)
48 
49 #endif /* __ASM_ARCH_CPU_RK3288_H */
50