在即将于今天发布的 Linux 6.19-rc6 内核版本之前,有两个针对运行主线内核的 Apple M1 / M2 Macs 的 USB 修复。这些 Apple USB 修复也被标记为需要回移植到稳定的 Linux 内核系列。
首先是针对 Apple M2 和 M1/M2 Pro/Max/Ultra 设备上 USB-C 端口控制器的修复,该控制器导致无法检测 USB 2.0 和 USB 3.x 设备。补丁解释了这个问题,现在忽略 USB 角色开关,直接切换到活动角色:
忽略 USB 角色切换,如果 dwc3-apple 已经处于期望状态。M2 和 M1/M2 Pro/Max/Ultra 设备上的 USB-C 端口控制器会发出额外的中断,导致 USB 角色切换到已经激活的角色。
忽略这些 USB 角色切换,以确保 USB-C 端口控制器和 dwc3-apple 始终处于一致状态。这符合 core.c 中__dwc3_set_mode()的行为。
修复了在受影响系统上检测 USB 2.0 和 3.x 设备的问题。额外的角色切换引起的重置似乎将 USB 设备置于一种状态,当 phy 和 dwc3 重新启动时,会阻止检测。
Linux 6.19-rc6 中出现的第二个补丁集是在 DWC3 初始化之前设置 USB2 PHY 模式。这是为了修复在启动前/期间插入的 USB2 设备的问题:
随着上游代码通过我们的用户获得更广泛的测试覆盖,我们偶尔会看到在启动时插入的 USB2 设备出现问题。在 Linux 运行之前,USB2 PHY 通常运行在设备模式下,结果发现有时主机->设备或设备->主机的转换不起作用。
根本原因:如果在 USB2 PHY 已经上电或 dwc3 已经启用 ULPI 接口时重新配置其角色,新的配置有时需要再次重置 dwc3 才能生效。通过更早地配置角色来解决这个问题。请注意,USB3 PHY 不受此问题影响,实际上需要 dwc3 启动后才能配置正确的角色。
Linux 6.19 合并窗口期间,新的 Apple USB DWC3 代码在 Asahi Linux 的下游内核中经过长期使用后,终于被上游了。
这些 Apple USB 修复措施包含在今天发出的 USB 修复拉取请求中。该拉取请求还添加了 PICAXE AXE027 电缆到 FTDI SIO 驱动器、Elgato 4K X 的特例以及一些其他小的修复。
转自 Linux 6.19 Landing Fixes For USB2/USB3 Issues With Apple M1/M2 Macs – Phoronix
Linuxeden开源社区