|
@@ -226,6 +226,9 @@ static int tg3_debug = -1; /* -1 == use TG3_DEF_MSG_ENABLE as value */
|
|
|
module_param(tg3_debug, int, 0);
|
|
|
MODULE_PARM_DESC(tg3_debug, "Tigon3 bitmapped debugging message enable value");
|
|
|
|
|
|
+#define TG3_DRV_DATA_FLAG_10_100_ONLY 0x0001
|
|
|
+#define TG3_DRV_DATA_FLAG_5705_10_100 0x0002
|
|
|
+
|
|
|
static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5700)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5701)},
|
|
@@ -245,20 +248,28 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5782)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5788)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5789)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
|
|
|
+ TG3_DRV_DATA_FLAG_5705_10_100},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5901_2),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
|
|
|
+ TG3_DRV_DATA_FLAG_5705_10_100},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5704S_2)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5705F),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY |
|
|
|
+ TG3_DRV_DATA_FLAG_5705_10_100},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5721)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5722)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751M)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5751F),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5752M)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753M)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5753F),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5754M)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5755)},
|
|
@@ -266,8 +277,13 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5756)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5786)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787)},
|
|
|
+ {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5787M,
|
|
|
+ PCI_VENDOR_ID_LENOVO,
|
|
|
+ TG3PCI_SUBDEVICE_ID_LENOVO_5787M),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787M)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5787F),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5714S)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, PCI_DEVICE_ID_TIGON3_5715)},
|
|
@@ -286,9 +302,16 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5761SE)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_G)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5785_F)},
|
|
|
+ {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
|
|
|
+ PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_A),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
+ {PCI_DEVICE_SUB(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780,
|
|
|
+ PCI_VENDOR_ID_AI, TG3PCI_SUBDEVICE_ID_ACER_57780_B),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57780)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57760)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57790),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57788)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5717_C)},
|
|
@@ -297,8 +320,10 @@ static DEFINE_PCI_DEVICE_TABLE(tg3_pci_tbl) = {
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57785)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57761)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57765)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791)},
|
|
|
- {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795)},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57791),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
+ {PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57795),
|
|
|
+ .driver_data = TG3_DRV_DATA_FLAG_10_100_ONLY},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5719)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_5720)},
|
|
|
{PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, TG3PCI_DEVICE_TIGON3_57762)},
|
|
@@ -14466,7 +14491,30 @@ static void __devinit tg3_detect_asic_rev(struct tg3 *tp, u32 misc_ctrl_reg)
|
|
|
tg3_flag_set(tp, 5705_PLUS);
|
|
|
}
|
|
|
|
|
|
-static int __devinit tg3_get_invariants(struct tg3 *tp)
|
|
|
+static bool tg3_10_100_only_device(struct tg3 *tp,
|
|
|
+ const struct pci_device_id *ent)
|
|
|
+{
|
|
|
+ u32 grc_misc_cfg = tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK;
|
|
|
+
|
|
|
+ if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
|
|
|
+ (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
|
|
|
+ (tp->phy_flags & TG3_PHYFLG_IS_FET))
|
|
|
+ return true;
|
|
|
+
|
|
|
+ if (ent->driver_data & TG3_DRV_DATA_FLAG_10_100_ONLY) {
|
|
|
+ if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705) {
|
|
|
+ if (ent->driver_data & TG3_DRV_DATA_FLAG_5705_10_100)
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static int __devinit tg3_get_invariants(struct tg3 *tp,
|
|
|
+ const struct pci_device_id *ent)
|
|
|
{
|
|
|
u32 misc_ctrl_reg;
|
|
|
u32 pci_state_reg, grc_misc_cfg;
|
|
@@ -15145,22 +15193,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
|
|
|
else
|
|
|
tp->mac_mode = 0;
|
|
|
|
|
|
- /* these are limited to 10/100 only */
|
|
|
- if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5703 &&
|
|
|
- (grc_misc_cfg == 0x8000 || grc_misc_cfg == 0x4000)) ||
|
|
|
- (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 &&
|
|
|
- tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
|
|
|
- (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901 ||
|
|
|
- tp->pdev->device == PCI_DEVICE_ID_TIGON3_5901_2 ||
|
|
|
- tp->pdev->device == PCI_DEVICE_ID_TIGON3_5705F)) ||
|
|
|
- (tp->pdev->vendor == PCI_VENDOR_ID_BROADCOM &&
|
|
|
- (tp->pdev->device == PCI_DEVICE_ID_TIGON3_5751F ||
|
|
|
- tp->pdev->device == PCI_DEVICE_ID_TIGON3_5753F ||
|
|
|
- tp->pdev->device == PCI_DEVICE_ID_TIGON3_5787F)) ||
|
|
|
- tp->pdev->device == TG3PCI_DEVICE_TIGON3_57790 ||
|
|
|
- tp->pdev->device == TG3PCI_DEVICE_TIGON3_57791 ||
|
|
|
- tp->pdev->device == TG3PCI_DEVICE_TIGON3_57795 ||
|
|
|
- (tp->phy_flags & TG3_PHYFLG_IS_FET))
|
|
|
+ if (tg3_10_100_only_device(tp, ent))
|
|
|
tp->phy_flags |= TG3_PHYFLG_10_100_ONLY;
|
|
|
|
|
|
err = tg3_phy_probe(tp);
|
|
@@ -16039,7 +16072,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|
|
dev->netdev_ops = &tg3_netdev_ops;
|
|
|
dev->irq = pdev->irq;
|
|
|
|
|
|
- err = tg3_get_invariants(tp);
|
|
|
+ err = tg3_get_invariants(tp, ent);
|
|
|
if (err) {
|
|
|
dev_err(&pdev->dev,
|
|
|
"Problem fetching invariants of chip, aborting\n");
|