drm/amd/display: Fix LFC multiplier changing erratically
authorAnthony Koo <Anthony.Koo@amd.com>
Wed, 29 Jul 2020 21:33:27 +0000 (17:33 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Sep 2020 09:29:32 +0000 (11:29 +0200)
commit04e7daa61fd7bc2555243ef9ed3d050311e6cbb4
tree4392040479fe93e48570000cec16171686fe1a21
parent757460fe235155690e7de6142b8740718852f655
drm/amd/display: Fix LFC multiplier changing erratically

[ Upstream commit e4ed4dbbc8383d42a197da8fe7ca6434b0f14def ]

[Why]
1. There is a calculation that is using frame_time_in_us instead of
last_render_time_in_us to calculate whether choosing an LFC multiplier
would cause the inserted frame duration to be outside of range.

2. We do not handle unsigned integer subtraction correctly and it underflows
to a really large value, which causes some logic errors.

[How]
1. Fix logic to calculate 'within range' using last_render_time_in_us
2. Split out delta_from_mid_point_delta_in_us calculation to ensure
we don't underflow and wrap around

Signed-off-by: Anthony Koo <Anthony.Koo@amd.com>
Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/modules/freesync/freesync.c