]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: dsa: mxl-gsw1xx: fix .shutdown driver operation
authorDaniel Golle <daniel@makrotopia.org>
Tue, 9 Dec 2025 01:29:05 +0000 (01:29 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 18 Dec 2025 11:53:21 +0000 (12:53 +0100)
The .shutdown operation should call dsa_switch_shutdown() just like
it is done also by the sibling lantiq_gswip driver. Not doing that
results in shutdown or reboot hanging and waiting for the CPU port
becoming free, which introduces a longer delay and a WARNING before
shutdown or reboot in case the driver is built-into the kernel.
Fix this by calling dsa_switch_shutdown() in the driver's shutdown
operation, harmonizing it with what is done in the lantiq_gswip
driver. As a side-effect this now allows to remove the previously
exported gswip_disable_switch() function which no longer got any
users.

Fixes: 22335939ec907 ("net: dsa: add driver for MaxLinear GSW1xx switch family")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Link: https://patch.msgid.link/77ed91a5206e5dbf5d3e83d7e364ebfda90d31fd.1765241054.git.daniel@makrotopia.org
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/dsa/lantiq/lantiq_gswip.h
drivers/net/dsa/lantiq/lantiq_gswip_common.c
drivers/net/dsa/lantiq/mxl-gsw1xx.c

index 9c38e51a75e806cb3e68433bddc44eb2ca7e200d..2e0f2afbadbbc9967808e512b0f41d87d88bec70 100644 (file)
@@ -294,8 +294,6 @@ struct gswip_priv {
        u16 version;
 };
 
-void gswip_disable_switch(struct gswip_priv *priv);
-
 int gswip_probe_common(struct gswip_priv *priv, u32 version);
 
 #endif /* __LANTIQ_GSWIP_H */
index 6b171d58e18625ad1cc41fa12a373b221ad7aa95..e790f2ef758846fe0f179feecb2495d44df04313 100644 (file)
@@ -1664,12 +1664,6 @@ static const struct dsa_switch_ops gswip_switch_ops = {
        .port_hsr_leave         = dsa_port_simple_hsr_leave,
 };
 
-void gswip_disable_switch(struct gswip_priv *priv)
-{
-       regmap_clear_bits(priv->mdio, GSWIP_MDIO_GLOB, GSWIP_MDIO_GLOB_ENABLE);
-}
-EXPORT_SYMBOL_GPL(gswip_disable_switch);
-
 static int gswip_validate_cpu_port(struct dsa_switch *ds)
 {
        struct gswip_priv *priv = ds->priv;
index cda966d71e889c21a95d0df0a0100682be0abdff..4dc287ad141e19cef0123f106ecce7fafcc346e7 100644 (file)
@@ -662,9 +662,9 @@ static void gsw1xx_shutdown(struct mdio_device *mdiodev)
        if (!priv)
                return;
 
-       dev_set_drvdata(&mdiodev->dev, NULL);
+       dsa_switch_shutdown(priv->ds);
 
-       gswip_disable_switch(priv);
+       dev_set_drvdata(&mdiodev->dev, NULL);
 }
 
 static const struct gswip_hw_info gsw12x_data = {