
On Thu, Mar 24, 2022 at 11:12 AM Marek BehĂșn marek.behun@nic.cz wrote:
On Thu, 24 Mar 2022 10:57:37 +0100 Robert Marko robert.marko@sartura.hr wrote:
Add support for handling SFP TX disable for MVNETA in the same fashion as to what MVPP2 is doing in order to enable using SFP-s.
This allows using ethernet on SFP only boards.
Signed-off-by: Robert Marko robert.marko@sartura.hr
Changes in v3:
- Check whether the SFP node is enabled
Changes in v2:
- Parse the standard SFP node for TX disable GPIO instead of using a
custom property
drivers/net/mvneta.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c index 4a4268c2b2..edd818338c 100644 --- a/drivers/net/mvneta.c +++ b/drivers/net/mvneta.c @@ -286,6 +286,7 @@ struct mvneta_port { struct phy_device *phydev; #if CONFIG_IS_ENABLED(DM_GPIO) struct gpio_desc phy_reset_gpio;
struct gpio_desc sfp_tx_disable_gpio;
#endif struct mii_dev *bus; }; @@ -1693,6 +1694,9 @@ static int mvneta_probe(struct udevice *dev) { struct eth_pdata *pdata = dev_get_plat(dev); struct mvneta_port *pp = dev_get_priv(dev); +#if CONFIG_IS_ENABLED(DM_GPIO)
struct ofnode_phandle_args sfp_args;
+#endif void *blob = (void *)gd->fdt_blob; int node = dev_of_offset(dev); struct mii_dev *bus; @@ -1767,6 +1771,11 @@ static int mvneta_probe(struct udevice *dev) return ret;
#if CONFIG_IS_ENABLED(DM_GPIO)
ret = dev_read_phandle_with_args(dev, "sfp", NULL, 0, 0, &sfp_args);
if (!ret && ofnode_is_enabled(sfp_args.node))
gpio_request_by_name_nodev(sfp_args.node, "tx-disable-gpio", 0,
&pp->sfp_tx_disable_gpio, GPIOD_IS_OUT);
gpio_request_by_name(dev, "phy-reset-gpios", 0, &pp->phy_reset_gpio, GPIOD_IS_OUT);
@@ -1775,6 +1784,9 @@ static int mvneta_probe(struct udevice *dev) mdelay(10); dm_gpio_set_value(&pp->phy_reset_gpio, 0); }
if (dm_gpio_is_valid(&pp->sfp_tx_disable_gpio))
dm_gpio_set_value(&pp->sfp_tx_disable_gpio, 0);
#endif
return board_network_enable(bus);
Reviewed-by: Marek BehĂșn marek.behun@nic.cz
Robert, I am wondering if it would make sense to add driver .remove() method (and flag DM_FLAG_OS_PREPARE so that the .remove() method is called before booting kernel), and disable TX again in this method...
Hi, It could be added as a follow up improvement, however the kernels SFP driver will disable the TX as soon as it probes anyway and wait until the interface its attached to is up to enable it again.
Regards, Robert
Marek