Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu/vce1: Workaround PLL timeout on FirePro W9000

Sometimes the VCE PLL times out waiting for CTLACK/CTLACK2.
When it happens, the VCE still works, but much slower.
Observed on a Tahiti GPU, but not all:
- FirePro W9000 has the issue
- Radeon R9 280X not affected
- Radeon HD 7990 not affected

As a workaround, on the affected chip just don't put the
VCE PLL in sleep mode. Leaving the VCE PLL in bypass mode
or reset mode both work. Using bypass mode is simpler.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Timur Kristóf and committed by
Alex Deucher
baefc7cd eabc7166

+8
+8
drivers/gpu/drm/amd/amdgpu/si.c
··· 1918 1918 ~VCEPLL_BYPASS_EN_MASK); 1919 1919 1920 1920 if (!evclk || !ecclk) { 1921 + /* 1922 + * On some chips, the PLL takes way too long to get out of 1923 + * sleep mode, causing a timeout waiting on CTLACK/CTLACK2. 1924 + * Leave the PLL running in bypass mode. 1925 + */ 1926 + if (adev->pdev->device == 0x6780) 1927 + return 0; 1928 + 1921 1929 /* Keep the Bypass mode, put PLL to sleep */ 1922 1930 WREG32_SMC_P(CG_VCEPLL_FUNC_CNTL, VCEPLL_SLEEP_MASK, 1923 1931 ~VCEPLL_SLEEP_MASK);