diff options
author | Michal Simek <michal.simek@xilinx.com> | 2022-02-23 15:45:40 +0100 |
---|---|---|
committer | Michal Simek <michal.simek@xilinx.com> | 2022-03-09 12:43:16 +0100 |
commit | db681d4929cac3f5d0a8ce638e7e5306fe6038d2 (patch) | |
tree | 099f3103642de45f71a4098bdbadfbafbc5ee696 | |
parent | d24b3e32ab7f89c0b411747203d7f103f475cfbf (diff) | |
download | u-boot-db681d4929cac3f5d0a8ce638e7e5306fe6038d2.zip u-boot-db681d4929cac3f5d0a8ce638e7e5306fe6038d2.tar.gz u-boot-db681d4929cac3f5d0a8ce638e7e5306fe6038d2.tar.bz2 |
net: phy: Add new read ethernet phy id function
Add new function to get ethernet phy id from compatible property
of the mdio phy node.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: T Karthik Reddy <t.karthik.reddy@xilinx.com>
Link: https://lore.kernel.org/r/16019efb3820a50330935fdaae191cec1f101b5c.1645627539.git.michal.simek@xilinx.com
-rw-r--r-- | drivers/core/ofnode.c | 36 | ||||
-rw-r--r-- | include/dm/ofnode.h | 13 |
2 files changed, 49 insertions, 0 deletions
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 709bea2..8042847 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -898,6 +898,42 @@ int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 *device) return -ENOENT; } +int ofnode_read_eth_phy_id(ofnode node, u16 *vendor, u16 *device) +{ + const char *list, *end; + int len; + + list = ofnode_get_property(node, "compatible", &len); + + if (!list) + return -ENOENT; + + end = list + len; + while (list < end) { + len = strlen(list); + + if (len >= strlen("ethernet-phy-idVVVV,DDDD")) { + char *s = strstr(list, "ethernet-phy-id"); + + /* + * check if the string is something like + * ethernet-phy-idVVVV,DDDD + */ + if (s && s[19] == '.') { + s += strlen("ethernet-phy-id"); + *vendor = simple_strtol(s, NULL, 16); + s += 5; + *device = simple_strtol(s, NULL, 16); + + return 0; + } + } + list += (len + 1); + } + + return -ENOENT; +} + int ofnode_read_addr_cells(ofnode node) { if (ofnode_is_np(node)) { diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 0cb324c..744dffe 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -895,6 +895,19 @@ int ofnode_read_pci_addr(ofnode node, enum fdt_pci_space type, int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 *device); /** + * ofnode_read_eth_phy_id() - look up eth phy vendor and device id + * + * Look at the compatible property of a device node that represents a eth phy + * device and extract phy vendor id and device id from it. + * + * @param node node to examine + * @param vendor vendor id of the eth phy device + * @param device device id of the eth phy device + * @return 0 if ok, negative on error + */ +int ofnode_read_eth_phy_id(ofnode node, u16 *vendor, u16 *device); + +/** * ofnode_read_addr_cells() - Get the number of address cells for a node * * This walks back up the tree to find the closest #address-cells property |