Browse Source

msm: cvp: Fix dynamic clock voting

Prevent dcvs voting below the current aggregated clock.

Change-Id: Ie3ea259521a7b241cdef40a049563f054b089687
Signed-off-by: Ronald Karyodisa <[email protected]>
Ronald Karyodisa 3 years ago
parent
commit
27132cb626
2 changed files with 10 additions and 0 deletions
  1. 9 0
      msm/eva/msm_cvp.c
  2. 1 0
      msm/eva/msm_cvp_internal.h

+ 9 - 0
msm/eva/msm_cvp.c

@@ -333,6 +333,14 @@ static int cvp_readjust_clock(struct msm_cvp_core *core,
 		lo_freq = tbl[j-1].clock_rate;
 	}
 
+	if (core->orig_core_sum > core->curr_freq) {
+		dprintk(CVP_PWR,
+			"%s - %d - Cancel readjust, core %u, freq %u\n",
+			__func__, i, core->orig_core_sum, core->curr_freq);
+		core->curr_freq = tmp;
+		return rc;
+	}
+
 	dprintk(CVP_PWR,
 			"%s:%d - %d - Readjust to %u\n",
 			__func__, __LINE__, i, core->curr_freq);
@@ -957,6 +965,7 @@ static int adjust_bw_freqs(void)
 
 	tmp = core->curr_freq;
 	core->curr_freq = core_sum;
+	core->orig_core_sum = core_sum;
 	rc = msm_cvp_set_clocks(core);
 	if (rc) {
 		dprintk(CVP_ERR,

+ 1 - 0
msm/eva/msm_cvp_internal.h

@@ -358,6 +358,7 @@ struct msm_cvp_core {
 	u32 ssr_count;
 	bool trigger_ssr;
 	unsigned long curr_freq;
+	unsigned long orig_core_sum;
 	struct cvp_cycle_info dyn_clk;
 	atomic64_t kernel_trans_id;
 	struct cvp_debug_log log;