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:
@@ -292,10 +292,17 @@ static int cvp_readjust_clock(struct msm_cvp_core *core,
|
|||||||
unsigned long lo_freq = 0;
|
unsigned long lo_freq = 0;
|
||||||
u32 j;
|
u32 j;
|
||||||
|
|
||||||
dprintk(CVP_PWR,
|
tbl = core->resources.allowed_clks_tbl;
|
||||||
"%s:%d - %d - avg_cycles %u > hi_tresh %u\n",
|
tbl_size = core->resources.allowed_clks_tbl_size;
|
||||||
__func__, __LINE__, i, avg_cycles,
|
cvp_min_rate = tbl[0].clock_rate;
|
||||||
core->dyn_clk.hi_ctrl_lim[i]);
|
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;
|
core->curr_freq = ((avg_cycles * core->dyn_clk.sum_fps[i]) << 1)/3;
|
||||||
dprintk(CVP_PWR,
|
dprintk(CVP_PWR,
|
||||||
@@ -306,11 +313,6 @@ static int cvp_readjust_clock(struct msm_cvp_core *core,
|
|||||||
core->dyn_clk.sum_fps[i],
|
core->dyn_clk.sum_fps[i],
|
||||||
core->curr_freq);
|
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) {
|
if (core->curr_freq > cvp_max_rate) {
|
||||||
core->curr_freq = cvp_max_rate;
|
core->curr_freq = cvp_max_rate;
|
||||||
lo_freq = (tbl_size > 1) ?
|
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) {
|
&& core->dyn_clk.hi_ctrl_lim[i] != 0) {
|
||||||
u32 avg_cycles =
|
u32 avg_cycles =
|
||||||
core->dyn_clk.cycle[i].total>>3;
|
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,
|
rc = cvp_readjust_clock(core,
|
||||||
avg_cycles,
|
avg_cycles,
|
||||||
i);
|
i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
mutex_unlock(&core->clk_lock);
|
mutex_unlock(&core->clk_lock);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@@ -481,8 +480,9 @@ static int cvp_fence_proc(struct msm_cvp_inst *inst,
|
|||||||
(struct eva_kmd_hfi_packet *)&hdr);
|
(struct eva_kmd_hfi_packet *)&hdr);
|
||||||
|
|
||||||
/* Only FD support dcvs at certain FW */
|
/* Only FD support dcvs at certain FW */
|
||||||
if (hdr.size == sizeof(struct cvp_hfi_msg_session_hdr_ext)
|
if (!msm_cvp_dcvs_disable &&
|
||||||
+ sizeof(struct cvp_hfi_buf_type) ) {
|
(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 *fhdr =
|
||||||
(struct cvp_hfi_msg_session_hdr_ext *)&hdr;
|
(struct cvp_hfi_msg_session_hdr_ext *)&hdr;
|
||||||
struct msm_cvp_core *core = inst->core;
|
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;
|
pkt = (struct cvp_hfi_cmd_session_hdr *)&fence_pkt->pkt_data;
|
||||||
idx = get_pkt_index((struct cvp_hal_session_cmd_pkt *)pkt);
|
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__,
|
dprintk(CVP_ERR, "%s incorrect packet %d %#x\n", __func__,
|
||||||
pkt->size, pkt->packet_type);
|
pkt->size, pkt->packet_type);
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@@ -28,6 +28,7 @@ int msm_cvp_clock_voting = !1;
|
|||||||
bool msm_cvp_syscache_disable = !true;
|
bool msm_cvp_syscache_disable = !true;
|
||||||
bool msm_cvp_dsp_disable = !true;
|
bool msm_cvp_dsp_disable = !true;
|
||||||
bool msm_cvp_mmrm_enabled = true;
|
bool msm_cvp_mmrm_enabled = true;
|
||||||
|
bool msm_cvp_dcvs_disable = !true;
|
||||||
|
|
||||||
#define MAX_DBG_BUF_SIZE 4096
|
#define MAX_DBG_BUF_SIZE 4096
|
||||||
|
|
||||||
@@ -260,6 +261,10 @@ struct dentry *msm_cvp_debugfs_init_drv(void)
|
|||||||
&msm_cvp_syscache_disable);
|
&msm_cvp_syscache_disable);
|
||||||
if (IS_ERR_OR_NULL(f))
|
if (IS_ERR_OR_NULL(f))
|
||||||
goto failed_create_dir;
|
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);
|
debugfs_create_file("cvp_power", 0644, dir, NULL, &cvp_pwr_fops);
|
||||||
|
|
||||||
|
@@ -64,6 +64,7 @@ extern int msm_cvp_clock_voting;
|
|||||||
extern bool msm_cvp_syscache_disable;
|
extern bool msm_cvp_syscache_disable;
|
||||||
extern bool msm_cvp_dsp_disable;
|
extern bool msm_cvp_dsp_disable;
|
||||||
extern bool msm_cvp_mmrm_enabled;
|
extern bool msm_cvp_mmrm_enabled;
|
||||||
|
extern bool msm_cvp_dcvs_disable;
|
||||||
|
|
||||||
#define dprintk(__level, __fmt, arg...) \
|
#define dprintk(__level, __fmt, arg...) \
|
||||||
do { \
|
do { \
|
||||||
|
Reference in New Issue
Block a user