mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 03:24:19 +02:00
drm/amd/display: Prevent overflow on DTO calculation
[Why] uint32_t is implicitly converted to uint64_t while multiplication still happens on uint32_t side. This creates digit overflow for large pixel clock which is meant to be retained in uint64_t. [How] Calculate multiplication of units in uint64_t domain instead of uint32_t in DTO parameter clock caculation. Reviewed-by: Alvin Lee <alvin.lee2@amd.com> Acked-by: Zaeem Mohamed <zaeem.mohamed@amd.com> Signed-off-by: Chris Park <chris.park@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
ed79ab5a07
commit
8362061eed
|
|
@ -1088,11 +1088,15 @@ static bool dcn401_program_pix_clk(
|
|||
dto_params.clk_src = DPREFCLK;
|
||||
|
||||
if (e) {
|
||||
dto_params.pixclk_hz = e->target_pixel_rate_khz * e->mult_factor;
|
||||
dto_params.refclk_hz = dtbclk_p_src_clk_khz * e->div_factor;
|
||||
dto_params.pixclk_hz = e->target_pixel_rate_khz;
|
||||
dto_params.pixclk_hz *= e->mult_factor;
|
||||
dto_params.refclk_hz = dtbclk_p_src_clk_khz;
|
||||
dto_params.refclk_hz *= e->div_factor;
|
||||
} else {
|
||||
dto_params.pixclk_hz = pix_clk_params->requested_pix_clk_100hz * 100;
|
||||
dto_params.refclk_hz = dtbclk_p_src_clk_khz * 1000;
|
||||
dto_params.pixclk_hz = pix_clk_params->requested_pix_clk_100hz;
|
||||
dto_params.pixclk_hz *= 100;
|
||||
dto_params.refclk_hz = dtbclk_p_src_clk_khz;
|
||||
dto_params.refclk_hz *= 1000;
|
||||
}
|
||||
|
||||
/* enable DP DTO */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user