Błąd ten ujawnia się tylko w przypadku monitorów o częstotliwości odświeżania 75 Hz (i prawdopodobnie wyższych). Na ekranie okresowo widoczny jest poziomy migoczący pasek. Problem znika po ustawieniu stałej częstotliwości pamięci karty graficznej lub całkowitym wyłączeniu zarządzania energią. To skuteczne obejście problemu, ale niestety niezbyt wygodne.
Pojawiła się łatka naprawiająca błąd - aby ją wykorzystać trzeba skompilować kernel.
Łatanie kernela (Ubuntu)
Zrobimy to na przykładzie jądra 5.3-rc4, które było najnowszym w chili pisania postu. Aktualne źródła można znaleźć na kernel.org.Przygotowujemy środowisko do zbudowania jądra, instalując potrzebne pakiety:
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
Pobieramy źródła jądra i rozpakowujemy je:
wget https://git.kernel.org/torvalds/t/linux-5.3-rc4.tar.gz tar xvzf linux-5.3-rc4.tar.gz
Pobieramy łatkę i zapisujemy ją jako 0001-drm-amd-powerplay-enforce-minimal-VBITimeout.patch
Dopiero teraz wchodzimy do rozpakowanego katalogu z jądrem:
cd kernel/linux-5.3-rc4/
Aplikujemy łatkę:
patch -p1 < ../0001-drm-amd-powerplay-enforce-minimal-VBITimeout.patch
Kopiujemy konfigurację jądra z naszej dystrybucji:
cp /boot/config-$(uname -r) .config
Konfigurujemy interesujące nas opcje ręcznie:
make menuconfig
Kompilujemy i instalujemy jądro oraz moduły (wartość po -j należy dostosować do liczby rdzeni procesora):
make -j16 sudo make modules_install sudo make install
W tym miejscu okazuje się, że plik initrd jest bardzo duży. Musimy go zmniejszyć usuwając niepotrzebne symbole z modułów jądra:
cd /lib/modules/5.3.0-rc4/ sudo find . -name *.ko -exec strip --strip-unneeded {} + sudo update-initramfs -c -k 5.3.0-rc4 sudo update-grub
Po tym wszystkim wystarczy zrestartotwać komputer i cieszyć się prawidłowo wyświetlanym obrazem.