tg3: Set 10_100_ONLY flag for additional 10/100 Mbps devices
- Also refactor the conditional to use the existing tg3_pci_tbl array. - Set flags in the driver_data field of the pci_device_id structure to identify these devices. - Add PCI_DEVICE_SUB() to pci.h to declare PCI 4-part IDs to match these devices. Signed-off-by: Nithin Nayak Sujir <nsujir@broadcom.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f372341602
commit
3d567e0e29
@@ -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");
|
||||
|
Reference in New Issue
Block a user