From fe9fae2af4aae4153a976ce697330dcb99f0d7e5 Mon Sep 17 00:00:00 2001 From: Ronald Karyodisa Date: Tue, 4 May 2021 15:07:38 -0700 Subject: [PATCH] msm: eva: Add debug option to disable DCVS Add debug option using debugfs to disable DCVS. Add extra check for DCVS. Change-Id: I989ef72857dde306fa0ca9466843ebc1d2b30f85 Signed-off-by: Ronald Karyodisa --- msm/eva/msm_cvp.c | 39 ++++++++++++++++++++------------------- msm/eva/msm_cvp_debug.c | 5 +++++ msm/eva/msm_cvp_debug.h | 1 + 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/msm/eva/msm_cvp.c b/msm/eva/msm_cvp.c index df5ada125d..17cf7c153b 100644 --- a/msm/eva/msm_cvp.c +++ b/msm/eva/msm_cvp.c @@ -292,10 +292,17 @@ static int cvp_readjust_clock(struct msm_cvp_core *core, unsigned long lo_freq = 0; u32 j; - dprintk(CVP_PWR, - "%s:%d - %d - avg_cycles %u > hi_tresh %u\n", - __func__, __LINE__, i, avg_cycles, - core->dyn_clk.hi_ctrl_lim[i]); + tbl = core->resources.allowed_clks_tbl; + tbl_size = core->resources.allowed_clks_tbl_size; + cvp_min_rate = tbl[0].clock_rate; + cvp_max_rate = tbl[tbl_size - 1].clock_rate; + + if (!((avg_cycles > core->dyn_clk.hi_ctrl_lim[i] && + core->curr_freq != cvp_max_rate) || + (avg_cycles <= core->dyn_clk.lo_ctrl_lim[i] && + core->curr_freq != cvp_min_rate))) { + return rc; + } core->curr_freq = ((avg_cycles * core->dyn_clk.sum_fps[i]) << 1)/3; dprintk(CVP_PWR, @@ -306,11 +313,6 @@ static int cvp_readjust_clock(struct msm_cvp_core *core, core->dyn_clk.sum_fps[i], core->curr_freq); - tbl = core->resources.allowed_clks_tbl; - tbl_size = core->resources.allowed_clks_tbl_size; - cvp_min_rate = tbl[0].clock_rate; - cvp_max_rate = tbl[tbl_size - 1].clock_rate; - if (core->curr_freq > cvp_max_rate) { core->curr_freq = cvp_max_rate; lo_freq = (tbl_size > 1) ? @@ -426,13 +428,10 @@ static int cvp_check_clock(struct msm_cvp_inst *inst, && core->dyn_clk.hi_ctrl_lim[i] != 0) { u32 avg_cycles = core->dyn_clk.cycle[i].total>>3; - if ((avg_cycles > core->dyn_clk.hi_ctrl_lim[i]) - || (avg_cycles <= - core->dyn_clk.lo_ctrl_lim[i])) { - rc = cvp_readjust_clock(core, - avg_cycles, - i); - } + + rc = cvp_readjust_clock(core, + avg_cycles, + i); } } } @@ -481,8 +480,9 @@ static int cvp_fence_proc(struct msm_cvp_inst *inst, (struct eva_kmd_hfi_packet *)&hdr); /* Only FD support dcvs at certain FW */ - if (hdr.size == sizeof(struct cvp_hfi_msg_session_hdr_ext) - + sizeof(struct cvp_hfi_buf_type) ) { + if (!msm_cvp_dcvs_disable && + (hdr.size == sizeof(struct cvp_hfi_msg_session_hdr_ext) + + sizeof(struct cvp_hfi_buf_type))) { struct cvp_hfi_msg_session_hdr_ext *fhdr = (struct cvp_hfi_msg_session_hdr_ext *)&hdr; struct msm_cvp_core *core = inst->core; @@ -664,7 +664,8 @@ static int msm_cvp_session_process_hfi_fence(struct msm_cvp_inst *inst, pkt = (struct cvp_hfi_cmd_session_hdr *)&fence_pkt->pkt_data; idx = get_pkt_index((struct cvp_hal_session_cmd_pkt *)pkt); - if (idx < 0 || (pkt->size > MAX_HFI_FENCE_OFFSET * sizeof(unsigned int))) { + if (idx < 0 || + (pkt->size > MAX_HFI_FENCE_OFFSET * sizeof(unsigned int))) { dprintk(CVP_ERR, "%s incorrect packet %d %#x\n", __func__, pkt->size, pkt->packet_type); goto exit; diff --git a/msm/eva/msm_cvp_debug.c b/msm/eva/msm_cvp_debug.c index 51b3fa3ab0..68487ab5e8 100644 --- a/msm/eva/msm_cvp_debug.c +++ b/msm/eva/msm_cvp_debug.c @@ -28,6 +28,7 @@ int msm_cvp_clock_voting = !1; bool msm_cvp_syscache_disable = !true; bool msm_cvp_dsp_disable = !true; bool msm_cvp_mmrm_enabled = true; +bool msm_cvp_dcvs_disable = !true; #define MAX_DBG_BUF_SIZE 4096 @@ -260,6 +261,10 @@ struct dentry *msm_cvp_debugfs_init_drv(void) &msm_cvp_syscache_disable); if (IS_ERR_OR_NULL(f)) goto failed_create_dir; + f = debugfs_create_bool("disable_dcvs", 0644, dir, + &msm_cvp_dcvs_disable); + if (IS_ERR_OR_NULL(f)) + goto failed_create_dir; debugfs_create_file("cvp_power", 0644, dir, NULL, &cvp_pwr_fops); diff --git a/msm/eva/msm_cvp_debug.h b/msm/eva/msm_cvp_debug.h index c1fb775663..23912b9023 100644 --- a/msm/eva/msm_cvp_debug.h +++ b/msm/eva/msm_cvp_debug.h @@ -64,6 +64,7 @@ extern int msm_cvp_clock_voting; extern bool msm_cvp_syscache_disable; extern bool msm_cvp_dsp_disable; extern bool msm_cvp_mmrm_enabled; +extern bool msm_cvp_dcvs_disable; #define dprintk(__level, __fmt, arg...) \ do { \