mirror of https://gitee.com/openkylin/linux.git
staging: fsl-dpaa2/ethsw: enable switch ports only on dev_open
At probe time, only the DPSW object should be enabled without the associated ports, which will get enabled on dev_open. Remove the ethsw_open() and ethsw_stop() functions and replace them only with dpsw_enable()/_disable(). Reported-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com> Link: https://lore.kernel.org/r/1565700187-16048-3-git-send-email-ioana.ciornei@nxp.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9d8cfa9d53
commit
f740eb942b
|
@ -1363,48 +1363,6 @@ static int ethsw_register_notifier(struct device *dev)
|
|||
return err;
|
||||
}
|
||||
|
||||
static int ethsw_open(struct ethsw_core *ethsw)
|
||||
{
|
||||
struct ethsw_port_priv *port_priv = NULL;
|
||||
int i, err;
|
||||
|
||||
err = dpsw_enable(ethsw->mc_io, 0, ethsw->dpsw_handle);
|
||||
if (err) {
|
||||
dev_err(ethsw->dev, "dpsw_enable err %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
|
||||
port_priv = ethsw->ports[i];
|
||||
err = dev_open(port_priv->netdev, NULL);
|
||||
if (err) {
|
||||
netdev_err(port_priv->netdev, "dev_open err %d\n", err);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ethsw_stop(struct ethsw_core *ethsw)
|
||||
{
|
||||
struct ethsw_port_priv *port_priv = NULL;
|
||||
int i, err;
|
||||
|
||||
for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
|
||||
port_priv = ethsw->ports[i];
|
||||
dev_close(port_priv->netdev);
|
||||
}
|
||||
|
||||
err = dpsw_disable(ethsw->mc_io, 0, ethsw->dpsw_handle);
|
||||
if (err) {
|
||||
dev_err(ethsw->dev, "dpsw_disable err %d\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ethsw_init(struct fsl_mc_device *sw_dev)
|
||||
{
|
||||
struct device *dev = &sw_dev->dev;
|
||||
|
@ -1586,9 +1544,7 @@ static int ethsw_remove(struct fsl_mc_device *sw_dev)
|
|||
|
||||
destroy_workqueue(ethsw_owq);
|
||||
|
||||
rtnl_lock();
|
||||
ethsw_stop(ethsw);
|
||||
rtnl_unlock();
|
||||
dpsw_disable(ethsw->mc_io, 0, ethsw->dpsw_handle);
|
||||
|
||||
for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
|
||||
port_priv = ethsw->ports[i];
|
||||
|
@ -1708,12 +1664,11 @@ static int ethsw_probe(struct fsl_mc_device *sw_dev)
|
|||
goto err_free_ports;
|
||||
}
|
||||
|
||||
/* Switch starts up enabled */
|
||||
rtnl_lock();
|
||||
err = ethsw_open(ethsw);
|
||||
rtnl_unlock();
|
||||
if (err)
|
||||
err = dpsw_enable(ethsw->mc_io, 0, ethsw->dpsw_handle);
|
||||
if (err) {
|
||||
dev_err(ethsw->dev, "dpsw_enable err %d\n", err);
|
||||
goto err_free_ports;
|
||||
}
|
||||
|
||||
/* Setup IRQs */
|
||||
err = ethsw_setup_irqs(sw_dev);
|
||||
|
@ -1724,9 +1679,7 @@ static int ethsw_probe(struct fsl_mc_device *sw_dev)
|
|||
return 0;
|
||||
|
||||
err_stop:
|
||||
rtnl_lock();
|
||||
ethsw_stop(ethsw);
|
||||
rtnl_unlock();
|
||||
dpsw_disable(ethsw->mc_io, 0, ethsw->dpsw_handle);
|
||||
|
||||
err_free_ports:
|
||||
/* Cleanup registered ports only */
|
||||
|
|
Loading…
Reference in New Issue