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