Commit 54b15983 authored by Anton Vorontsov's avatar Anton Vorontsov Committed by David S. Miller

ucc_geth: Factor out MAC initialization steps into a call

This patch factors out MAC initialization into ucc_geth_init_mac()
function that we'll use for suspend/resume.
Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ed24157e
...@@ -3429,46 +3429,25 @@ static int ucc_geth_set_mac_addr(struct net_device *dev, void *p) ...@@ -3429,46 +3429,25 @@ static int ucc_geth_set_mac_addr(struct net_device *dev, void *p)
return 0; return 0;
} }
/* Called when something needs to use the ethernet device */ static int ucc_geth_init_mac(struct ucc_geth_private *ugeth)
/* Returns 0 for success. */
static int ucc_geth_open(struct net_device *dev)
{ {
struct ucc_geth_private *ugeth = netdev_priv(dev); struct net_device *dev = ugeth->ndev;
int err; int err;
ugeth_vdbg("%s: IN", __func__);
/* Test station address */
if (dev->dev_addr[0] & ENET_GROUP_ADDR) {
if (netif_msg_ifup(ugeth))
ugeth_err("%s: Multicast address used for station address"
" - is this what you wanted?", __func__);
return -EINVAL;
}
err = init_phy(dev);
if (err) {
if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot initialize PHY, aborting.",
dev->name);
return err;
}
err = ucc_struct_init(ugeth); err = ucc_struct_init(ugeth);
if (err) { if (err) {
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot configure internal struct, aborting.", dev->name); ugeth_err("%s: Cannot configure internal struct, "
goto out_err_stop; "aborting.", dev->name);
goto err;
} }
napi_enable(&ugeth->napi);
err = ucc_geth_startup(ugeth); err = ucc_geth_startup(ugeth);
if (err) { if (err) {
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot configure net device, aborting.", ugeth_err("%s: Cannot configure net device, aborting.",
dev->name); dev->name);
goto out_err; goto err;
} }
err = adjust_enet_interface(ugeth); err = adjust_enet_interface(ugeth);
...@@ -3476,7 +3455,7 @@ static int ucc_geth_open(struct net_device *dev) ...@@ -3476,7 +3455,7 @@ static int ucc_geth_open(struct net_device *dev)
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot configure net device, aborting.", ugeth_err("%s: Cannot configure net device, aborting.",
dev->name); dev->name);
goto out_err; goto err;
} }
/* Set MACSTNADDR1, MACSTNADDR2 */ /* Set MACSTNADDR1, MACSTNADDR2 */
...@@ -3490,13 +3469,51 @@ static int ucc_geth_open(struct net_device *dev) ...@@ -3490,13 +3469,51 @@ static int ucc_geth_open(struct net_device *dev)
&ugeth->ug_regs->macstnaddr1, &ugeth->ug_regs->macstnaddr1,
&ugeth->ug_regs->macstnaddr2); &ugeth->ug_regs->macstnaddr2);
phy_start(ugeth->phydev);
err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX); err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX);
if (err) { if (err) {
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot enable net device, aborting.", dev->name); ugeth_err("%s: Cannot enable net device, aborting.", dev->name);
goto out_err; goto err;
}
return 0;
err:
ucc_geth_stop(ugeth);
return err;
}
/* Called when something needs to use the ethernet device */
/* Returns 0 for success. */
static int ucc_geth_open(struct net_device *dev)
{
struct ucc_geth_private *ugeth = netdev_priv(dev);
int err;
ugeth_vdbg("%s: IN", __func__);
/* Test station address */
if (dev->dev_addr[0] & ENET_GROUP_ADDR) {
if (netif_msg_ifup(ugeth))
ugeth_err("%s: Multicast address used for station "
"address - is this what you wanted?",
__func__);
return -EINVAL;
}
err = init_phy(dev);
if (err) {
if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot initialize PHY, aborting.",
dev->name);
return err;
}
err = ucc_geth_init_mac(ugeth);
if (err) {
if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot initialize MAC, aborting.",
dev->name);
goto err;
} }
err = request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler, err = request_irq(ugeth->ug_info->uf_info.irq, ucc_geth_irq_handler,
...@@ -3505,16 +3522,16 @@ static int ucc_geth_open(struct net_device *dev) ...@@ -3505,16 +3522,16 @@ static int ucc_geth_open(struct net_device *dev)
if (netif_msg_ifup(ugeth)) if (netif_msg_ifup(ugeth))
ugeth_err("%s: Cannot get IRQ for net device, aborting.", ugeth_err("%s: Cannot get IRQ for net device, aborting.",
dev->name); dev->name);
goto out_err; goto err;
} }
phy_start(ugeth->phydev);
napi_enable(&ugeth->napi);
netif_start_queue(dev); netif_start_queue(dev);
return err; return err;
out_err: err:
napi_disable(&ugeth->napi);
out_err_stop:
ucc_geth_stop(ugeth); ucc_geth_stop(ugeth);
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment