首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个PCIe卡:读取当前PCIe卡实例的设备树属性(在内核驱动程序中)

多个PCIe卡:读取当前PCIe卡实例的设备树属性(在内核驱动程序中)
EN

Stack Overflow用户
提问于 2020-05-04 17:13:46
回答 1查看 398关注 0票数 2

问题:

我们正在扩展设备驱动程序。我们的PCIe设备具有无法自动检测到的属性.为了与Linux内核维护人员保持一致,我们希望将这个属性添加到设备树中。当系统中存在多个PCIe卡时,如何在驱动程序代码中访问当前实例、驱动程序正在处理的属性?

上下文:

我们是在以太网驱动程序的上下文中这样做的,但是对于任何PCIe连接设备(甚至总线连接设备)的驱动程序来说,这个问题都是常见的。

示例:

代码语言:javascript
复制
pcie@1ff00000 {
    ...
    host@0 {
        reg = < 0x00 0x00 0x00 0x00 0x00 >;
        #address-cells = < 0x03 >;
        #size-cells = < 0x02 >;

        ethernet@0 {
            compatible = "weiland-yutani,nostromo";
            reg = < 0x00 0x00 0x00 0x00 0x00 >;
            phy-connection-type = "rgmii";
        };
    };
    host@1 {
        reg = < 0x00 0x00 0x00 0x00 0x00 >;
        #address-cells = < 0x03 >;
        #size-cells = < 0x02 >;

        ethernet@0 {
            compatible = "weiland-yutani,nostromo";
            reg = < 0x00 0x00 0x00 0x00 0x00 >;
            phy-connection-type = "mii";
        };
    };
};

此示例显示两个PCIe以太网卡,其中一个使用"rgmii“,另一个使用"mii”作为传输模式。(举个例子,我们有更多的配置)。

在内核驱动程序代码中,如何访问属于当前PCIe实例(pci_dev *pdev)的节点?我的意思是,哪种类型的of_find_node_by_path()调用或其他什么可以引导我找到正确的实例?因此,我可以向我的以太网驱动程序中添加一个if-语句,它对正确的rgmii或mii配置作出反应,这取决于驱动程序目前正在处理的两个PCIe卡中的哪一个。

这种方法需要是通用的,因为我们的目标是将它贡献给Linux内核。(任意数量的PCI总线、卡片、拓扑.)

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 15:55:54

当前节点通过pdev->dev->of_node.传递给驱动程序实例。

在上面的设备树中,驱动程序将直接访问以太网@0节点,无需进一步遍历:

代码语言:javascript
复制
static int nostromo_pcidev_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{
    const char *conn-type;    
    of_property_read_string(pdev->dev->of_node, "phy-connection-type", &conn-type);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61597871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档