当前位置: 首页 > 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.gsyq.cn/news/1336764.html

相关文章:

  • 嵌入式Linux下MT7601U无线网卡驱动移植与网络配置实战
  • 从0到1:企业级AI项目迭代日记 Vol.29|自然语言变工作流:Agent 自动拼装子图的实现路径
  • 2026年牵手红娘服务权威推荐深度分析:婚恋场景线上虚假信息泛滥与线下见面率低痛点 - 品牌推荐
  • SAP应收清账程序开发避坑指南:外币、超额收款、表更新这些细节别忽略
  • QGIS打印布局实战:手把手教你制作英国大曼彻斯特地区社会经济多指标对比地图集
  • 网络突然卡成PPT?别慌,手把手教你用display命令快速定位交换机环路
  • DeepStream9.0 masktracker
  • 告别零散脚本:用Playwright+Pytest+Yaml+Allure搭建一个真正可维护的UI自动化项目
  • 深度解析ComfyUI-Impact-Pack V8:专业级AI图像增强与工作流优化完整指南
  • 保姆级教程:用Abaqus HETVAL子程序搞定混凝土水化热仿真(附完整Fortran代码)
  • 面向知识图谱 Agent 的 Harness 查询优化
  • 本地大模型常见异常全解:显存溢出、推理慢、驱动报错、环境冲突调试指南.181
  • DAC代码干扰分析与硬件设计解决方案
  • 写给前端的 opbase:昇腾基础组件到底是啥?
  • 保姆级避坑指南:用Jupyter Notebook和PyTorch复现小土堆教程的完整流程(附代码)
  • 高并发场景下 Redis 消息队列吞吐量低怎么优化?
  • 从Quill光标到用户头像:手把手教你为Yjs协同编辑器添加完整的在线用户列表(附状态同步技巧)
  • 实战避坑:在VisDrone/MOT17数据集上评测YOLO+DeepSORT/ByteTrack组合,我的参数调优心得
  • 告别翻协议!我用QT和DLL封装3GPP R17表格,做了个NR5G信道频点计算器
  • 避开电源大坑!手把手教你搞定RFSoC Gen3的上电与断电时序(附Vivado配置)
  • 避坑指南:Linux下用regulator_disable关不掉电源?可能是设备树里这个参数在搞鬼
  • Ubuntu 22.04 装N卡驱动报错‘Building kernel modules’?别慌,试试这个降级内核的保姆级教程
  • Windows 10 下 GAMMA 遥感软件安装全攻略:从加密狗驱动到 MSYS2 环境配置避坑指南
  • OpenWrt opkg配置进阶:手把手教你设置代理、跳过证书检查,解决国内下载慢问题
  • 告别重复登录:手把手教你用Requests库模拟校园网认证(Python脚本版)
  • 基于STM32的智能空调控制器设计:从红外遥控到物联网升级
  • CANN-ops-nn和ops-transformer-昇腾NPU两个算子仓库怎么分工
  • 从GitHub到海浪模拟:手把手教你配置WAVEWATCHⅢ 6.07.0的完整开发与测试环境
  • AUTODYN新手避坑指南:用cm-g-us单位制搞定炸药冲击仿真(附完整模型文件)
  • Proteus仿真STC89C52:除了点亮LED,你的电路图真的画对了吗?(附原理分析)