13fa9dec4Skenny liang /* 23fa9dec4Skenny liang * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. 33fa9dec4Skenny liang * 43fa9dec4Skenny liang * SPDX-License-Identifier: BSD-3-Clause 53fa9dec4Skenny liang */ 63fa9dec4Skenny liang 73fa9dec4Skenny liang #include <arch_helpers.h> 83fa9dec4Skenny liang #include <common/debug.h> 93fa9dec4Skenny liang #include <lib/mmio.h> 103fa9dec4Skenny liang #include <plat_debug.h> 113fa9dec4Skenny liang #include <platform_def.h> 12*3c25ba44Skenny liang #include <spm.h> 133fa9dec4Skenny liang 143fa9dec4Skenny liang void circular_buffer_setup(void) 153fa9dec4Skenny liang { 163fa9dec4Skenny liang /* Clear DBG_CONTROL.lastpc_disable to enable circular buffer */ 173fa9dec4Skenny liang sync_writel(CA15M_DBG_CONTROL, 183fa9dec4Skenny liang mmio_read_32(CA15M_DBG_CONTROL) & ~(BIT_CA15M_LASTPC_DIS)); 193fa9dec4Skenny liang } 203fa9dec4Skenny liang 213fa9dec4Skenny liang void circular_buffer_unlock(void) 223fa9dec4Skenny liang { 233fa9dec4Skenny liang unsigned int i; 243fa9dec4Skenny liang 253fa9dec4Skenny liang /* Disable big vproc external off (set CPU_EXT_BUCK_ISO to 0x0) */ 263fa9dec4Skenny liang sync_writel(VPROC_EXT_CTL, mmio_read_32(VPROC_EXT_CTL) & ~(0x1 << 1)); 273fa9dec4Skenny liang 283fa9dec4Skenny liang /* Release vproc apb mask (set 0x0C53_2008[1] to 0x0) */ 293fa9dec4Skenny liang sync_writel(CA15M_PWR_RST_CTL, mmio_read_32(CA15M_PWR_RST_CTL) & ~(0x1 << 1)); 303fa9dec4Skenny liang 313fa9dec4Skenny liang for (i = 1; i <= 4; ++i) 323fa9dec4Skenny liang sync_writel(MP1_CPUTOP_PWR_CON + i * 4, 333fa9dec4Skenny liang (mmio_read_32(MP1_CPUTOP_PWR_CON + i * 4) & ~(0x4))|(0x4)); 343fa9dec4Skenny liang 353fa9dec4Skenny liang /* Set DFD.en */ 363fa9dec4Skenny liang sync_writel(DFD_INTERNAL_CTL, 0x1); 373fa9dec4Skenny liang } 383fa9dec4Skenny liang 393fa9dec4Skenny liang void circular_buffer_lock(void) 403fa9dec4Skenny liang { 413fa9dec4Skenny liang /* Clear DFD.en */ 423fa9dec4Skenny liang sync_writel(DFD_INTERNAL_CTL, 0x0); 433fa9dec4Skenny liang } 443fa9dec4Skenny liang 453fa9dec4Skenny liang void clear_all_on_mux(void) 463fa9dec4Skenny liang { 473fa9dec4Skenny liang sync_writel(MCU_ALL_PWR_ON_CTRL, 483fa9dec4Skenny liang mmio_read_32(MCU_ALL_PWR_ON_CTRL) & ~(1 << 2)); 493fa9dec4Skenny liang sync_writel(MCU_ALL_PWR_ON_CTRL, 503fa9dec4Skenny liang mmio_read_32(MCU_ALL_PWR_ON_CTRL) & ~(1 << 1)); 513fa9dec4Skenny liang } 523fa9dec4Skenny liang 533fa9dec4Skenny liang void l2c_parity_check_setup(void) 543fa9dec4Skenny liang { 553fa9dec4Skenny liang /* Enable DBG_CONTROL.l2parity_en */ 563fa9dec4Skenny liang sync_writel(CA15M_DBG_CONTROL, 573fa9dec4Skenny liang mmio_read_32(CA15M_DBG_CONTROL) | BIT_CA15M_L2PARITY_EN); 583fa9dec4Skenny liang } 59