有没有办法修复使用 Mobility Radeon HD 3400 系列 GPU 的 Ubuntu 20 上的屏幕线条/闪烁

有没有办法修复使用 Mobility Radeon HD 3400 系列 GPU 的 Ubuntu 20 上的屏幕线条/闪烁

我一直试图在我的东芝 A300 笔记本电脑上安装 ubuntu 20,但在新安装的 ubuntu 20(18 也存在同样的问题)上出现了奇怪的线条/闪烁效果,如下所示,这是可见的对角线,它们在屏幕上移动,有谁遇到过这个问题并知道该如何解决吗?

对角线效果

我尝试设置以下启动选项的各种组合,但没有成功

nolapic
noapic
acpi=off
pnpacpi=off
radeon.dpm=0

唯一能消除这些线条的解决方案是使用nomodeset,这会导致使用较低的分辨率,而且据我所知,这将导致使用默认驱动程序而不是 radeon 驱动程序,这意味着图形加速也会关闭,所以并不是很理想。

我也尝试了 Fedora 31,它也存在同样的问题,这让我认为这可能是开源 radeon 驱动程序的问题,但我在日志文件中找不到任何内容来表明是否是这种情况。

我目前安装了 ubuntu 16,因为 18 和 20 都有这个问题,但是我从 ubuntu 20 的活动磁盘中捕获了下面的日志和输出。

uname -a

Linux ubuntu 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

lspci -vvvnn (仅限 gpu)

01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] RV620/M82 [Mobility Radeon HD 3450/3470] [1002:95c4] (prog-if 00 [VGA controller])
    Subsystem: Toshiba Corporation RV620/M82 [Mobility Radeon HD 3450/3470] [1179:ff50]
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 30
    Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M]
    Region 2: Memory at f0200000 (64-bit, non-prefetchable) [size=64K]
    Region 4: I/O ports at 2000 [size=256]
    Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
    Capabilities: [50] Power Management version 3
        Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Capabilities: [58] Express (v2) Legacy Endpoint, MSI 00
        DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
            ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
        DevCtl: CorrErr- NonFatalErr- FatalErr- UnsupReq-
            RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
            MaxPayload 128 bytes, MaxReadReq 128 bytes
        DevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
        LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
            ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp-
        LnkCtl: ASPM L0s L1 Enabled; RCB 64 bytes Disabled- CommClk+
            ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
        LnkSta: Speed 2.5GT/s (ok), Width x16 (ok)
            TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
        DevCap2: Completion Timeout: Not Supported, TimeoutDis-, NROPrPrP-, LTR-
             10BitTagComp-, 10BitTagReq-, OBFF Not Supported, ExtFmt-, EETLPPrefix-
             EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
             FRS-
             AtomicOpsCap: 32bit- 64bit- 128bitCAS-
        DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
             AtomicOpsCtl: ReqEn-
        LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
             Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
             Compliance De-emphasis: -6dB
        LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-
             EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
    Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
        Address: 00000000fee01004  Data: 4029
    Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Kernel driver in use: radeon
    Kernel modules: radeon

输出自modinfo radeon 这里和 dmesg.log这里其中确实包含一些 acpi 错误。

答案1

对于遇到此问题的其他任何人,解决方案是使用来自的补丁编译自己的内核https://lists.freedesktop.org/archives/dri-devel/2020-August/277528.html(如下所示)仍可在内核 5.19.0-43 上运行(在 ubuntu 22 上测试)

---
 drivers/gpu/drm/radeon/radeon_display.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index e0ae911ef427..7b69d6dfe44a 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -933,7 +933,7 @@ static void avivo_get_fb_ref_div(unsigned nom, unsigned den, unsigned post_div,
 
    /* get matching reference and feedback divider */
    *ref_div = min(max(den/post_div, 1u), ref_div_max);
-   *fb_div = DIV_ROUND_CLOSEST(nom * *ref_div * post_div, den);
+   *fb_div = max(nom * *ref_div * post_div / den, 1u);
 
    /* limit fb divider to its maximum */
    if (*fb_div > fb_div_max) {
-- 

这个问题也有一个错误单,但似乎没有任何进展https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1861554

相关内容