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
circular_buffer_setup(void)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
circular_buffer_unlock(void)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
circular_buffer_lock(void)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
clear_all_on_mux(void)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
l2c_parity_check_setup(void)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