Linux驱动ACPI表fixed-link字段描述

文章讲述了在不同启动方式下,使用设备树描述的设备在Uboot中正常工作,而ACPI表描述的问题在于fixed-link属性错误导致属性获取失败。修正后的ACPI表描述使驱动能够正确获取设备属性。
摘要由CSDN通过智能技术生成
1.问题描述

在使用同样的网卡驱动加载设备时,使用设备树描述的设备节点,在Uboot的启动方式下可以正常运行;而使用ACPI表描述的设备,在UEFI启动方式下,可以使用ifcconfig看到我的设备,但需要从ACPI表中取得的属性值一个都没有获得到。

2.属性获取方式

就是使用内核接口去获取属性,所以字段正确的话应当可以正确获得。

device_property_read_bool(&pdev->dev, "magic-packet");
device_property_read_string(&pdev->dev, "phy-mode", &pm);
3.设备树结点(正确)
 eth0@36ce0000 {
         compatible = "cdns,phytium-gem-3.0";
         reg = <0x00 0x36ce0000 0x00 0x2000>;
         interrupts = <0x00 0x20 0x04 0x00 0x21 0x04 0x00 0x22 0x04 0x00 0x23 0x04>;
         clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk";
         clocks = <0x08 0x08 0x08 0x08 0x09>;
         magic-packet;
         dma-coherent;
         phy-mode = "usxgmii";
         status = "okay";

         fixed-link {
                 speed = <0x2710>;
                 full-duplex;
         };
 };
4.ACPI表描述(错误)

最终发现罪魁祸首在“fixed-link”这个属性的描述上,这个属性描述错了(看起来又好像是对的),导致整个_DSD获取不到。排查了好久......

Device (ETH0) {
    Name (_HID, "PHYT0046")
    Name (_UID, 1)
    Name (_CCA, 1)
    ......
    Name (_DSD, Package () {
        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package () {
                Package () {"magic-packet", 1},
                Package () {"phy-mode", "usxgmii"},
                Package () {"pclk", 250000000},
                Package () {"hclk", 250000000},
                ...
                Package () {"fixed-link", Package () {
                                                Package () {"speed", 10000},
                                                Package () {"full-duplex", 1}
                                          }
                }
            }
    })
    ...
}

5.ACPI表描述(正确)

Device (ETH0) {
    Name (_HID, "PHYT0046")
    Name (_UID, 1)
    Name (_CCA, 1)
    ......
    Name (_DSD, Package () {
        ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package () {
                Package () {"magic-packet", 1},
                Package () {"phy-mode", "usxgmii"},
                Package () {"pclk", 250000000},
                Package () {"hclk", 250000000},
                ...
            }
         ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
		 Package () {
		     Package () {"fixed-link", "LNK0"}
		 }
    })
    Name (LNK0, Package(){ // Data-only subnode of port
	ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
		 Package () {
		     Package () {"speed", 10000},
		     Package () {"full-duplex", 1}
		 }
	})
    ...
}

至此,正确描述”fixed-link“字段后驱动可以正常获取ACPI表中的设备属性了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值