当前位置: 首页 > news >正文

HP Z66 G6 外接显示器无信号排查:amdgpu DCN 3.1 EDID 超时与 HDMI 2.1 FRL 协商问题

问题现象

HP Z66 G6 14 (AMD Ryzen 7 H 255, Fedora 44, kernel 7.0.8) 通过 HDMI 线直连 5K 外接显示器,显示器提示"无信号"。

笔记本内屏 (eDP-1, 3072x1920@120Hz) 正常工作,但 HDMI-A-1 始终显示 disconnected。

诊断过程

1. 检查连接状态

$ cat /sys/class/drm/card1-HDMI-A-1/status disconnected $ xrandr | grep HDMI HDMI-1 disconnected

系统层面 HDMI 口确实未检测到显示器。

2. 内核日志分析

$ sudo dmesg | grep -i "hdmi\|EDID" [ 79.746] [drm:dm_helpers_read_local_edid [amdgpu]] *ERROR* EDID err: 2, on connector: HDMI-A-1 [ 79.747] amdgpu 0000:05:00.0: [drm] *ERROR* No EDID read. [ 87.196] [drm:dm_helpers_read_local_edid [amdgpu]] *ERROR* EDID err: 2, on connector: HDMI-A-1 [ 141.047] [drm:dm_helpers_read_local_edid [amdgpu]] *ERROR* EDID err: 2, on connector: HDMI-A-1 [ 148.277] [drm:dm_helpers_read_local_edid [amdgpu]] *ERROR* EDID err: 2, on connector: HDMI-A-1

驱动在 79~148 秒之间尝试了 4 次 EDID 读取,全部失败(err: 2)。

3. 关键线索

[ 4.378] amdgpu 0000:05:00.0: [drm] DP-HDMI FRL PCON supported

Z66 的 HDMI 口内部走的是DisplayPort 转 HDMI(PCON = Protocol Converter),5K 显示器需要 HDMI 2.1 的FRL(Fixed Rate Link)高带宽模式。

根因分析

问题链条如下:

  1. 开机时 HDMI 线已插入,amdgpu 驱动在第 79 秒尝试读取 EDID
  2. 此时显示器的 HDMI 接收器还未完成 FRL 链路训练(5K 需要 HDMI 2.1 高带宽模式,协商时间更长)
  3. EDID 读取超时失败,驱动重试 4 次后放弃,标记为 disconnected
  4. 驱动不会自动重试 – 除非物理拔插触发新的热插拔事件

拔插 HDMI 线后,显示器 FRL 协商已就绪,重新握手成功,5K 输出正常。

热插拔后的 DCN 3.1 compbuf 超时

拔插恢复后,再次出现信号丢失。dmesg 显示:

[drm] REG_WAIT timeout 1us * 100 tries - dcn31_program_compbuf_size line:141 WARNING: drivers/gpu/drm/amd/amdgpu/../display/dc/hubbub/dcn31/dcn31_hubbub.c:151 at dcn31_program_compbuf_size+0xd0/0x220 [amdgpu] Call Trace: dcn20_optimize_bandwidth+0xee/0x250 [amdgpu] dc_commit_state_no_check+0x91c/0xf10 [amdgpu] dc_commit_streams+0x362/0x750 [amdgpu] amdgpu_dm_commit_streams+0x563/0x7c0 [amdgpu] amdgpu_dm_atomic_commit_tail+0xd1/0xd30 [amdgpu]

这是 AMD DCN 3.1 显示控制器(HawkPoint Ryzen 7)的已知 bug:热插拔后模式切换时,compbuf 寄存器编程超时(1us * 100 = 100us),导致显示模式提交失败。系统以为在输出,但物理信号已断。

该问题在 kernel 7.0 上被多个发行版报告(Arch、CachyOS、Gentoo),截至 2026-05 尚无上游修复。

解决方案

方案一:内核参数(缓解 compbuf 超时)

sudo grubby --update-kernel=ALL --args="amdgpu.runpm=0 amdgpu.gfx_off=0"
  • amdgpu.runpm=0– 禁用运行时电源管理,防止 DCN 在模式切换时处于低功耗态
  • amdgpu.gfx_off=0– 禁用 GFX 关闭,保持 GPU 始终就绪

方案二:udev + systemd 自动重检测(解决开机 EDID 失败)

udev 规则:

# /etc/udev/rules.d/99-hdmi-retrigger.rules ACTION=="add", SUBSYSTEM=="drm", KERNEL=="card[0-9]-HDMI-A-*", DRIVERS=="amdgpu", TAG+="systemd", ENV{SYSTEMD_WANTS}="hdmi-retrigger@%k.service"

systemd 模板服务:

# /etc/systemd/system/hdmi-retrigger@.service [Unit] Description=Re-trigger HDMI hotplug for %i After=graphical.target [Service] Type=oneshot ExecStart=/bin/bash -c 'for i in 1 2 3; do sleep 5; echo detect > /sys/class/drm/%i/status; s=$(cat /sys/class/drm/%i/status); [ "$s" = "connected" ] && exit 0; done'

开机后自动重试 HDMI 检测,最多 3 次、每次间隔 5 秒。

方案三:等待上游修复

DCN 3.1 compbuf 超时是 amdgpu 驱动 bug,已有多个社区报告。关注后续内核版本的修复。

注意事项

  • DRM card 编号可能在重启后变化(之前观察到 nvme 设备编号交换),udev 规则使用card[0-9]通配 +DRIVERS=="amdgpu"限定,避免硬编码
  • DRIVERS在 udev 中遍历父设备链,connector 子设备本身无 driver,但父 PCI 设备有 amdgpu 驱动
  • 禁用runpmgfx_off会轻微增加功耗(笔记本电池续航略受影响)

参考链接

  • CachyOS Forum: AMDGPU DCN crash on Linux 7.0 – dcn31_program_compbuf_size
  • GitHub: AMD-GPU-DP-Hotplug-Fix (systemd workaround)
  • amd-gfx mailing list: amdgpu WARNING when switching to external display
  • Gentoo Forums: REG_WAIT timeout on Ryzen iGPU

环境信息

机型HP Z66 G6 14 (HP ProBook 4 G1ah)
CPUAMD Ryzen 7 H 255 (HawkPoint)
GPUAMD Radeon 780M (HawkPoint1, DCN 3.1)
内核7.0.8-200.fc44.x86_64
系统Fedora 44 Workstation (Wayland)
HDMI 接口DP-HDMI FRL PCON(内部 DP 转 HDMI 2.1)
音频 CodecRealtek ALC236 (SSID 0x103c:8df7)
显示器5120x2880 @ 60Hz (HDMI 2.1)

后续诊断:上游 Bug 定位

根因 Commit

已定位到具体引入回归的 commit:

commit 592c5b80110d5e9e50873b5364818cb6f401e26d "drm/amd/display: Migrate HUBBUB register access from hwseq to hubbub component"

该 commit 改变了 HUBBUB 寄存器的初始化顺序,导致dcn31_init_crb()读取 DET_SIZE_CURRENT 寄存器时获得了未就绪的值。后续dcn31_program_compbuf_size()轮询等待寄存器变为期望值,但硬件在 100us 内未响应 – 超时。

超时机制详解

REG_WAIT 参数1us x 100 = 最多等待 100us
问题双屏 + FRL 链路训练 + deep color 三者叠加时,UMA 内存 Fabric 响应慢于 100us
结果超时 WARNING + 显示模式提交失败 + 黑屏

上游 Bug 报告

  • CachyOS Issue #810(标记为 upstream):https://github.com/CachyOS/linux-cachyos/issues/810
  • lore.kernel.org/amd-gfx 上游上报:https://lore.kernel.org/amd-gfx/20260316094232.6bb6f0bf@schienar/
  • 影响范围:kernel 7.0.0 ~ 7.0.3(截至 2026-05-18 未修复)

社区 Workaround Patch(@rgiuse,已验证有效)

将 REG_WAIT 超时从 100us 扩大到 30ms:

--- a/drivers/gpu/drm/amd/display/dc/hubbub/dcn31/dcn31_hubbub.c +++ b/drivers/gpu/drm/amd/display/dc/hubbub/dcn31/dcn31_hubbub.c - REG_WAIT(... 1, 100) /* 1us x 100 = 100us */ + REG_WAIT(... 1000, 30) /* 1000us x 30 = 30ms */

