xref: /rk3399_ARM-atf/plat/imx/imx8m/include/imx8m_csu.h (revision c13016bac6a6960acbbfb3e0176e1894a7e9fa3a)
171c40d3bSJacky Bai /*
271c40d3bSJacky Bai  * Copyright 2020-2022 NXP
371c40d3bSJacky Bai  *
471c40d3bSJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
571c40d3bSJacky Bai  */
671c40d3bSJacky Bai 
771c40d3bSJacky Bai #ifndef IMX_CSU_H
871c40d3bSJacky Bai #define IMX_CSU_H
971c40d3bSJacky Bai 
1071c40d3bSJacky Bai #include <lib/utils_def.h>
1171c40d3bSJacky Bai 
1271c40d3bSJacky Bai #include <platform_def.h>
1371c40d3bSJacky Bai 
1471c40d3bSJacky Bai #define CSU_SEC_LEVEL_0		0xff
1571c40d3bSJacky Bai #define CSU_SEC_LEVEL_1		0xbb
1671c40d3bSJacky Bai #define CSU_SEC_LEVEL_2		0x3f
1771c40d3bSJacky Bai #define CSU_SEC_LEVEL_3		0x3b
1871c40d3bSJacky Bai #define CSU_SEC_LEVEL_4		0x33
1971c40d3bSJacky Bai #define CSU_SEC_LEVEL_5		0x22
2071c40d3bSJacky Bai #define CSU_SEC_LEVEL_6		0x03
2171c40d3bSJacky Bai #define CSU_SEC_LEVEL_7		0x0
2271c40d3bSJacky Bai 
2371c40d3bSJacky Bai #define LOCKED			0x1
2471c40d3bSJacky Bai #define UNLOCKED		0x0
2571c40d3bSJacky Bai 
2671c40d3bSJacky Bai #define CSLx_REG(x)		(IMX_CSU_BASE + ((x) / 2) * 4)
2771c40d3bSJacky Bai #define CSLx_LOCK(x)		((0x1 << (((x) % 2) * 16 + 8)))
2871c40d3bSJacky Bai #define CSLx_CFG(x, n)		((x) << (((n) % 2) * 16))
2971c40d3bSJacky Bai 
3071c40d3bSJacky Bai #define CSU_HP_REG(x)		(IMX_CSU_BASE + ((x) / 16) * 4 + 0x200)
3171c40d3bSJacky Bai #define CSU_HP_LOCK(x)		((0x1 << (((x) % 16) * 2 + 1)))
3271c40d3bSJacky Bai #define CSU_HP_CFG(x, n)	((x) << (((n) % 16) * 2))
3371c40d3bSJacky Bai 
34*c13016baSStefan Kerkmann #define CSU_SA_REG(x)		(IMX_CSU_BASE + (((x) / 16) * 4) + 0x218)
3571c40d3bSJacky Bai #define CSU_SA_LOCK(x)		((0x1 << (((x) % 16) * 2 + 1)))
3671c40d3bSJacky Bai #define CSU_SA_CFG(x, n)	((x) << (((n) % 16) * 2))
3771c40d3bSJacky Bai 
3871c40d3bSJacky Bai #define CSU_HPCONTROL_REG(x)		(IMX_CSU_BASE + (((x) / 16) * 4) + 0x358)
3971c40d3bSJacky Bai #define CSU_HPCONTROL_LOCK(x)		((0x1 << (((x) % 16) * 2 + 1)))
4071c40d3bSJacky Bai #define CSU_HPCONTROL_CFG(x, n)		((x) << (((n) % 16) * 2))
4171c40d3bSJacky Bai 
4271c40d3bSJacky Bai enum csu_cfg_type {
4371c40d3bSJacky Bai 	CSU_INVALID,
4471c40d3bSJacky Bai 	CSU_CSL,
4571c40d3bSJacky Bai 	CSU_HP,
4671c40d3bSJacky Bai 	CSU_SA,
4771c40d3bSJacky Bai 	CSU_HPCONTROL,
4871c40d3bSJacky Bai };
4971c40d3bSJacky Bai 
5071c40d3bSJacky Bai struct imx_csu_cfg {
5171c40d3bSJacky Bai 	enum csu_cfg_type type;
5271c40d3bSJacky Bai 	uint16_t idx;
5371c40d3bSJacky Bai 	uint16_t lock : 1;
5471c40d3bSJacky Bai 	uint16_t csl_level : 8;
5571c40d3bSJacky Bai 	uint16_t hp : 1;
5671c40d3bSJacky Bai 	uint16_t sa : 1;
5771c40d3bSJacky Bai 	uint16_t hpctrl : 1;
5871c40d3bSJacky Bai };
5971c40d3bSJacky Bai 
6071c40d3bSJacky Bai #define CSU_CSLx(i, level, lk)	\
6171c40d3bSJacky Bai 	{CSU_CSL, .idx = (i), .csl_level = (level), .lock = (lk),}
6271c40d3bSJacky Bai 
6371c40d3bSJacky Bai #define CSU_HPx(i, val, lk)	\
6471c40d3bSJacky Bai 	{CSU_HP, .idx = (i), .hp = (val), .lock = (lk), }
6571c40d3bSJacky Bai 
6671c40d3bSJacky Bai #define CSU_SA(i, val, lk)	\
6771c40d3bSJacky Bai 	{CSU_SA, .idx = (i), .sa = (val), .lock = (lk), }
6871c40d3bSJacky Bai 
6971c40d3bSJacky Bai #define CSU_HPCTRL(i, val, lk)	\
7071c40d3bSJacky Bai 	{CSU_HPCONTROL, .idx = (i), .hpctrl = (val), .lock = (lk), }
7171c40d3bSJacky Bai 
7271c40d3bSJacky Bai void imx_csu_init(const struct imx_csu_cfg *csu_cfg);
7371c40d3bSJacky Bai 
7471c40d3bSJacky Bai #endif /* IMX_CSU_H */
75