Commit 651b253b authored by Daniel Golle's avatar Daniel Golle Committed by Paolo Abeni
Browse files

net: dsa: mxl-gsw1xx: fix .shutdown driver operation



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: 22335939 ("net: dsa: add driver for MaxLinear GSW1xx switch family")
Signed-off-by: default avatarDaniel Golle <daniel@makrotopia.org>
Link: https://patch.msgid.link/77ed91a5206e5dbf5d3e83d7e364ebfda90d31fd.1765241054.git.daniel@makrotopia.org


Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 8e4c0f08
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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 */
+0 −6
Original line number Diff line number Diff line
@@ -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;
+2 −2
Original line number Diff line number Diff line
@@ -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 = {