Bus 驱动架构与源码总览

Bus 驱动架构与源码总览

1. 目录定位

drivers/bus收纳无法自然归入PCI、USB、I2C、SPI等标准目录的总线控制器。这里的“bus”至少有四种含义:

  1. Linux device model中的struct bus_type
  2. SoC内部互连及错误监控器;
  3. 外部并行/串行扩展总线控制器;
  4. 仅负责供电后再枚举子节点的容器设备。

因此不能假设目录中所有驱动共享同一Core或API。

2. 主要分类

类别 代表代码 作用
自定义设备总线 MHI、FSL-MC、RSB、MOXTET、MIPS CDMM 注册bus、device、driver并进行专用匹配
OF容器 simple-pm-bus.c runtime PM并populate子platform device
内部互连 ARM CCI、OMAP L3、Tegra ACONNECT coherency、子模块访问或互连错误
外部存储/扩展 WEIM、EBI2、GMI、MBUS、UniPhier chip-select、timing、地址窗口
错误/QoS GISB、BT1 AXI/APB、DA8xx MSTPRI timeout、错误解码、master优先级
SoC功能域 TI SYSC/PWMSS、Sun50i DE2、QCOM SSC clock/reset/PM后创建内部设备

3. 两种设备模型

多数单文件驱动是platform driver:

1
2
3
4
5
6
DT node
-> platform_device
-> of_match
-> probe
-> clocks/resets/regmap/MMIO
-> of_platform_populate(children)

MHI、FSL-MC等会进一步注册自定义总线:

1
2
3
4
controller/firmware discovery
-> device_register(custom device)
-> bus.match
-> custom driver probe

4. 与系统其它目录边界

  • drivers/base实现通用bus/device/driver Core;
  • drivers/interconnect实现带宽投票框架,不等于本目录互连驱动;
  • drivers/soc/rockchip承载RK3588 PM domain、QoS、system monitor等厂商逻辑;
  • drivers/pci/controller管理RK3588 PCIe Root Complex;
  • AMBA PrimeCell通用总线位于drivers/amba
  • clock/reset/genpd/syscon分别由各自框架管理。

5. 构建结构

顶层Kconfig定义二十余个平台选项,并source:

  • drivers/bus/fsl-mc/Kconfig
  • drivers/bus/mhi/Kconfig

Makefile无统一bus core目标。simple-pm-bus.oCONFIG_OF构建;mhi/目录总是进入递归Makefile,但其中对象仍由CONFIG_MHI_*决定。

6. 生命周期共性

总线控制器probe通常按以下顺序:

1
2
3
4
5
6
map resource
-> enable regulator/clock/power
-> deassert reset
-> program timing/window/error mask
-> register bus/controller
-> enumerate child devices

remove必须逆序,且先阻止新I/O、删除子设备,再关clock/power。错误路径若顺序不完整,容易产生访问断电寄存器、DMA仍运行或子设备悬挂。

7. RK3588结论

本目录没有rockchip-*源文件,RK3588 DTS也没有匹配这里平台专用compatible。该平台的NoC/QoS/PM/PCIe等由其它目录的Rockchip驱动负责。

潜在例外是:

  • simple-pm-bus为通用OF驱动,但只有节点以simple-pm-bus为最具体compatible时才执行PM和child populate;
  • MHI PCI generic理论上可驱动插在RK3588 PCIe上的受支持蜂窝模组,但当前Rockchip配置未启用MHI,且是否匹配取决于PCI ID而非RK3588 DTS。

8. 分析原则

阅读本目录应先回答:

  1. 驱动是否注册真正的bus_type
  2. 还是只作为platform容器;
  3. 是否拥有children的电源/clock;
  4. children来自DT还是固件/硬件枚举;
  5. 错误处理是报告、复位还是重建总线;
  6. 目标平台是否实际启用。

文章互动

阅读 --

留言

0 条留言

正在加载留言…