平台设备场景下,设备树对应驱动'data'字段的存储位置疑问
DesignWare PCIe平台驱动中data字段的逻辑解析
- 你搞混了一个核心点:
data字段根本不在设备树里,它是Linux内核驱动代码里of_device_id结构体的内置成员,和设备树节点的内容完全无关。 - 打开
drivers/pci/controller/dwc/pcie-designware-plat.c,能找到这样的匹配数组:
这里每个static const struct of_device_id dw_plat_pcie_of_match[] = { { .compatible = "snps,dw-pcie", .data = &dw_pcie_rc_ops }, { .compatible = "snps,dw-pcie-ep", .data = &dw_pcie_ep_ops }, { /* 终止条目 */ } }; MODULE_DEVICE_TABLE(of, dw_plat_pcie_of_match);compatible字符串都对应了驱动里预设好的data值——比如"snps,dw-pcie"对应根控制器(RC)的操作集,"snps,dw-pcie-ep"对应端点(EP)的操作集。 - 驱动的probe函数调用
of_match_device()时,会根据设备树节点的compatible字段,在上面这个数组里找到匹配的条目。一旦匹配成功,直接从该条目的data字段读取预设好的模式标识,不需要从设备树里读取任何额外字段。 - 所以像uniphier-pro5.dtsi里的pcie_ep节点,只需要声明
compatible = "snps,dw-pcie-ep",驱动就能自动匹配到对应的of_device_id条目,拿到EP模式的data值,完成对应模式的初始化——设备树里完全不需要写和data相关的内容。
内容的提问来源于stack exchange,提问作者Chan Kim
相关产品推荐
相关产品推荐

