Преглед изворни кода

Merge "msm: vidc: Force nominal for high bitrate decode usecases"

qctecmdr пре 4 година
родитељ
комит
c0c23916cc
1 измењених фајлова са 9 додато и 2 уклоњено
  1. 9 2
      driver/variant/iris2/src/msm_vidc_power_iris2.c

+ 9 - 2
driver/variant/iris2/src/msm_vidc_power_iris2.c

@@ -16,7 +16,7 @@ u64 msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 data_size)
 	struct msm_vidc_core* core;
 	struct msm_vidc_power* power;
 	u64 vsp_cycles = 0, vpp_cycles = 0, fw_cycles = 0;
-	u64 fw_vpp_cycles = 0;
+	u64 fw_vpp_cycles = 0, bitrate = 0;
 	u32 vpp_cycles_per_mb;
 	u32 mbs_per_second;
 	u32 operating_rate, vsp_factor_num = 1, vsp_factor_den = 1;
@@ -145,7 +145,8 @@ u64 msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 data_size)
 		/* VSP */
 		base_cycles = inst->has_bframe ?
 				80 : inst->capabilities->cap[MB_CYCLES_VSP].value;
-		vsp_cycles = fps * data_size * 8;
+		bitrate = fps * data_size * 8;
+		vsp_cycles = bitrate;
 
 		if (inst->codec == MSM_VIDC_VP9) {
 			vsp_cycles = div_u64(vsp_cycles * 170, 100);
@@ -164,6 +165,12 @@ u64 msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 data_size)
 
 		vsp_cycles += mbs_per_second * base_cycles;
 
+		if (inst->codec == MSM_VIDC_VP9 &&
+				inst->capabilities->cap[STAGE].value ==
+					MSM_VIDC_STAGE_2 &&
+				inst->capabilities->cap[PIPE].value == 4 &&
+				bitrate > 90000000)
+			vsp_cycles = msm_vidc_max_freq(inst);
 	} else {
 		i_vpr_e(inst, "%s: Unknown session type\n", __func__);
 		return msm_vidc_max_freq(inst);