From: Austin Zheng <[email protected]> [Why/How] Row bandwidth contribution to lb_flip_bw was refactored to only consider bandwidth needed for a single row. row_time_budget is for 2 row's worth of time but only half is needed when calculating the row bandwidth used in the lb_flip_bw calculation.
Also add meta row bytes that was accidentally removed during previous refactor. Reviewed-by: Dillon Varone <[email protected]> Signed-off-by: Austin Zheng <[email protected]> Signed-off-by: Ivan Lipski <[email protected]> --- .../dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c index 5a1b710b9ec8f..9a205b0e15989 100644 --- a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c +++ b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c @@ -6654,7 +6654,7 @@ static void CalculateFlipSchedule( l->lb_flip_bw = math_max3( l->hvm_scaled_vm_row_bytes / l->vm_and_row_time_budget, l->hvm_scaled_vm_bytes / math_min2(l->vm_time_budget, 31.75 * LineTime - Tno_bw_flip), - l->dpte_row_bytes * HostVMInefficiencyFactor / math_min2(l->row_time_budget, 15.75 * LineTime)); + (l->dpte_row_bytes * HostVMInefficiencyFactor + meta_row_bytes) / math_min2(l->row_time_budget / 2, 15.75 * LineTime)); //use bandwidth for a single row #ifdef __DML_VBA_DEBUG__ DML_LOG_VERBOSE("DML::%s: max_flip_time = %f\n", __func__, l->max_flip_time); DML_LOG_VERBOSE("DML::%s: total vm bytes (hvm ineff scaled) = %f\n", __func__, l->hvm_scaled_vm_bytes); @@ -6681,7 +6681,7 @@ static void CalculateFlipSchedule( Tno_bw_flip + vm_bytes * HostVMInefficiencyFactor / l->lb_flip_bw, LineTime / 4.0); l->Tr0_flip = math_max3(Tr0_trips_flip, - l->dpte_row_bytes * HostVMInefficiencyFactor / l->lb_flip_bw, + (l->dpte_row_bytes * HostVMInefficiencyFactor + meta_row_bytes) / l->lb_flip_bw, LineTime / 4.0); *dst_y_per_vm_flip = math_ceil2(4.0 * l->Tvm_flip / LineTime, 1.0) / 4.0; -- 2.43.0
