On 8/11/23 09:43, Maxim Kochetkov wrote:
FDT functions is not working when OF_LIVE is enabled.
Convert fdt parsing functions to ofnode parsing functions.

Signed-off-by: Maxim Kochetkov <fido_...@inbox.ru>
---
  drivers/net/xilinx_axi_emac.c | 50 +++++++++++++++++------------------
  1 file changed, 24 insertions(+), 26 deletions(-)

diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/xilinx_axi_emac.c
index 39cb3cc260..54f2232768 100644
--- a/drivers/net/xilinx_axi_emac.c
+++ b/drivers/net/xilinx_axi_emac.c
@@ -112,7 +112,7 @@ struct axidma_plat {
        int pcsaddr;
        int phyaddr;
        u8 eth_hasnobuf;
-       int phy_of_handle;
+       ofnode phynode;
        enum emac_variant mactype;
  };
@@ -127,7 +127,7 @@ struct axidma_priv {
        struct phy_device *phydev;
        struct mii_dev *bus;
        u8 eth_hasnobuf;
-       int phy_of_handle;
+       ofnode phynode;
        enum emac_variant mactype;
  };
@@ -335,8 +335,8 @@ static int axiemac_phy_init(struct udevice *dev)
        phydev->supported &= supported;
        phydev->advertising = phydev->supported;
        priv->phydev = phydev;
-       if (priv->phy_of_handle)
-               priv->phydev->node = offset_to_ofnode(priv->phy_of_handle);
+       if (ofnode_valid(priv->phynode))
+               priv->phydev->node = priv->phynode;
        phy_config(phydev);
return 0;
@@ -839,7 +839,7 @@ static int axi_emac_probe(struct udevice *dev)
                priv->eth_hasnobuf = plat->eth_hasnobuf;
                priv->pcsaddr = plat->pcsaddr;
                priv->phyaddr = plat->phyaddr;
-               priv->phy_of_handle = plat->phy_of_handle;
+               priv->phynode = plat->phynode;
                priv->interface = pdata->phy_interface;
if (IS_ENABLED(CONFIG_DM_ETH_PHY))
@@ -894,20 +894,21 @@ static int axi_emac_of_to_plat(struct udevice *dev)
  {
        struct axidma_plat *plat = dev_get_plat(dev);
        struct eth_pdata *pdata = &plat->eth_pdata;
-       int node = dev_of_offset(dev);
-       int offset = 0;
+       struct ofnode_phandle_args pcs_node, axistream_node;
+       ofnode phynode;
+       int ret;
pdata->iobase = dev_read_addr(dev);
        plat->mactype = dev_get_driver_data(dev);
- offset = fdtdec_lookup_phandle(gd->fdt_blob, node,
-                                      "axistream-connected");
-       if (offset <= 0) {
+       ret = dev_read_phandle_with_args(dev, "axistream-connected", NULL, 0, 0,
+                                        &axistream_node);
+       if (ret) {
                printf("%s: axistream is not found\n", __func__);
                return -EINVAL;
        }
-       plat->dmatx = (struct axidma_reg *)fdtdec_get_addr_size_auto_parent
-                     (gd->fdt_blob, 0, offset, "reg", 0, NULL, false);
+
+       plat->dmatx = (struct axidma_reg *)ofnode_get_addr(axistream_node.node);
        if (!plat->dmatx) {
                printf("%s: axi_dma register space not found\n", __func__);
                return -EINVAL;
@@ -918,30 +919,27 @@ static int axi_emac_of_to_plat(struct udevice *dev)
                /* PHYAD 0 always redirects to the PCS/PMA PHY */
                plat->pcsaddr = 0;
- offset = fdtdec_lookup_phandle(gd->fdt_blob, node,
-                                              "phy-handle");
-               if (offset > 0) {
+               phynode = dev_get_phy_node(dev);
+               if (ofnode_valid(phynode)) {
                        if (!(IS_ENABLED(CONFIG_DM_ETH_PHY)))
-                               plat->phyaddr = fdtdec_get_int(gd->fdt_blob,
-                                                              offset,
-                                                              "reg", -1);
-                       plat->phy_of_handle = offset;
+                               plat->phyaddr = ofnode_read_u32_default(phynode,
+                                                                       "reg", 
-1);
+                       plat->phynode = phynode;
                }
pdata->phy_interface = dev_read_phy_mode(dev);
                if (pdata->phy_interface == PHY_INTERFACE_MODE_NA)
                        return -EINVAL;
- plat->eth_hasnobuf = fdtdec_get_bool(gd->fdt_blob, node,
-                                                    "xlnx,eth-hasnobuf");
+               plat->eth_hasnobuf = dev_read_bool(dev, "xlnx,eth-hasnobuf");
if (pdata->phy_interface == PHY_INTERFACE_MODE_SGMII ||
                    pdata->phy_interface == PHY_INTERFACE_MODE_1000BASEX) {
-                       offset = fdtdec_lookup_phandle(gd->fdt_blob, node,
-                                                      "pcs-handle");
-                       if (offset > 0) {
-                               plat->pcsaddr = fdtdec_get_int(gd->fdt_blob,
-                                                              offset, "reg", 
-1);
+                       ret = dev_read_phandle_with_args(dev, "pcs-handle", 
NULL, 0, 0,
+                                                        &pcs_node);
+                       if (!ret) {
+                               plat->pcsaddr = 
ofnode_read_u32_default(pcs_node.node,
+                                                                       "reg", 
-1);
                        }
                }
        }

Applied.
M

Reply via email to