Parcourir la source

Merge "msm: vidc: enable DCVS for non realtime sessions"

qctecmdr il y a 2 ans
Parent
commit
99d3bd665c

+ 0 - 6
driver/vidc/src/msm_vidc_driver.c

@@ -2707,12 +2707,6 @@ void msm_vidc_allow_dcvs(struct msm_vidc_inst *inst)
 		goto exit;
 	}
 
-	allow = is_realtime_session(inst);
-	if (!allow) {
-		i_vpr_h(inst, "%s: non-realtime session\n", __func__);
-		goto exit;
-	}
-
 	allow = !is_critical_priority_session(inst);
 	if (!allow) {
 		i_vpr_h(inst, "%s: critical priority session\n", __func__);

+ 11 - 2
driver/vidc/src/msm_vidc_power.c

@@ -293,7 +293,7 @@ int msm_vidc_scale_buses(struct msm_vidc_inst *inst)
 
 		/* scale bitrate if operating rate is larger than frame rate */
 		frame_rate = msm_vidc_get_frame_rate(inst);
-		operating_rate = msm_vidc_get_frame_rate(inst);
+		operating_rate = inst->max_rate;
 		if (frame_rate && operating_rate && operating_rate > frame_rate)
 			vote_data->bitrate = (vote_data->bitrate / frame_rate) * operating_rate;
 
@@ -575,7 +575,16 @@ int msm_vidc_scale_power(struct msm_vidc_inst *inst, bool scale_buses)
 	frame_rate = msm_vidc_get_frame_rate(inst);
 	operating_rate = msm_vidc_get_operating_rate(inst);
 	fps = max(frame_rate, operating_rate);
-	if (is_decode_session(inst)) {
+	/*
+	 * Consider input queuing rate power scaling in below scenarios
+	 * decoder: non-realtime and realtime as well because client
+	 *          may not set the frame rate / operating rate and
+	 *          we need to rely on input queue rate
+	 * encoder: non-realtime only, for realtime client is expected to
+	 *          queue input buffers at the set frame rate / operating rate
+	 */
+	if (is_decode_session(inst) ||
+		(is_encode_session(inst) && !is_realtime_session(inst))) {
 		/*
 		 * when buffer detected fps is more than client set value by 12.5%,
 		 * utilize buffer detected fps to scale clock.

+ 1 - 1
driver/vidc/src/msm_vidc_vb2.c

@@ -669,7 +669,7 @@ void msm_vb2_buf_queue(struct vb2_buffer *vb2)
 	}
 	inst->last_qbuf_time_ns = ktime_ns;
 
-	if (is_decode_session(inst) && vb2->type == INPUT_MPLANE) {
+	if (vb2->type == INPUT_MPLANE) {
 		rc = msm_vidc_update_input_rate(inst, div_u64(ktime_ns, 1000));
 		if (rc)
 			goto unlock;