mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-10 06:56:14 -05:00
dpaa2-eth: setup the of_node field of the device
When the DPNI object is connected to a DPMAC, setup the of_node to point to the DTS device node of that specific MAC. This enables other drivers, for example the DSA subsystem, to find the net_device by its device node. Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
f07b300c81
commit
b193f2ed53
@@ -289,17 +289,15 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
|
||||
|
||||
mac->if_link_type = mac->attr.link_type;
|
||||
|
||||
dpmac_node = dpaa2_mac_get_node(mac->attr.id);
|
||||
dpmac_node = mac->of_node;
|
||||
if (!dpmac_node) {
|
||||
netdev_err(net_dev, "No dpmac@%d node found.\n", mac->attr.id);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
err = dpaa2_mac_get_if_mode(dpmac_node, mac->attr);
|
||||
if (err < 0) {
|
||||
err = -EINVAL;
|
||||
goto err_put_node;
|
||||
}
|
||||
if (err < 0)
|
||||
return -EINVAL;
|
||||
mac->if_mode = err;
|
||||
|
||||
/* The MAC does not have the capability to add RGMII delays so
|
||||
@@ -311,8 +309,7 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
|
||||
mac->if_mode == PHY_INTERFACE_MODE_RGMII_RXID ||
|
||||
mac->if_mode == PHY_INTERFACE_MODE_RGMII_TXID)) {
|
||||
netdev_err(net_dev, "RGMII delay not supported\n");
|
||||
err = -EINVAL;
|
||||
goto err_put_node;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((mac->attr.link_type == DPMAC_LINK_TYPE_PHY &&
|
||||
@@ -320,7 +317,7 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
|
||||
mac->attr.link_type == DPMAC_LINK_TYPE_BACKPLANE) {
|
||||
err = dpaa2_pcs_create(mac, dpmac_node, mac->attr.id);
|
||||
if (err)
|
||||
goto err_put_node;
|
||||
return err;
|
||||
}
|
||||
|
||||
mac->phylink_config.dev = &net_dev->dev;
|
||||
@@ -344,16 +341,12 @@ int dpaa2_mac_connect(struct dpaa2_mac *mac)
|
||||
goto err_phylink_destroy;
|
||||
}
|
||||
|
||||
of_node_put(dpmac_node);
|
||||
|
||||
return 0;
|
||||
|
||||
err_phylink_destroy:
|
||||
phylink_destroy(mac->phylink);
|
||||
err_pcs_destroy:
|
||||
dpaa2_pcs_destroy(mac);
|
||||
err_put_node:
|
||||
of_node_put(dpmac_node);
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -388,6 +381,12 @@ int dpaa2_mac_open(struct dpaa2_mac *mac)
|
||||
goto err_close_dpmac;
|
||||
}
|
||||
|
||||
/* Find the device node representing the MAC device and link the device
|
||||
* behind the associated netdev to it.
|
||||
*/
|
||||
mac->of_node = dpaa2_mac_get_node(mac->attr.id);
|
||||
net_dev->dev.of_node = mac->of_node;
|
||||
|
||||
return 0;
|
||||
|
||||
err_close_dpmac:
|
||||
@@ -400,6 +399,8 @@ void dpaa2_mac_close(struct dpaa2_mac *mac)
|
||||
struct fsl_mc_device *dpmac_dev = mac->mc_dev;
|
||||
|
||||
dpmac_close(mac->mc_io, 0, dpmac_dev->mc_handle);
|
||||
if (mac->of_node)
|
||||
of_node_put(mac->of_node);
|
||||
}
|
||||
|
||||
static char dpaa2_mac_ethtool_stats[][ETH_GSTRING_LEN] = {
|
||||
|
||||
@@ -24,6 +24,7 @@ struct dpaa2_mac {
|
||||
phy_interface_t if_mode;
|
||||
enum dpmac_link_type if_link_type;
|
||||
struct lynx_pcs *pcs;
|
||||
struct device_node *of_node;
|
||||
};
|
||||
|
||||
bool dpaa2_mac_is_type_fixed(struct fsl_mc_device *dpmac_dev,
|
||||
|
||||
Reference in New Issue
Block a user