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 <ronaldk@codeaurora.org>
This commit is contained in:
Ronald Karyodisa
2021-05-04 15:07:38 -07:00
parent e3e3be2557
commit fe9fae2af4
3 changed files with 26 additions and 19 deletions

View File

@@ -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,16 +428,13 @@ 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);
}
}
}
}
mutex_unlock(&core->clk_lock);
return rc;
@@ -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;

View File

@@ -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);

View File

@@ -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 { \