Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+52 −35
Original line number Diff line number Diff line
@@ -3429,46 +3429,25 @@ static int ucc_geth_set_mac_addr(struct net_device *dev, void *p)
	return 0;
}

/* Called when something needs to use the ethernet device */
/* Returns 0 for success. */
static int ucc_geth_open(struct net_device *dev)
static int ucc_geth_init_mac(struct ucc_geth_private *ugeth)
{
	struct ucc_geth_private *ugeth = netdev_priv(dev);
	struct net_device *dev = ugeth->ndev;
	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);
	if (err) {
		if (netif_msg_ifup(ugeth))
			ugeth_err("%s: Cannot configure internal struct, aborting.", dev->name);
		goto out_err_stop;
			ugeth_err("%s: Cannot configure internal struct, "
				  "aborting.", dev->name);
		goto err;
	}

	napi_enable(&ugeth->napi);

	err = ucc_geth_startup(ugeth);
	if (err) {
		if (netif_msg_ifup(ugeth))
			ugeth_err("%s: Cannot configure net device, aborting.",
				  dev->name);
		goto out_err;
		goto err;
	}

	err = adjust_enet_interface(ugeth);
@@ -3476,7 +3455,7 @@ static int ucc_geth_open(struct net_device *dev)
		if (netif_msg_ifup(ugeth))
			ugeth_err("%s: Cannot configure net device, aborting.",
				  dev->name);
		goto out_err;
		goto err;
	}

	/*       Set MACSTNADDR1, MACSTNADDR2                */
@@ -3490,13 +3469,51 @@ static int ucc_geth_open(struct net_device *dev)
				   &ugeth->ug_regs->macstnaddr1,
				   &ugeth->ug_regs->macstnaddr2);

	phy_start(ugeth->phydev);

	err = ugeth_enable(ugeth, COMM_DIR_RX_AND_TX);
	if (err) {
		if (netif_msg_ifup(ugeth))
			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,
@@ -3505,16 +3522,16 @@ static int ucc_geth_open(struct net_device *dev)
		if (netif_msg_ifup(ugeth))
			ugeth_err("%s: Cannot get IRQ for net device, aborting.",
				  dev->name);
		goto out_err;
		goto err;
	}

	phy_start(ugeth->phydev);
	napi_enable(&ugeth->napi);
	netif_start_queue(dev);

	return err;

out_err:
	napi_disable(&ugeth->napi);
out_err_stop:
err:
	ucc_geth_stop(ugeth);
	return err;
}