diff --git a/msm/vidc/msm_vidc_clocks.c b/msm/vidc/msm_vidc_clocks.c index 9a4716ef16eb..13a3bf130977 100644 --- a/msm/vidc/msm_vidc_clocks.c +++ b/msm/vidc/msm_vidc_clocks.c @@ -679,6 +679,7 @@ static unsigned long msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 operating_rate, vsp_factor_num = 1, vsp_factor_den = 1; u32 base_cycles = 0; u32 codec = 0; + u64 bitrate = 0; core = inst->core; dcvs = &inst->clk_data; @@ -768,7 +769,8 @@ static unsigned long msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, codec = get_v4l2_codec(inst); base_cycles = inst->has_bframe ? 80 : inst->clk_data.entry->vsp_cycles; - vsp_cycles = fps * filled_len * 8; + bitrate = fps * filled_len * 8; + vsp_cycles = bitrate; if (codec == V4L2_PIX_FMT_VP9) { vsp_cycles = div_u64(vsp_cycles * 170, 100); @@ -786,6 +788,11 @@ static unsigned long msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, vsp_cycles += mbs_per_second * base_cycles; + if (codec == V4L2_PIX_FMT_VP9 && + inst->clk_data.work_mode == HFI_WORKMODE_2 && + inst->clk_data.work_route == 4 && + bitrate > 90000000) + vsp_cycles = msm_vidc_max_freq(inst->core, inst->sid); } else { s_vpr_e(inst->sid, "%s: Unknown session type\n", __func__); return msm_vidc_max_freq(inst->core, inst->sid);