diff options
author | Michael Grzeschik <m.grzeschik@pengutronix.de> | 2020-05-04 09:50:19 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-05-05 12:22:11 +0200 |
commit | 89a6e4fa3e4c081f2140b23cfc562b3898c09ded (patch) | |
tree | 495e5203efae42eff1ff4994fc100f512211349c /drivers/net | |
parent | 660db35a75aa03535153dddda527dc9a62f090e9 (diff) | |
download | barebox-89a6e4fa3e4c081f2140b23cfc562b3898c09ded.tar.gz barebox-89a6e4fa3e4c081f2140b23cfc562b3898c09ded.tar.xz |
net: cpsw: move generic setup code to probe
All generic cpsw code can move to probe, so the controller is only reset
and configured once.
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/cpsw.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index 7fba4d27f9..93df5aed5c 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -801,7 +801,7 @@ static int cpsw_open(struct eth_device *edev) { struct cpsw_slave *slave = edev->priv; struct cpsw_priv *priv = slave->cpsw; - int i, ret; + int ret; dev_dbg(&slave->dev, "* %s\n", __func__); @@ -810,6 +810,16 @@ static int cpsw_open(struct eth_device *edev) if (ret) return ret; + cpsw_slave_init(slave, priv); + + return 0; +} + +static int cpsw_setup(struct device_d *dev) +{ + struct cpsw_priv *priv = dev->priv; + int i, ret; + /* soft reset the controller and initialize priv */ soft_reset(priv, &priv->regs->soft_reset); @@ -834,9 +844,6 @@ static int cpsw_open(struct eth_device *edev) cpsw_ale_add_ucast(priv, priv->mac_addr, priv->host_port, ALE_SECURE); cpsw_ale_add_mcast(priv, ethbdaddr, 1 << priv->host_port); - - cpsw_slave_init(slave, priv); - /* init descriptor pool */ for (i = 0; i < NUM_DESCS; i++) { u32 val = (i == (NUM_DESCS - 1)) ? 0 : (u32)&priv->descs[i + 1]; @@ -875,7 +882,7 @@ static int cpsw_open(struct eth_device *edev) ret = cpdma_submit(priv, &priv->rx_chan, NetRxPackets[i], PKTSIZE); if (ret < 0) { - dev_err(&slave->dev, "error %d submitting rx desc\n", ret); + dev_err(dev, "error %d submitting rx desc\n", ret); break; } } @@ -1241,6 +1248,8 @@ static int cpsw_probe(struct device_d *dev) dev->priv = priv; + cpsw_setup(dev); + return 0; out: free(priv->slaves); |