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