CachyOS #810 讨论中,社区倾向最终方案为 2-10us x 1000(兼顾响应速度和可靠性)。

处理方案对比

方案效果代价
amdgpu.runpm=0 amdgpu.gfx_off=0降低触发频率略增功耗
amdgpu.deep_color=0减少带宽压力降低色深上限
应用 workaround patch 编译内核彻底消除超时需手动编译
等待 kernel 7.1 / 7.0.x 后续版本官方修复时间未知

显示器带宽问题(并发现)

诊断过程中发现 BenQ EL2870U 为 HDMI 2.0 显示器(Max TMDS 340MHz),而驱动默认 max bpc=16(deep color)。在 4K@60Hz 下 RGB deep color 大幅超出 HDMI 2.0 带宽,加剧了雪花噪点和黑屏。

已加入amdgpu.deep_color=0内核参数缓解。

http://www.jsqmd.com/news/856272/

相关文章:

  • AI一周事件 · 2026-05-13 至 2026-05-19
  • 从Java到AI大模型:小白程序员必备转型指南,收藏学习不迷路!
  • ADI AD5940阻抗测量开发板开箱实测:从硬件连接到IAR工程配置的保姆级避坑指南
  • 2026年牵手红娘服务权威推荐深度分析:婚恋场景用户择偶效率低与线下见面率低困境 - 品牌推荐
  • 程序员修炼之道:从代码到思维的进阶指南
  • OpenWrt opkg配置进阶:手把手教你设置代理、跳过证书检查,解决国内下载慢问题
  • 平衡小车/四轴飞行器姿态解算实战:MPU6050三种滤波算法(四元数、互补、卡尔曼)代码详解与选型指南
  • Option ‘importsNotUsedAsValues‘ has been removed. Please remove it from your configuration
  • 5分钟掌握AI音频分离:Retrieval-based-Voice-Conversion-WebUI终极指南
  • SAP应收清账程序开发避坑指南:外币、超额收款、表更新这些细节别忽略
  • C语言编程实战:用ASCII码表玩转字符大小写转换(附完整代码)
  • 告别手写C代码!Matlab 2020b S-Function Builder保姆级配置教程(附避坑指南)
  • 2026年牵手红娘服务权威推荐深度分析:婚恋场景线上虚假信息泛滥与线下见面率低痛点 - 品牌推荐
  • uni-app视频播放二选一:手把手对比调试video.js与MuiPlayer插件(H5/m3u8实战)
  • DeepStream9.0 masktracker
  • 告别零散脚本:用Playwright+Pytest+Yaml+Allure搭建一个真正可维护的UI自动化项目
  • 昇腾CANN ascend-boost-comm:M×N 算子复用是怎么做到的
  • BlueStacks 5 instance differences
  • 别再手动解析事件头了!用FastAPI + CloudEvents库5分钟搞定标准化事件接口
  • 用1Panel和Docker给幻兽帕鲁搭个私服,保姆级避坑指南(支持1.4.1/1.5.0)
  • 挖漏洞一个月5000正常吗?挖漏洞入门到精通,收藏这一篇就够
  • 告别Keil!在CLion里优雅地玩转STM32的FFT(附DSP库配置全流程)
  • 用STM32F103和LORA模块,从零搭建一个轮询式本地传感网(附避坑点)
  • 2026年泡沫雕塑优点全面解析:定义、分类及应用领域百科
  • 科研绘图二选一?Origin vs MATLAB 绘制三维荧光光谱与FRI的深度体验对比
  • 深度解析ComfyUI-Impact-Pack V8:专业级AI图像增强与工作流优化完整指南
  • 本地大模型常见异常全解:显存溢出、推理慢、驱动报错、环境冲突调试指南.181
  • CREO新手避坑指南:从拉伸到抽壳,这10个建模细节90%的人都踩过
  • IDEA通义灵码实战:用它生成的JUnit单元测试,真的能直接提交吗?
  • 一文读懂「多进程」与「多线程」通信机制(超详细对比总结)