diff options
author | Ivan Vecera <ivecera@redhat.com> | 2015-01-08 10:13:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-01-12 15:58:39 -0500 |
commit | 20d14a5d377a6265c2e89986d052f79dff922217 (patch) | |
tree | 69e4e32552e5e7177f42f1c2bfe403cfdef96c52 /drivers/net/ethernet/broadcom/tg3.c | |
parent | 3ec7a176fa81107c20f1693c64873c11a6cd8fa4 (diff) |
tg3: move init/deinit from open/close to probe/remove
Move init and deinit of PTP support from open/close functions
to probe/remove funcs to avoid removing/re-adding of associated PTP
device(s) during ifup/ifdown.
v2: tg3_ptp_init call moved to correct place (thx. Prashant)
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
Acked-by: Prashant Sreedharan <prashant@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/tg3.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 553dcd8a9df2..356bd5b022a5 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -11556,11 +11556,7 @@ static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, | |||
11556 | tg3_flag_set(tp, INIT_COMPLETE); | 11556 | tg3_flag_set(tp, INIT_COMPLETE); |
11557 | tg3_enable_ints(tp); | 11557 | tg3_enable_ints(tp); |
11558 | 11558 | ||
11559 | if (init) | 11559 | tg3_ptp_resume(tp); |
11560 | tg3_ptp_init(tp); | ||
11561 | else | ||
11562 | tg3_ptp_resume(tp); | ||
11563 | |||
11564 | 11560 | ||
11565 | tg3_full_unlock(tp); | 11561 | tg3_full_unlock(tp); |
11566 | 11562 | ||
@@ -11681,13 +11677,6 @@ static int tg3_open(struct net_device *dev) | |||
11681 | pci_set_power_state(tp->pdev, PCI_D3hot); | 11677 | pci_set_power_state(tp->pdev, PCI_D3hot); |
11682 | } | 11678 | } |
11683 | 11679 | ||
11684 | if (tg3_flag(tp, PTP_CAPABLE)) { | ||
11685 | tp->ptp_clock = ptp_clock_register(&tp->ptp_info, | ||
11686 | &tp->pdev->dev); | ||
11687 | if (IS_ERR(tp->ptp_clock)) | ||
11688 | tp->ptp_clock = NULL; | ||
11689 | } | ||
11690 | |||
11691 | return err; | 11680 | return err; |
11692 | } | 11681 | } |
11693 | 11682 | ||
@@ -11701,8 +11690,6 @@ static int tg3_close(struct net_device *dev) | |||
11701 | return -EAGAIN; | 11690 | return -EAGAIN; |
11702 | } | 11691 | } |
11703 | 11692 | ||
11704 | tg3_ptp_fini(tp); | ||
11705 | |||
11706 | tg3_stop(tp); | 11693 | tg3_stop(tp); |
11707 | 11694 | ||
11708 | /* Clear stats across close / open calls */ | 11695 | /* Clear stats across close / open calls */ |
@@ -17880,6 +17867,14 @@ static int tg3_init_one(struct pci_dev *pdev, | |||
17880 | goto err_out_apeunmap; | 17867 | goto err_out_apeunmap; |
17881 | } | 17868 | } |
17882 | 17869 | ||
17870 | if (tg3_flag(tp, PTP_CAPABLE)) { | ||
17871 | tg3_ptp_init(tp); | ||
17872 | tp->ptp_clock = ptp_clock_register(&tp->ptp_info, | ||
17873 | &tp->pdev->dev); | ||
17874 | if (IS_ERR(tp->ptp_clock)) | ||
17875 | tp->ptp_clock = NULL; | ||
17876 | } | ||
17877 | |||
17883 | netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", | 17878 | netdev_info(dev, "Tigon3 [partno(%s) rev %04x] (%s) MAC address %pM\n", |
17884 | tp->board_part_number, | 17879 | tp->board_part_number, |
17885 | tg3_chip_rev_id(tp), | 17880 | tg3_chip_rev_id(tp), |
@@ -17955,6 +17950,8 @@ static void tg3_remove_one(struct pci_dev *pdev) | |||
17955 | if (dev) { | 17950 | if (dev) { |
17956 | struct tg3 *tp = netdev_priv(dev); | 17951 | struct tg3 *tp = netdev_priv(dev); |
17957 | 17952 | ||
17953 | tg3_ptp_fini(tp); | ||
17954 | |||
17958 | release_firmware(tp->fw); | 17955 | release_firmware(tp->fw); |
17959 | 17956 | ||
17960 | tg3_reset_task_cancel(tp); | 17957 | tg3_reset_task_cancel(tp); |