xref: /rk3399_ARM-atf/plat/imx/imx8m/include/imx8m_csu.h (revision 5f4acf98dd43304038706ac40569dc2c3e9a90bd)
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 
2381de5037SStefan Kerkmann #define SEC_ACCESS		0x0
2481de5037SStefan Kerkmann #define NON_SEC_ACCESS		0x1
2581de5037SStefan Kerkmann 
2671c40d3bSJacky Bai #define LOCKED			0x1
2771c40d3bSJacky Bai #define UNLOCKED		0x0
2871c40d3bSJacky Bai 
2971c40d3bSJacky Bai #define CSLx_REG(x)		(IMX_CSU_BASE + ((x) / 2) * 4)
3071c40d3bSJacky Bai #define CSLx_LOCK(x)		((0x1 << (((x) % 2) * 16 + 8)))
3171c40d3bSJacky Bai #define CSLx_CFG(x, n)		((x) << (((n) % 2) * 16))
3271c40d3bSJacky Bai 
33*566d3944SStefan Kerkmann #define CSU_HP_REG(x)		(IMX_CSU_BASE + (((x) / 16) * 4) + 0x200)
3471c40d3bSJacky Bai #define CSU_HP_LOCK(x)		((0x1 << (((x) % 16) * 2 + 1)))
3571c40d3bSJacky Bai #define CSU_HP_CFG(x, n)	((x) << (((n) % 16) * 2))
3671c40d3bSJacky Bai 
37c13016baSStefan Kerkmann #define CSU_SA_REG(x)		(IMX_CSU_BASE + (((x) / 16) * 4) + 0x218)
3871c40d3bSJacky Bai #define CSU_SA_LOCK(x)		((0x1 << (((x) % 16) * 2 + 1)))
3971c40d3bSJacky Bai #define CSU_SA_CFG(x, n)	((x) << (((n) % 16) * 2))
4071c40d3bSJacky Bai 
4171c40d3bSJacky Bai #define CSU_HPCONTROL_REG(x)		(IMX_CSU_BASE + (((x) / 16) * 4) + 0x358)
4271c40d3bSJacky Bai #define CSU_HPCONTROL_LOCK(x)		((0x1 << (((x) % 16) * 2 + 1)))
4371c40d3bSJacky Bai #define CSU_HPCONTROL_CFG(x, n)		((x) << (((n) % 16) * 2))
4471c40d3bSJacky Bai 
4571c40d3bSJacky Bai enum csu_cfg_type {
4671c40d3bSJacky Bai 	CSU_INVALID,
4771c40d3bSJacky Bai 	CSU_CSL,
4871c40d3bSJacky Bai 	CSU_HP,
4971c40d3bSJacky Bai 	CSU_SA,
5071c40d3bSJacky Bai 	CSU_HPCONTROL,
5171c40d3bSJacky Bai };
5271c40d3bSJacky Bai 
5371c40d3bSJacky Bai struct imx_csu_cfg {
5471c40d3bSJacky Bai 	enum csu_cfg_type type;
5571c40d3bSJacky Bai 	uint16_t idx;
5671c40d3bSJacky Bai 	uint16_t lock : 1;
5771c40d3bSJacky Bai 	uint16_t csl_level : 8;
5871c40d3bSJacky Bai 	uint16_t hp : 1;
5971c40d3bSJacky Bai 	uint16_t sa : 1;
6071c40d3bSJacky Bai 	uint16_t hpctrl : 1;
6171c40d3bSJacky Bai };
6271c40d3bSJacky Bai 
6371c40d3bSJacky Bai #define CSU_CSLx(i, level, lk)	\
6471c40d3bSJacky Bai 	{CSU_CSL, .idx = (i), .csl_level = (level), .lock = (lk),}
6571c40d3bSJacky Bai 
6671c40d3bSJacky Bai #define CSU_HPx(i, val, lk)	\
6771c40d3bSJacky Bai 	{CSU_HP, .idx = (i), .hp = (val), .lock = (lk), }
6871c40d3bSJacky Bai 
6971c40d3bSJacky Bai #define CSU_SA(i, val, lk)	\
7071c40d3bSJacky Bai 	{CSU_SA, .idx = (i), .sa = (val), .lock = (lk), }
7171c40d3bSJacky Bai 
7271c40d3bSJacky Bai #define CSU_HPCTRL(i, val, lk)	\
7371c40d3bSJacky Bai 	{CSU_HPCONTROL, .idx = (i), .hpctrl = (val), .lock = (lk), }
7471c40d3bSJacky Bai 
7571c40d3bSJacky Bai void imx_csu_init(const struct imx_csu_cfg *csu_cfg);
7671c40d3bSJacky Bai 
7771c40d3bSJacky Bai #endif /* IMX_CSU_H */
78