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表中的设备属性了。