Commit 1e37449f authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'net-ethernet-ti-am65-cpsw-nuss-support-stacked-switches'

Alexander Sverdlin says:

====================
net: ethernet: ti: am65-cpsw-nuss: support stacked switches

Currently an external Ethernet switch connected to a am65-cpsw-nuss CPU
port will not be probed successfully because of_find_net_device_by_node()
will not be able to find the netdev of the CPU port.

It's necessary to populate of_node of the struct device for the
am65-cpsw-nuss ports. DT nodes of the ports are already stored in per-port
private data, but because of some legacy reasons the naming ("phy_node")
was misleading.
====================

Link: https://lore.kernel.org/r/20240528075954.3608118-1-alexander.sverdlin@siemens.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 0f4b437b 29c71bf2
...@@ -896,7 +896,7 @@ static int am65_cpsw_nuss_ndo_slave_open(struct net_device *ndev) ...@@ -896,7 +896,7 @@ static int am65_cpsw_nuss_ndo_slave_open(struct net_device *ndev)
/* mac_sl should be configured via phy-link interface */ /* mac_sl should be configured via phy-link interface */
am65_cpsw_sl_ctl_reset(port); am65_cpsw_sl_ctl_reset(port);
ret = phylink_of_phy_connect(port->slave.phylink, port->slave.phy_node, 0); ret = phylink_of_phy_connect(port->slave.phylink, port->slave.port_np, 0);
if (ret) if (ret)
goto error_cleanup; goto error_cleanup;
...@@ -2611,7 +2611,7 @@ static int am65_cpsw_nuss_init_slave_ports(struct am65_cpsw_common *common) ...@@ -2611,7 +2611,7 @@ static int am65_cpsw_nuss_init_slave_ports(struct am65_cpsw_common *common)
of_property_read_bool(port_np, "ti,mac-only"); of_property_read_bool(port_np, "ti,mac-only");
/* get phy/link info */ /* get phy/link info */
port->slave.phy_node = port_np; port->slave.port_np = port_np;
ret = of_get_phy_mode(port_np, &port->slave.phy_if); ret = of_get_phy_mode(port_np, &port->slave.phy_if);
if (ret) { if (ret) {
dev_err(dev, "%pOF read phy-mode err %d\n", dev_err(dev, "%pOF read phy-mode err %d\n",
...@@ -2703,6 +2703,7 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common *common, u32 port_idx) ...@@ -2703,6 +2703,7 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common *common, u32 port_idx)
mutex_init(&ndev_priv->mm_lock); mutex_init(&ndev_priv->mm_lock);
port->qos.link_speed = SPEED_UNKNOWN; port->qos.link_speed = SPEED_UNKNOWN;
SET_NETDEV_DEV(port->ndev, dev); SET_NETDEV_DEV(port->ndev, dev);
port->ndev->dev.of_node = port->slave.port_np;
eth_hw_addr_set(port->ndev, port->slave.mac_addr); eth_hw_addr_set(port->ndev, port->slave.mac_addr);
...@@ -2760,7 +2761,7 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common *common, u32 port_idx) ...@@ -2760,7 +2761,7 @@ am65_cpsw_nuss_init_port_ndev(struct am65_cpsw_common *common, u32 port_idx)
} }
phylink = phylink_create(&port->slave.phylink_config, phylink = phylink_create(&port->slave.phylink_config,
of_node_to_fwnode(port->slave.phy_node), of_node_to_fwnode(port->slave.port_np),
port->slave.phy_if, port->slave.phy_if,
&am65_cpsw_phylink_mac_ops); &am65_cpsw_phylink_mac_ops);
if (IS_ERR(phylink)) if (IS_ERR(phylink))
......
...@@ -30,7 +30,7 @@ struct am65_cpts; ...@@ -30,7 +30,7 @@ struct am65_cpts;
struct am65_cpsw_slave_data { struct am65_cpsw_slave_data {
bool mac_only; bool mac_only;
struct cpsw_sl *mac_sl; struct cpsw_sl *mac_sl;
struct device_node *phy_node; struct device_node *port_np;
phy_interface_t phy_if; phy_interface_t phy_if;
struct phy *ifphy; struct phy *ifphy;
struct phy *serdes_phy; struct phy *serdes_phy;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment