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 #include <lib/mmio.h> 8*71c40d3bSJacky Bai 9*71c40d3bSJacky Bai #include <imx8m_csu.h> 10*71c40d3bSJacky Bai 11*71c40d3bSJacky Bai void imx_csu_init(const struct imx_csu_cfg *csu_cfg) 12*71c40d3bSJacky Bai { 13*71c40d3bSJacky Bai const struct imx_csu_cfg *csu = csu_cfg; 14*71c40d3bSJacky Bai uint32_t val; 15*71c40d3bSJacky Bai 16*71c40d3bSJacky Bai while (csu->type != CSU_INVALID) { 17*71c40d3bSJacky Bai switch (csu->type) { 18*71c40d3bSJacky Bai case CSU_CSL: 19*71c40d3bSJacky Bai val = mmio_read_32(CSLx_REG(csu->idx)); 20*71c40d3bSJacky Bai if (val & CSLx_LOCK(csu->idx)) { 21*71c40d3bSJacky Bai break; 22*71c40d3bSJacky Bai } 23*71c40d3bSJacky Bai mmio_clrsetbits_32(CSLx_REG(csu->idx), CSLx_CFG(0xff, csu->idx), 24*71c40d3bSJacky Bai CSLx_CFG(csu->csl_level | (csu->lock << 8), csu->idx)); 25*71c40d3bSJacky Bai break; 26*71c40d3bSJacky Bai case CSU_HP: 27*71c40d3bSJacky Bai val = mmio_read_32(CSU_HP_REG(csu->idx)); 28*71c40d3bSJacky Bai if (val & CSU_HP_LOCK(csu->idx)) { 29*71c40d3bSJacky Bai break; 30*71c40d3bSJacky Bai } 31*71c40d3bSJacky Bai mmio_clrsetbits_32(CSU_HP_REG(csu->idx), CSU_HP_CFG(0x1, csu->idx), 32*71c40d3bSJacky Bai CSU_HP_CFG(csu->hp | (csu->lock << 0x1), csu->idx)); 33*71c40d3bSJacky Bai break; 34*71c40d3bSJacky Bai case CSU_SA: 35*71c40d3bSJacky Bai val = mmio_read_32(CSU_SA_REG(csu->idx)); 36*71c40d3bSJacky Bai if (val & CSU_SA_LOCK(csu->idx)) { 37*71c40d3bSJacky Bai break; 38*71c40d3bSJacky Bai } 39*71c40d3bSJacky Bai mmio_clrsetbits_32(CSU_SA_REG(csu->idx), CSU_SA_CFG(0x1, csu->idx), 40*71c40d3bSJacky Bai CSU_SA_CFG(csu->sa | (csu->lock << 0x1), csu->idx)); 41*71c40d3bSJacky Bai break; 42*71c40d3bSJacky Bai case CSU_HPCONTROL: 43*71c40d3bSJacky Bai val = mmio_read_32(CSU_HPCONTROL_REG(csu->idx)); 44*71c40d3bSJacky Bai if (val & CSU_HPCONTROL_LOCK(csu->idx)) { 45*71c40d3bSJacky Bai break; 46*71c40d3bSJacky Bai } 47*71c40d3bSJacky Bai mmio_clrsetbits_32(CSU_HPCONTROL_REG(csu->idx), CSU_HPCONTROL_CFG(0x1, csu->idx), 48*71c40d3bSJacky Bai CSU_HPCONTROL_CFG(csu->hpctrl | (csu->lock << 0x1), csu->idx)); 49*71c40d3bSJacky Bai break; 50*71c40d3bSJacky Bai default: 51*71c40d3bSJacky Bai break; 52*71c40d3bSJacky Bai } 53*71c40d3bSJacky Bai 54*71c40d3bSJacky Bai csu++; 55*71c40d3bSJacky Bai } 56*71c40d3bSJacky Bai } 57