Commit 683644b7 authored by Matt Carlson's avatar Matt Carlson Committed by David S. Miller

tg3: Refine VAux decision process

In the near future, the VAux switching decision process is going to get
more complicated.  This patch refines and consolidates the existing
algorithm in anticipation of the new scheme.
Signed-off-by: default avatarMatt Carlson <mcarlson@broadcom.com>
Reviewed-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4143470c
...@@ -2120,7 +2120,7 @@ static int tg3_phy_reset(struct tg3 *tp) ...@@ -2120,7 +2120,7 @@ static int tg3_phy_reset(struct tg3 *tp)
static void tg3_frob_aux_power(struct tg3 *tp) static void tg3_frob_aux_power(struct tg3 *tp)
{ {
struct tg3 *tp_peer = tp; bool need_vaux = false;
/* The GPIOs do something completely different on 57765. */ /* The GPIOs do something completely different on 57765. */
if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0 || if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0 ||
...@@ -2128,23 +2128,32 @@ static void tg3_frob_aux_power(struct tg3 *tp) ...@@ -2128,23 +2128,32 @@ static void tg3_frob_aux_power(struct tg3 *tp)
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765) GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57765)
return; return;
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 || GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) &&
tp->pdev_peer != tp->pdev) {
struct net_device *dev_peer; struct net_device *dev_peer;
dev_peer = pci_get_drvdata(tp->pdev_peer); dev_peer = pci_get_drvdata(tp->pdev_peer);
/* remove_one() may have been run on the peer. */ /* remove_one() may have been run on the peer. */
if (!dev_peer) if (dev_peer) {
tp_peer = tp; struct tg3 *tp_peer = netdev_priv(dev_peer);
else
tp_peer = netdev_priv(dev_peer); if (tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE)
return;
if ((tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) ||
(tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF))
need_vaux = true;
} }
}
if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) ||
(tp->tg3_flags & TG3_FLAG_ENABLE_ASF))
need_vaux = true;
if ((tp->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 || if (need_vaux) {
(tp->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0 ||
(tp_peer->tg3_flags & TG3_FLAG_WOL_ENABLE) != 0 ||
(tp_peer->tg3_flags & TG3_FLAG_ENABLE_ASF) != 0) {
if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) { GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701) {
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
...@@ -2174,10 +2183,6 @@ static void tg3_frob_aux_power(struct tg3 *tp) ...@@ -2174,10 +2183,6 @@ static void tg3_frob_aux_power(struct tg3 *tp)
u32 no_gpio2; u32 no_gpio2;
u32 grc_local_ctrl = 0; u32 grc_local_ctrl = 0;
if (tp_peer != tp &&
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
return;
/* Workaround to prevent overdrawing Amps. */ /* Workaround to prevent overdrawing Amps. */
if (GET_ASIC_REV(tp->pci_chip_rev_id) == if (GET_ASIC_REV(tp->pci_chip_rev_id) ==
ASIC_REV_5714) { ASIC_REV_5714) {
...@@ -2216,10 +2221,6 @@ static void tg3_frob_aux_power(struct tg3 *tp) ...@@ -2216,10 +2221,6 @@ static void tg3_frob_aux_power(struct tg3 *tp)
} else { } else {
if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 && if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5700 &&
GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) { GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5701) {
if (tp_peer != tp &&
(tp_peer->tg3_flags & TG3_FLAG_INIT_COMPLETE) != 0)
return;
tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl | tw32_wait_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl |
(GRC_LCLCTRL_GPIO_OE1 | (GRC_LCLCTRL_GPIO_OE1 |
GRC_LCLCTRL_GPIO_OUTPUT1), 100); GRC_LCLCTRL_GPIO_OUTPUT1), 100);
......
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