Linux 6.11 内核中引入了一个新的驱动程序子系统,用于电源排序。
Linaro 工程师 Bartosz Golaszewski 一直在研究这种电源排序框架,源于处理高通硬件上的蓝牙和 WiFi 支持的需要。由于某些组件共享一个上电序列,并且不希望多个驱动程序在硬件上电时发生冲突,因此电源排序框架基本上将在相关硬件上调解该过程。此电源排序框架还可用于在PCIe总线上检测到PCI设备之前启动PCI设备。
Golaszewski在合并请求中解释道:
“我很早就发送了这个,因为这是位于 drivers/power/sequencing/ 下的新驱动程序子系统的初始拉取请求。我将在这里尽量简短,并允许自己将上次发送该系列时的求职信完整链接起来[1](而不是针对特定维护者的小块),以非常详细地描述问题和解决方案。我只坚持以下关键点。
自去年的Linux Plumbers大会以来,它一直在开发中,其灵感来自于在Qualcomm平台上为蓝牙/WLAN芯片提供上游支持的需求。
我们正在解决的主要问题是为设备供电,这些设备在内核中表示为单独的对象(绑定到不同的驱动程序),但它们共享部分上电序列,因此需要某种中介,他知道可能的交互,并可以确保它们不会干扰两个设备的启动。这种驱动器间交互的一个例子是高通公司的 WCN 系列 BT/WLAN 芯片,其中某些型号要求用户在驱动 bt 支持和支持 wlan 的 GPIO 之间观察一定的延迟。
这不是一个新问题,但到目前为止,所有解决它的尝试最终都碰壁并被放弃。主要的障碍是,这些尝试中的大多数都试图将“电源序列”的概念引入设备树绑定中,这打破了主要的DT规则:描述硬件,而不是其行为。我提出的解决方案侧重于使电源排序器驱动器能够灵活地解释实际的硬件描述。有关这方面的更多详细信息,请参阅链接的求职信。
这里解决的第二个问题是在总线上检测到PCI设备之前启动它们。这是通过为设备树节点创建特殊的平台设备来实现的,这些设备描述了硬连线的 PCI 设备,这些设备绑定到所谓的 PCI 电源控制驱动程序,这些驱动程序启用所需的资源并在受控设备启动后触发总线重新扫描,然后为电源管理设置正确的 devlink 层次结构。
通过结合这两个新框架,我们实现了电源排序PCI电源控制驱动器,该驱动器能够为QCom WCN系列芯片组的WLAN模块供电。
所有这些都在linux-next上花费了大量时间,并在多个高通平台上启用了WLAN/BT支持。为了进一步证明这是有用和必要的:在它被选入下一个之后,我收到了一个使用子系统的系列,用于Amlogic平台上的类似用例。
此 PR 包含核心电源排序框架、第一个驱动程序、使用 pwrseq 库的 PCI 更改(由 Bjorn Helgaas 祝福)以及后来的一些修复。
Linus Torvalds 已经合并了这个新的电源排序子系统,该子系统现在位于 Linux Git 的 drivers/power/sequencing/ 下。
转自 New Power Sequencing Driver Subsystem Merged For Linux 6.11 – Phoronix