Переглянути джерело

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 <[email protected]>
Ronald Karyodisa 3 роки тому
батько
коміт
fe9fae2af4
3 змінених файлів з 26 додано та 19 видалено
  1. 20 19
      msm/eva/msm_cvp.c
  2. 5 0
      msm/eva/msm_cvp_debug.c
  3. 1 0
      msm/eva/msm_cvp_debug.h

+ 20 - 19
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;

+ 5 - 0
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);
 

+ 1 - 0
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 { \