1*71c40d3bSJacky Bai /* 2*71c40d3bSJacky Bai * Copyright 2020-2022 NXP 3*71c40d3bSJacky Bai * 4*71c40d3bSJacky Bai * SPDX-License-Identifier: BSD-3-Clause 5*71c40d3bSJacky Bai */ 6*71c40d3bSJacky Bai 7*71c40d3bSJacky Bai #ifndef IMX_CSU_H 8*71c40d3bSJacky Bai #define IMX_CSU_H 9*71c40d3bSJacky Bai 10*71c40d3bSJacky Bai #include <lib/utils_def.h> 11*71c40d3bSJacky Bai 12*71c40d3bSJacky Bai #include <platform_def.h> 13*71c40d3bSJacky Bai 14*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_0 0xff 15*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_1 0xbb 16*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_2 0x3f 17*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_3 0x3b 18*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_4 0x33 19*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_5 0x22 20*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_6 0x03 21*71c40d3bSJacky Bai #define CSU_SEC_LEVEL_7 0x0 22*71c40d3bSJacky Bai 23*71c40d3bSJacky Bai #define LOCKED 0x1 24*71c40d3bSJacky Bai #define UNLOCKED 0x0 25*71c40d3bSJacky Bai 26*71c40d3bSJacky Bai #define CSLx_REG(x) (IMX_CSU_BASE + ((x) / 2) * 4) 27*71c40d3bSJacky Bai #define CSLx_LOCK(x) ((0x1 << (((x) % 2) * 16 + 8))) 28*71c40d3bSJacky Bai #define CSLx_CFG(x, n) ((x) << (((n) % 2) * 16)) 29*71c40d3bSJacky Bai 30*71c40d3bSJacky Bai #define CSU_HP_REG(x) (IMX_CSU_BASE + ((x) / 16) * 4 + 0x200) 31*71c40d3bSJacky Bai #define CSU_HP_LOCK(x) ((0x1 << (((x) % 16) * 2 + 1))) 32*71c40d3bSJacky Bai #define CSU_HP_CFG(x, n) ((x) << (((n) % 16) * 2)) 33*71c40d3bSJacky Bai 34*71c40d3bSJacky Bai #define CSU_SA_REG(x) (IMX_CSU_BASE + 0x218) 35*71c40d3bSJacky Bai #define CSU_SA_LOCK(x) ((0x1 << (((x) % 16) * 2 + 1))) 36*71c40d3bSJacky Bai #define CSU_SA_CFG(x, n) ((x) << (((n) % 16) * 2)) 37*71c40d3bSJacky Bai 38*71c40d3bSJacky Bai #define CSU_HPCONTROL_REG(x) (IMX_CSU_BASE + (((x) / 16) * 4) + 0x358) 39*71c40d3bSJacky Bai #define CSU_HPCONTROL_LOCK(x) ((0x1 << (((x) % 16) * 2 + 1))) 40*71c40d3bSJacky Bai #define CSU_HPCONTROL_CFG(x, n) ((x) << (((n) % 16) * 2)) 41*71c40d3bSJacky Bai 42*71c40d3bSJacky Bai enum csu_cfg_type { 43*71c40d3bSJacky Bai CSU_INVALID, 44*71c40d3bSJacky Bai CSU_CSL, 45*71c40d3bSJacky Bai CSU_HP, 46*71c40d3bSJacky Bai CSU_SA, 47*71c40d3bSJacky Bai CSU_HPCONTROL, 48*71c40d3bSJacky Bai }; 49*71c40d3bSJacky Bai 50*71c40d3bSJacky Bai struct imx_csu_cfg { 51*71c40d3bSJacky Bai enum csu_cfg_type type; 52*71c40d3bSJacky Bai uint16_t idx; 53*71c40d3bSJacky Bai uint16_t lock : 1; 54*71c40d3bSJacky Bai uint16_t csl_level : 8; 55*71c40d3bSJacky Bai uint16_t hp : 1; 56*71c40d3bSJacky Bai uint16_t sa : 1; 57*71c40d3bSJacky Bai uint16_t hpctrl : 1; 58*71c40d3bSJacky Bai }; 59*71c40d3bSJacky Bai 60*71c40d3bSJacky Bai #define CSU_CSLx(i, level, lk) \ 61*71c40d3bSJacky Bai {CSU_CSL, .idx = (i), .csl_level = (level), .lock = (lk),} 62*71c40d3bSJacky Bai 63*71c40d3bSJacky Bai #define CSU_HPx(i, val, lk) \ 64*71c40d3bSJacky Bai {CSU_HP, .idx = (i), .hp = (val), .lock = (lk), } 65*71c40d3bSJacky Bai 66*71c40d3bSJacky Bai #define CSU_SA(i, val, lk) \ 67*71c40d3bSJacky Bai {CSU_SA, .idx = (i), .sa = (val), .lock = (lk), } 68*71c40d3bSJacky Bai 69*71c40d3bSJacky Bai #define CSU_HPCTRL(i, val, lk) \ 70*71c40d3bSJacky Bai {CSU_HPCONTROL, .idx = (i), .hpctrl = (val), .lock = (lk), } 71*71c40d3bSJacky Bai 72*71c40d3bSJacky Bai void imx_csu_init(const struct imx_csu_cfg *csu_cfg); 73*71c40d3bSJacky Bai 74*71c40d3bSJacky Bai #endif /* IMX_CSU_H */ 75