diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 54 |
2 files changed, 33 insertions, 26 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c index 0216d592d0ce..2e46c28fc601 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sriov.c | |||
@@ -3114,6 +3114,11 @@ int bnx2x_sriov_configure(struct pci_dev *dev, int num_vfs_param) | |||
3114 | { | 3114 | { |
3115 | struct bnx2x *bp = netdev_priv(pci_get_drvdata(dev)); | 3115 | struct bnx2x *bp = netdev_priv(pci_get_drvdata(dev)); |
3116 | 3116 | ||
3117 | if (!IS_SRIOV(bp)) { | ||
3118 | BNX2X_ERR("failed to configure SR-IOV since vfdb was not allocated. Check dmesg for errors in probe stage\n"); | ||
3119 | return -EINVAL; | ||
3120 | } | ||
3121 | |||
3117 | DP(BNX2X_MSG_IOV, "bnx2x_sriov_configure called with %d, BNX2X_NR_VIRTFN(bp) was %d\n", | 3122 | DP(BNX2X_MSG_IOV, "bnx2x_sriov_configure called with %d, BNX2X_NR_VIRTFN(bp) was %d\n", |
3118 | num_vfs_param, BNX2X_NR_VIRTFN(bp)); | 3123 | num_vfs_param, BNX2X_NR_VIRTFN(bp)); |
3119 | 3124 | ||
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index a9e068423ba0..f3dd93b4aeaa 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -8932,6 +8932,9 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
8932 | void (*write_op)(struct tg3 *, u32, u32); | 8932 | void (*write_op)(struct tg3 *, u32, u32); |
8933 | int i, err; | 8933 | int i, err; |
8934 | 8934 | ||
8935 | if (!pci_device_is_present(tp->pdev)) | ||
8936 | return -ENODEV; | ||
8937 | |||
8935 | tg3_nvram_lock(tp); | 8938 | tg3_nvram_lock(tp); |
8936 | 8939 | ||
8937 | tg3_ape_lock(tp, TG3_APE_LOCK_GRC); | 8940 | tg3_ape_lock(tp, TG3_APE_LOCK_GRC); |
@@ -10629,10 +10632,8 @@ static void tg3_sd_scan_scratchpad(struct tg3 *tp, struct tg3_ocir *ocir) | |||
10629 | static ssize_t tg3_show_temp(struct device *dev, | 10632 | static ssize_t tg3_show_temp(struct device *dev, |
10630 | struct device_attribute *devattr, char *buf) | 10633 | struct device_attribute *devattr, char *buf) |
10631 | { | 10634 | { |
10632 | struct pci_dev *pdev = to_pci_dev(dev); | ||
10633 | struct net_device *netdev = pci_get_drvdata(pdev); | ||
10634 | struct tg3 *tp = netdev_priv(netdev); | ||
10635 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); | 10635 | struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); |
10636 | struct tg3 *tp = dev_get_drvdata(dev); | ||
10636 | u32 temperature; | 10637 | u32 temperature; |
10637 | 10638 | ||
10638 | spin_lock_bh(&tp->lock); | 10639 | spin_lock_bh(&tp->lock); |
@@ -10650,29 +10651,25 @@ static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, tg3_show_temp, NULL, | |||
10650 | static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL, | 10651 | static SENSOR_DEVICE_ATTR(temp1_max, S_IRUGO, tg3_show_temp, NULL, |
10651 | TG3_TEMP_MAX_OFFSET); | 10652 | TG3_TEMP_MAX_OFFSET); |
10652 | 10653 | ||
10653 | static struct attribute *tg3_attributes[] = { | 10654 | static struct attribute *tg3_attrs[] = { |
10654 | &sensor_dev_attr_temp1_input.dev_attr.attr, | 10655 | &sensor_dev_attr_temp1_input.dev_attr.attr, |
10655 | &sensor_dev_attr_temp1_crit.dev_attr.attr, | 10656 | &sensor_dev_attr_temp1_crit.dev_attr.attr, |
10656 | &sensor_dev_attr_temp1_max.dev_attr.attr, | 10657 | &sensor_dev_attr_temp1_max.dev_attr.attr, |
10657 | NULL | 10658 | NULL |
10658 | }; | 10659 | }; |
10659 | 10660 | ATTRIBUTE_GROUPS(tg3); | |
10660 | static const struct attribute_group tg3_group = { | ||
10661 | .attrs = tg3_attributes, | ||
10662 | }; | ||
10663 | 10661 | ||
10664 | static void tg3_hwmon_close(struct tg3 *tp) | 10662 | static void tg3_hwmon_close(struct tg3 *tp) |
10665 | { | 10663 | { |
10666 | if (tp->hwmon_dev) { | 10664 | if (tp->hwmon_dev) { |
10667 | hwmon_device_unregister(tp->hwmon_dev); | 10665 | hwmon_device_unregister(tp->hwmon_dev); |
10668 | tp->hwmon_dev = NULL; | 10666 | tp->hwmon_dev = NULL; |
10669 | sysfs_remove_group(&tp->pdev->dev.kobj, &tg3_group); | ||
10670 | } | 10667 | } |
10671 | } | 10668 | } |
10672 | 10669 | ||
10673 | static void tg3_hwmon_open(struct tg3 *tp) | 10670 | static void tg3_hwmon_open(struct tg3 *tp) |
10674 | { | 10671 | { |
10675 | int i, err; | 10672 | int i; |
10676 | u32 size = 0; | 10673 | u32 size = 0; |
10677 | struct pci_dev *pdev = tp->pdev; | 10674 | struct pci_dev *pdev = tp->pdev; |
10678 | struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; | 10675 | struct tg3_ocir ocirs[TG3_SD_NUM_RECS]; |
@@ -10690,18 +10687,11 @@ static void tg3_hwmon_open(struct tg3 *tp) | |||
10690 | if (!size) | 10687 | if (!size) |
10691 | return; | 10688 | return; |
10692 | 10689 | ||
10693 | /* Register hwmon sysfs hooks */ | 10690 | tp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev, "tg3", |
10694 | err = sysfs_create_group(&pdev->dev.kobj, &tg3_group); | 10691 | tp, tg3_groups); |
10695 | if (err) { | ||
10696 | dev_err(&pdev->dev, "Cannot create sysfs group, aborting\n"); | ||
10697 | return; | ||
10698 | } | ||
10699 | |||
10700 | tp->hwmon_dev = hwmon_device_register(&pdev->dev); | ||
10701 | if (IS_ERR(tp->hwmon_dev)) { | 10692 | if (IS_ERR(tp->hwmon_dev)) { |
10702 | tp->hwmon_dev = NULL; | 10693 | tp->hwmon_dev = NULL; |
10703 | dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); | 10694 | dev_err(&pdev->dev, "Cannot register hwmon device, aborting\n"); |
10704 | sysfs_remove_group(&pdev->dev.kobj, &tg3_group); | ||
10705 | } | 10695 | } |
10706 | } | 10696 | } |
10707 | 10697 | ||
@@ -11594,10 +11584,11 @@ static int tg3_close(struct net_device *dev) | |||
11594 | memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev)); | 11584 | memset(&tp->net_stats_prev, 0, sizeof(tp->net_stats_prev)); |
11595 | memset(&tp->estats_prev, 0, sizeof(tp->estats_prev)); | 11585 | memset(&tp->estats_prev, 0, sizeof(tp->estats_prev)); |
11596 | 11586 | ||
11597 | tg3_power_down_prepare(tp); | 11587 | if (pci_device_is_present(tp->pdev)) { |
11598 | 11588 | tg3_power_down_prepare(tp); | |
11599 | tg3_carrier_off(tp); | ||
11600 | 11589 | ||
11590 | tg3_carrier_off(tp); | ||
11591 | } | ||
11601 | return 0; | 11592 | return 0; |
11602 | } | 11593 | } |
11603 | 11594 | ||
@@ -16512,6 +16503,9 @@ static int tg3_get_invariants(struct tg3 *tp, const struct pci_device_id *ent) | |||
16512 | /* Clear this out for sanity. */ | 16503 | /* Clear this out for sanity. */ |
16513 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); | 16504 | tw32(TG3PCI_MEM_WIN_BASE_ADDR, 0); |
16514 | 16505 | ||
16506 | /* Clear TG3PCI_REG_BASE_ADDR to prevent hangs. */ | ||
16507 | tw32(TG3PCI_REG_BASE_ADDR, 0); | ||
16508 | |||
16515 | pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, | 16509 | pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, |
16516 | &pci_state_reg); | 16510 | &pci_state_reg); |
16517 | if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && | 16511 | if ((pci_state_reg & PCISTATE_CONV_PCI_MODE) == 0 && |
@@ -17739,10 +17733,12 @@ static int tg3_suspend(struct device *device) | |||
17739 | struct pci_dev *pdev = to_pci_dev(device); | 17733 | struct pci_dev *pdev = to_pci_dev(device); |
17740 | struct net_device *dev = pci_get_drvdata(pdev); | 17734 | struct net_device *dev = pci_get_drvdata(pdev); |
17741 | struct tg3 *tp = netdev_priv(dev); | 17735 | struct tg3 *tp = netdev_priv(dev); |
17742 | int err; | 17736 | int err = 0; |
17737 | |||
17738 | rtnl_lock(); | ||
17743 | 17739 | ||
17744 | if (!netif_running(dev)) | 17740 | if (!netif_running(dev)) |
17745 | return 0; | 17741 | goto unlock; |
17746 | 17742 | ||
17747 | tg3_reset_task_cancel(tp); | 17743 | tg3_reset_task_cancel(tp); |
17748 | tg3_phy_stop(tp); | 17744 | tg3_phy_stop(tp); |
@@ -17784,6 +17780,8 @@ out: | |||
17784 | tg3_phy_start(tp); | 17780 | tg3_phy_start(tp); |
17785 | } | 17781 | } |
17786 | 17782 | ||
17783 | unlock: | ||
17784 | rtnl_unlock(); | ||
17787 | return err; | 17785 | return err; |
17788 | } | 17786 | } |
17789 | 17787 | ||
@@ -17792,10 +17790,12 @@ static int tg3_resume(struct device *device) | |||
17792 | struct pci_dev *pdev = to_pci_dev(device); | 17790 | struct pci_dev *pdev = to_pci_dev(device); |
17793 | struct net_device *dev = pci_get_drvdata(pdev); | 17791 | struct net_device *dev = pci_get_drvdata(pdev); |
17794 | struct tg3 *tp = netdev_priv(dev); | 17792 | struct tg3 *tp = netdev_priv(dev); |
17795 | int err; | 17793 | int err = 0; |
17794 | |||
17795 | rtnl_lock(); | ||
17796 | 17796 | ||
17797 | if (!netif_running(dev)) | 17797 | if (!netif_running(dev)) |
17798 | return 0; | 17798 | goto unlock; |
17799 | 17799 | ||
17800 | netif_device_attach(dev); | 17800 | netif_device_attach(dev); |
17801 | 17801 | ||
@@ -17819,6 +17819,8 @@ out: | |||
17819 | if (!err) | 17819 | if (!err) |
17820 | tg3_phy_start(tp); | 17820 | tg3_phy_start(tp); |
17821 | 17821 | ||
17822 | unlock: | ||
17823 | rtnl_unlock(); | ||
17822 | return err; | 17824 | return err; |
17823 | } | 17825 | } |
17824 | #endif /* CONFIG_PM_SLEEP */ | 17826 | #endif /* CONFIG_PM_SLEEP */ |