drm/amd/display: handle max_downscale_src_width fail check
[ Upstream commit 02a940da2ccc0cc0299811379580852b405a0ea2 ] [WHY] If max_downscale_src_width check fails, we exit early from TAP calculation and left a NULL value to the scaling data structure to cause the zero divide in the DML validation. [HOW] Call set default TAP calculation before early exit in get_optimal_number_of_taps due to max downscale limit exceed. Reviewed-by: Samson Tam <samson.tam@amd.com> Signed-off-by: Yihan Zhu <Yihan.Zhu@amd.com> Signed-off-by: Zaeem Mohamed <zaeem.mohamed@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7472e0da47
commit
ec6f764ab7
@@ -392,11 +392,6 @@ bool dpp3_get_optimal_number_of_taps(
|
|||||||
int min_taps_y, min_taps_c;
|
int min_taps_y, min_taps_c;
|
||||||
enum lb_memory_config lb_config;
|
enum lb_memory_config lb_config;
|
||||||
|
|
||||||
if (scl_data->viewport.width > scl_data->h_active &&
|
|
||||||
dpp->ctx->dc->debug.max_downscale_src_width != 0 &&
|
|
||||||
scl_data->viewport.width > dpp->ctx->dc->debug.max_downscale_src_width)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set default taps if none are provided
|
* Set default taps if none are provided
|
||||||
* From programming guide: taps = min{ ceil(2*H_RATIO,1), 8} for downscaling
|
* From programming guide: taps = min{ ceil(2*H_RATIO,1), 8} for downscaling
|
||||||
@@ -434,6 +429,12 @@ bool dpp3_get_optimal_number_of_taps(
|
|||||||
else
|
else
|
||||||
scl_data->taps.h_taps_c = in_taps->h_taps_c;
|
scl_data->taps.h_taps_c = in_taps->h_taps_c;
|
||||||
|
|
||||||
|
// Avoid null data in the scl data with this early return, proceed non-adaptive calcualtion first
|
||||||
|
if (scl_data->viewport.width > scl_data->h_active &&
|
||||||
|
dpp->ctx->dc->debug.max_downscale_src_width != 0 &&
|
||||||
|
scl_data->viewport.width > dpp->ctx->dc->debug.max_downscale_src_width)
|
||||||
|
return false;
|
||||||
|
|
||||||
/*Ensure we can support the requested number of vtaps*/
|
/*Ensure we can support the requested number of vtaps*/
|
||||||
min_taps_y = dc_fixpt_ceil(scl_data->ratios.vert);
|
min_taps_y = dc_fixpt_ceil(scl_data->ratios.vert);
|
||||||
min_taps_c = dc_fixpt_ceil(scl_data->ratios.vert_c);
|
min_taps_c = dc_fixpt_ceil(scl_data->ratios.vert_c);
|
||||||
|
Reference in New Issue
Block a user