diff --git a/driver/variant/iris2/src/msm_vidc_power_iris2.c b/driver/variant/iris2/src/msm_vidc_power_iris2.c index cc3b04be88..f6d38036f0 100644 --- a/driver/variant/iris2/src/msm_vidc_power_iris2.c +++ b/driver/variant/iris2/src/msm_vidc_power_iris2.c @@ -95,6 +95,13 @@ u64 msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 data_size) if (fps == 480) vpp_cycles += div_u64(vpp_cycles * 2, 100); + /* + * Add 5 percent extra for 720p@960fps use case + * to bump it to next level (366MHz). + */ + if (fps == 960) + vpp_cycles += div_u64(vpp_cycles * 5, 100); + /* VSP */ /* bitrate is based on fps, scale it using operating rate */ operating_rate = inst->capabilities->cap[OPERATING_RATE].value >> 16; @@ -116,9 +123,9 @@ u64 msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 data_size) } else { base_cycles = 0; vsp_cycles = div_u64(vsp_cycles, 2); - /* VSP FW Overhead 1.05 */ - vsp_cycles = div_u64(vsp_cycles * 21, 20); } + /* VSP FW Overhead 1.05 */ + vsp_cycles = div_u64(vsp_cycles * 21, 20); if (inst->capabilities->cap[STAGE].value == MSM_VIDC_STAGE_1) vsp_cycles = vsp_cycles * 3; @@ -148,9 +155,9 @@ u64 msm_vidc_calc_freq_iris2(struct msm_vidc_inst *inst, u32 data_size) } else { base_cycles = 0; vsp_cycles = div_u64(vsp_cycles, 2); - /* VSP FW overhead 1.05 */ - vsp_cycles = div_u64(vsp_cycles * 21, 20); } + /* VSP FW overhead 1.05 */ + vsp_cycles = div_u64(vsp_cycles * 21, 20); if (inst->capabilities->cap[STAGE].value == MSM_VIDC_STAGE_1) vsp_cycles = vsp_cycles * 3; diff --git a/driver/vidc/src/msm_vidc_power.c b/driver/vidc/src/msm_vidc_power.c index 4d84d36e0c..e6d7b95c69 100644 --- a/driver/vidc/src/msm_vidc_power.c +++ b/driver/vidc/src/msm_vidc_power.c @@ -84,13 +84,16 @@ static int fill_dynamic_stats(struct msm_vidc_inst *inst, u32 cf = MSM_VIDC_MAX_UBWC_COMPLEXITY_FACTOR; u32 cr = MSM_VIDC_MIN_UBWC_COMPRESSION_RATIO; u32 input_cr = MSM_VIDC_MIN_UBWC_COMPRESSION_RATIO; + u32 frame_size; if (inst->power.fw_cr) cr = inst->power.fw_cr; if (inst->power.fw_cf) { cf = inst->power.fw_cf; - cf = cf / ((msm_vidc_get_mbs_per_frame(inst)) / (32 * 8) * 3) / 2; + frame_size = (msm_vidc_get_mbs_per_frame(inst) / (32 * 8) * 3) / 2; + if (frame_size) + cf = cf / frame_size; } list_for_each_entry_safe(temp, next, &inst->enc_input_crs, list)