1*3fa9dec4Skenny liang /* 2*3fa9dec4Skenny liang * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. 3*3fa9dec4Skenny liang * 4*3fa9dec4Skenny liang * SPDX-License-Identifier: BSD-3-Clause 5*3fa9dec4Skenny liang */ 6*3fa9dec4Skenny liang 7*3fa9dec4Skenny liang #include <arch.h> 8*3fa9dec4Skenny liang #include <assert.h> 9*3fa9dec4Skenny liang #include <common/debug.h> 10*3fa9dec4Skenny liang #include <lib/mmio.h> 11*3fa9dec4Skenny liang #include <mcucfg.h> 12*3fa9dec4Skenny liang #include <stdio.h> 13*3fa9dec4Skenny liang #include <stdlib.h> 14*3fa9dec4Skenny liang #include <string.h> 15*3fa9dec4Skenny liang disable_scu(u_register_t mpidr)16*3fa9dec4Skenny liangvoid disable_scu(u_register_t mpidr) 17*3fa9dec4Skenny liang { 18*3fa9dec4Skenny liang uintptr_t axi_config = 0; 19*3fa9dec4Skenny liang uint32_t axi_value; 20*3fa9dec4Skenny liang 21*3fa9dec4Skenny liang switch (mpidr & MPIDR_CLUSTER_MASK) { 22*3fa9dec4Skenny liang case 0x000: 23*3fa9dec4Skenny liang axi_config = (uintptr_t)&mt8183_mcucfg->mp0_axi_config; 24*3fa9dec4Skenny liang axi_value = MP0_ACINACTM; 25*3fa9dec4Skenny liang break; 26*3fa9dec4Skenny liang case 0x100: 27*3fa9dec4Skenny liang axi_config = (uintptr_t)&mt8183_mcucfg->mp2_axi_config; 28*3fa9dec4Skenny liang axi_value = MP2_ACINACTM; 29*3fa9dec4Skenny liang break; 30*3fa9dec4Skenny liang default: 31*3fa9dec4Skenny liang ERROR("%s: mpidr does not exist\n", __func__); 32*3fa9dec4Skenny liang panic(); 33*3fa9dec4Skenny liang } 34*3fa9dec4Skenny liang mmio_setbits_32(axi_config, axi_value); 35*3fa9dec4Skenny liang } 36*3fa9dec4Skenny liang enable_scu(u_register_t mpidr)37*3fa9dec4Skenny liangvoid enable_scu(u_register_t mpidr) 38*3fa9dec4Skenny liang { 39*3fa9dec4Skenny liang uintptr_t axi_config = 0; 40*3fa9dec4Skenny liang uint32_t axi_value; 41*3fa9dec4Skenny liang 42*3fa9dec4Skenny liang switch (mpidr & MPIDR_CLUSTER_MASK) { 43*3fa9dec4Skenny liang case 0x000: 44*3fa9dec4Skenny liang axi_config = (uintptr_t)&mt8183_mcucfg->mp0_axi_config; 45*3fa9dec4Skenny liang axi_value = MP0_ACINACTM; 46*3fa9dec4Skenny liang break; 47*3fa9dec4Skenny liang case 0x100: 48*3fa9dec4Skenny liang axi_config = (uintptr_t)&mt8183_mcucfg->mp2_axi_config; 49*3fa9dec4Skenny liang axi_value = MP2_ACINACTM; 50*3fa9dec4Skenny liang break; 51*3fa9dec4Skenny liang default: 52*3fa9dec4Skenny liang ERROR("%s: mpidr does not exist\n", __func__); 53*3fa9dec4Skenny liang panic(); 54*3fa9dec4Skenny liang } 55*3fa9dec4Skenny liang mmio_clrbits_32(axi_config, axi_value); 56*3fa9dec4Skenny liang } 57