xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/cpu.h (revision 39293fce268dcee0b3a651e085a14907f342ccea)
158e5d8f2SAndy Yan /* SPDX-License-Identifier: GPL-2.0+  */
258e5d8f2SAndy Yan /*
358e5d8f2SAndy Yan  * Rockchip Electronics Co., Ltd.
458e5d8f2SAndy Yan  *
558e5d8f2SAndy Yan  */
658e5d8f2SAndy Yan 
758e5d8f2SAndy Yan #ifndef __ASM_ARCH_CPU_H
858e5d8f2SAndy Yan #define __ASM_ARCH_CPU_H
958e5d8f2SAndy Yan 
1058e5d8f2SAndy Yan #include <asm/io.h>
1158e5d8f2SAndy Yan 
1258e5d8f2SAndy Yan #define ROCKCHIP_CPU_MASK       0xffff0000
1358e5d8f2SAndy Yan #define ROCKCHIP_CPU_RK312X     0x31260000
1458e5d8f2SAndy Yan #define ROCKCHIP_CPU_RK3288     0x32880000
1558e5d8f2SAndy Yan #define ROCKCHIP_CPU_RK3308	0x33080000
16*39293fceSLiang Chen #define ROCKCHIP_CPU_RK3566	0x35660000
17*39293fceSLiang Chen #define ROCKCHIP_CPU_RK3568	0x35680000
1858e5d8f2SAndy Yan 
1958e5d8f2SAndy Yan #define ROCKCHIP_SOC_MASK	(ROCKCHIP_CPU_MASK | 0xff)
2058e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3126     (ROCKCHIP_CPU_RK312X | 0x00)
2158e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3126B    (ROCKCHIP_CPU_RK312X | 0x10)
2258e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3126C    (ROCKCHIP_CPU_RK312X | 0x20)
2358e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3128     (ROCKCHIP_CPU_RK312X | 0x01)
2458e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3288     (ROCKCHIP_CPU_RK3288 | 0x00)
2558e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3288W    (ROCKCHIP_CPU_RK3288 | 0x01)
2658e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3308	(ROCKCHIP_CPU_RK3308 | 0x00)
2758e5d8f2SAndy Yan #define ROCKCHIP_SOC_RK3308B	(ROCKCHIP_CPU_RK3308 | 0x01)
28*39293fceSLiang Chen #define ROCKCHIP_SOC_RK3566	(ROCKCHIP_CPU_RK3566 | 0x00)
29*39293fceSLiang Chen #define ROCKCHIP_SOC_RK3568	(ROCKCHIP_CPU_RK3568 | 0x00)
30*39293fceSLiang Chen 
31*39293fceSLiang Chen static inline unsigned long rockchip_get_cpu_version(void)
32*39293fceSLiang Chen {
33*39293fceSLiang Chen #if defined(CONFIG_ROCKCHIP_RK3568)
34*39293fceSLiang Chen #define PMUGRF_SOC_CON15	0xfdc20100
35*39293fceSLiang Chen 	if (readl(PMUGRF_SOC_CON15) & GENMASK(15, 14))
36*39293fceSLiang Chen 		return 1;
37*39293fceSLiang Chen 	else
38*39293fceSLiang Chen 		return 0;
39*39293fceSLiang Chen #else
40*39293fceSLiang Chen 	return 0;
41*39293fceSLiang Chen #endif
42*39293fceSLiang Chen }
4358e5d8f2SAndy Yan 
4458e5d8f2SAndy Yan static inline int rockchip_soc_id(void)
4558e5d8f2SAndy Yan {
4658e5d8f2SAndy Yan #if defined(CONFIG_ROCKCHIP_RK3288)
4758e5d8f2SAndy Yan 	/* RK3288W HDMI Revision ID is 0x1A */
4858e5d8f2SAndy Yan 	if (readl(0xFF980004) == 0x1A)
4958e5d8f2SAndy Yan 		return ROCKCHIP_SOC_RK3288W;
5058e5d8f2SAndy Yan 	else
5158e5d8f2SAndy Yan 		return ROCKCHIP_SOC_RK3288;
5258e5d8f2SAndy Yan #elif defined(CONFIG_ROCKCHIP_RK3308)
5358e5d8f2SAndy Yan 	/*
5458e5d8f2SAndy Yan 	 * The CHIP_ID is stored in GRF_CHIP_ID:
5558e5d8f2SAndy Yan 	 * RK3308:  0xcea (3306 in decimal)
5658e5d8f2SAndy Yan 	 * RK3308B: 0x3308
5758e5d8f2SAndy Yan 	 *
5858e5d8f2SAndy Yan 	 */
5958e5d8f2SAndy Yan 	if (readl(0xFF000800) == 3306)
6058e5d8f2SAndy Yan 		return ROCKCHIP_SOC_RK3308;
6158e5d8f2SAndy Yan 	else
6258e5d8f2SAndy Yan 		return ROCKCHIP_SOC_RK3308B;
63*39293fceSLiang Chen #elif defined(CONFIG_ROCKCHIP_RK3568)
64*39293fceSLiang Chen 	if (of_machine_is_compatible("rockchip,rk3566"))
65*39293fceSLiang Chen 		return ROCKCHIP_SOC_RK3566;
66*39293fceSLiang Chen 	else
67*39293fceSLiang Chen 		return ROCKCHIP_SOC_RK3568;
6858e5d8f2SAndy Yan #else
6958e5d8f2SAndy Yan 	return 0;
7058e5d8f2SAndy Yan #endif
7158e5d8f2SAndy Yan }
7258e5d8f2SAndy Yan 
7358e5d8f2SAndy Yan #define ROCKCHIP_SOC(id, ID) \
7458e5d8f2SAndy Yan static inline bool soc_is_##id(void) \
7558e5d8f2SAndy Yan { \
7658e5d8f2SAndy Yan 	int soc_id = rockchip_soc_id(); \
7758e5d8f2SAndy Yan 	if (soc_id) \
7858e5d8f2SAndy Yan 		return ((soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_ ##ID); \
7958e5d8f2SAndy Yan 	return false; \
8058e5d8f2SAndy Yan }
8158e5d8f2SAndy Yan 
8258e5d8f2SAndy Yan ROCKCHIP_SOC(rk3126, RK3126)
8358e5d8f2SAndy Yan ROCKCHIP_SOC(rk3126b, RK3126B)
8458e5d8f2SAndy Yan ROCKCHIP_SOC(rk3126c, RK3126C)
8558e5d8f2SAndy Yan ROCKCHIP_SOC(rk3128, RK3128)
8658e5d8f2SAndy Yan ROCKCHIP_SOC(rk3288, RK3288)
8758e5d8f2SAndy Yan ROCKCHIP_SOC(rk3288w, RK3288W)
8858e5d8f2SAndy Yan ROCKCHIP_SOC(rk3308, RK3308)
8958e5d8f2SAndy Yan ROCKCHIP_SOC(rk3308b, RK3308B)
90*39293fceSLiang Chen ROCKCHIP_SOC(rk3566, RK3566)
91*39293fceSLiang Chen ROCKCHIP_SOC(rk3568, RK3568)
9258e5d8f2SAndy Yan 
9358e5d8f2SAndy Yan #endif
94