diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/tg3.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 161cbbb4814a..35901630a65c 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -628,19 +628,23 @@ static void tg3_ape_lock_init(struct tg3 *tp) | |||
628 | regbase = TG3_APE_PER_LOCK_GRANT; | 628 | regbase = TG3_APE_PER_LOCK_GRANT; |
629 | 629 | ||
630 | /* Make sure the driver hasn't any stale locks. */ | 630 | /* Make sure the driver hasn't any stale locks. */ |
631 | for (i = 0; i < 8; i++) { | 631 | for (i = TG3_APE_LOCK_PHY0; i <= TG3_APE_LOCK_GPIO; i++) { |
632 | if (i == TG3_APE_LOCK_GPIO) | 632 | switch (i) { |
633 | continue; | 633 | case TG3_APE_LOCK_PHY0: |
634 | tg3_ape_write32(tp, regbase + 4 * i, APE_LOCK_GRANT_DRIVER); | 634 | case TG3_APE_LOCK_PHY1: |
635 | case TG3_APE_LOCK_PHY2: | ||
636 | case TG3_APE_LOCK_PHY3: | ||
637 | bit = APE_LOCK_GRANT_DRIVER; | ||
638 | break; | ||
639 | default: | ||
640 | if (!tp->pci_fn) | ||
641 | bit = APE_LOCK_GRANT_DRIVER; | ||
642 | else | ||
643 | bit = 1 << tp->pci_fn; | ||
644 | } | ||
645 | tg3_ape_write32(tp, regbase + 4 * i, bit); | ||
635 | } | 646 | } |
636 | 647 | ||
637 | /* Clear the correct bit of the GPIO lock too. */ | ||
638 | if (!tp->pci_fn) | ||
639 | bit = APE_LOCK_GRANT_DRIVER; | ||
640 | else | ||
641 | bit = 1 << tp->pci_fn; | ||
642 | |||
643 | tg3_ape_write32(tp, regbase + 4 * TG3_APE_LOCK_GPIO, bit); | ||
644 | } | 648 | } |
645 | 649 | ||
646 | static int tg3_ape_lock(struct tg3 *tp, int locknum) | 650 | static int tg3_ape_lock(struct tg3 *tp, int locknum) |
@@ -658,6 +662,10 @@ static int tg3_ape_lock(struct tg3 *tp, int locknum) | |||
658 | return 0; | 662 | return 0; |
659 | case TG3_APE_LOCK_GRC: | 663 | case TG3_APE_LOCK_GRC: |
660 | case TG3_APE_LOCK_MEM: | 664 | case TG3_APE_LOCK_MEM: |
665 | if (!tp->pci_fn) | ||
666 | bit = APE_LOCK_REQ_DRIVER; | ||
667 | else | ||
668 | bit = 1 << tp->pci_fn; | ||
661 | break; | 669 | break; |
662 | default: | 670 | default: |
663 | return -EINVAL; | 671 | return -EINVAL; |
@@ -673,11 +681,6 @@ static int tg3_ape_lock(struct tg3 *tp, int locknum) | |||
673 | 681 | ||
674 | off = 4 * locknum; | 682 | off = 4 * locknum; |
675 | 683 | ||
676 | if (locknum != TG3_APE_LOCK_GPIO || !tp->pci_fn) | ||
677 | bit = APE_LOCK_REQ_DRIVER; | ||
678 | else | ||
679 | bit = 1 << tp->pci_fn; | ||
680 | |||
681 | tg3_ape_write32(tp, req + off, bit); | 684 | tg3_ape_write32(tp, req + off, bit); |
682 | 685 | ||
683 | /* Wait for up to 1 millisecond to acquire lock. */ | 686 | /* Wait for up to 1 millisecond to acquire lock. */ |
@@ -710,6 +713,10 @@ static void tg3_ape_unlock(struct tg3 *tp, int locknum) | |||
710 | return; | 713 | return; |
711 | case TG3_APE_LOCK_GRC: | 714 | case TG3_APE_LOCK_GRC: |
712 | case TG3_APE_LOCK_MEM: | 715 | case TG3_APE_LOCK_MEM: |
716 | if (!tp->pci_fn) | ||
717 | bit = APE_LOCK_GRANT_DRIVER; | ||
718 | else | ||
719 | bit = 1 << tp->pci_fn; | ||
713 | break; | 720 | break; |
714 | default: | 721 | default: |
715 | return; | 722 | return; |
@@ -720,11 +727,6 @@ static void tg3_ape_unlock(struct tg3 *tp, int locknum) | |||
720 | else | 727 | else |
721 | gnt = TG3_APE_PER_LOCK_GRANT; | 728 | gnt = TG3_APE_PER_LOCK_GRANT; |
722 | 729 | ||
723 | if (locknum != TG3_APE_LOCK_GPIO || !tp->pci_fn) | ||
724 | bit = APE_LOCK_GRANT_DRIVER; | ||
725 | else | ||
726 | bit = 1 << tp->pci_fn; | ||
727 | |||
728 | tg3_ape_write32(tp, gnt + 4 * locknum, bit); | 730 | tg3_ape_write32(tp, gnt + 4 * locknum, bit); |
729 | } | 731 | } |
730 | 732 | ||