mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-08-17 18:07:01 +02:00
DCM means dynamic clock management, and it can dynamically slow down or gate clocks during CPU or bus idle. 1. Add MCUSYS related DCM drivers. 2. Enable MCUSYS related DCM by default. TEST=build pass BUG=b:202871018 Signed-off-by: Edward-JW Yang <edward-jw.yang@mediatek.corp-partner.google.com> Change-Id: Idc669364c89cde0974d2940bd12987ee833d1965
67 lines
1.6 KiB
C
67 lines
1.6 KiB
C
/*
|
|
* Copyright (c) 2021, MediaTek Inc. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <common/debug.h>
|
|
#include <mtk_dcm.h>
|
|
#include <mtk_dcm_utils.h>
|
|
|
|
static void dcm_armcore(bool mode)
|
|
{
|
|
dcm_mp_cpusys_top_bus_pll_div_dcm(mode);
|
|
dcm_mp_cpusys_top_cpu_pll_div_0_dcm(mode);
|
|
dcm_mp_cpusys_top_cpu_pll_div_1_dcm(mode);
|
|
}
|
|
|
|
static void dcm_mcusys(bool on)
|
|
{
|
|
dcm_mp_cpusys_top_adb_dcm(on);
|
|
dcm_mp_cpusys_top_apb_dcm(on);
|
|
dcm_mp_cpusys_top_cpubiu_dcm(on);
|
|
dcm_mp_cpusys_top_cpubiu_dbg_cg(on);
|
|
dcm_mp_cpusys_top_misc_dcm(on);
|
|
dcm_mp_cpusys_top_mp0_qdcm(on);
|
|
dcm_cpccfg_reg_emi_wfifo(on);
|
|
dcm_mp_cpusys_top_last_cor_idle_dcm(on);
|
|
}
|
|
|
|
static void dcm_stall(bool on)
|
|
{
|
|
dcm_mp_cpusys_top_core_stall_dcm(on);
|
|
dcm_mp_cpusys_top_fcm_stall_dcm(on);
|
|
}
|
|
|
|
static bool check_dcm_state(void)
|
|
{
|
|
bool ret = true;
|
|
|
|
ret &= dcm_mp_cpusys_top_bus_pll_div_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_cpu_pll_div_0_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_cpu_pll_div_1_dcm_is_on();
|
|
|
|
ret &= dcm_mp_cpusys_top_adb_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_apb_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_cpubiu_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_cpubiu_dbg_cg_is_on();
|
|
ret &= dcm_mp_cpusys_top_misc_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_mp0_qdcm_is_on();
|
|
ret &= dcm_cpccfg_reg_emi_wfifo_is_on();
|
|
ret &= dcm_mp_cpusys_top_last_cor_idle_dcm_is_on();
|
|
|
|
ret &= dcm_mp_cpusys_top_core_stall_dcm_is_on();
|
|
ret &= dcm_mp_cpusys_top_fcm_stall_dcm_is_on();
|
|
|
|
return ret;
|
|
}
|
|
|
|
void dcm_set_default(void)
|
|
{
|
|
dcm_armcore(true);
|
|
dcm_mcusys(true);
|
|
dcm_stall(true);
|
|
|
|
INFO("%s: %d", __func__, check_dcm_state());
|
|
}
|