diff options
| author | Dave Airlie <airlied@redhat.com> | 2021-11-02 12:40:57 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2021-11-02 12:40:58 +1000 | 
| commit | d9bd054177fbd2c4762546aec40fc3071bfe4cc0 (patch) | |
| tree | 70e34d106c87a7a7fefb810213786a0b8a19b69c /drivers/gpu/drm/amd/display/modules/freesync/freesync.c | |
| parent | 31fa8cbce4664946a1688898410fee41ad05364d (diff) | |
| parent | 403475be6d8b122c3e6b8a47e075926d7299e5ef (diff) | |
Merge tag 'amd-drm-next-5.16-2021-10-29' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-5.16-2021-10-29:
amdgpu:
- RAS fixes
- Fix a potential memory leak in device tear down
- Add a stutter mode quirk
- Misc display fixes
- Further display FP refactoring
- Display USB4 fixes
- Display DP2.0 fixes
- DCN 3.1 fixes
- Display 8 ch audio fix
- Fix DMA mask regression for SI parts
- Aldebaran fixes
amdkfd:
- userptr fix
- BO lifetime fix
- Misc code cleanup
UAPI:
- Minor header cleanup (no functional change)
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211029184338.4863-1-alexander.deucher@amd.com
Diffstat (limited to 'drivers/gpu/drm/amd/display/modules/freesync/freesync.c')
| -rw-r--r-- | drivers/gpu/drm/amd/display/modules/freesync/freesync.c | 15 | 
1 files changed, 12 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c index b99aa232bd8b..bd1d1dc93629 100644 --- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c @@ -155,9 +155,18 @@ static unsigned int calc_v_total_from_duration(  	if (duration_in_us > vrr->max_duration_in_us)  		duration_in_us = vrr->max_duration_in_us; -	v_total = div64_u64(div64_u64(((unsigned long long)( -				duration_in_us) * (stream->timing.pix_clk_100hz / 10)), -				stream->timing.h_total), 1000); +	if (dc_is_hdmi_signal(stream->signal)) { +		uint32_t h_total_up_scaled; + +		h_total_up_scaled = stream->timing.h_total * 10000; +		v_total = div_u64((unsigned long long)duration_in_us +					* stream->timing.pix_clk_100hz + (h_total_up_scaled - 1), +					h_total_up_scaled); +	} else { +		v_total = div64_u64(div64_u64(((unsigned long long)( +					duration_in_us) * (stream->timing.pix_clk_100hz / 10)), +					stream->timing.h_total), 1000); +	}  	/* v_total cannot be less than nominal */  	if (v_total < stream->timing.v_total) { | 
