From d27e22a962bb47fe97d94ae3be0e2a277838977d Mon Sep 17 00:00:00 2001 From: Matt Carlson Date: Wed, 13 Jul 2011 09:27:30 +0000 Subject: [PATCH] --- yaml --- r: 256279 b: refs/heads/master c: 69f11c9936ba310ed3620072983da6ed95e86cc0 h: refs/heads/master i: 256277: 731b739a7e2e84c2192ae90c4b977f8437f9a072 256275: 22cbb7d13aa3de735453deafa173fde14ad4cdc4 256271: 244df51bac67bc75accb44c74ab9c5af87530d8f v: v3 --- [refs] | 2 +- trunk/drivers/net/tg3.c | 14 +++++++++++--- trunk/drivers/net/tg3.h | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 451991ce1244..c9fa6675c124 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bed9829f3ec4b30d5cbec6511a11368ba5f169fb +refs/heads/master: 69f11c9936ba310ed3620072983da6ed95e86cc0 diff --git a/trunk/drivers/net/tg3.c b/trunk/drivers/net/tg3.c index 5d4283e7be7a..6f1f36c89055 100644 --- a/trunk/drivers/net/tg3.c +++ b/trunk/drivers/net/tg3.c @@ -1170,7 +1170,7 @@ static int tg3_mdio_init(struct tg3 *tp) if (tg3_flag(tp, 5717_PLUS)) { u32 is_serdes; - tp->phy_addr = PCI_FUNC(tp->pdev->devfn) + 1; + tp->phy_addr = tp->pci_fn + 1; if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0) is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; @@ -13951,6 +13951,14 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) val = tr32(MEMARB_MODE); tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); + if (tg3_flag(tp, PCIX_MODE)) { + pci_read_config_dword(tp->pdev, + tp->pcix_cap + PCI_X_STATUS, &val); + tp->pci_fn = val & 0x7; + } else { + tp->pci_fn = PCI_FUNC(tp->pdev->devfn) & 3; + } + /* Get eeprom hw config before calling tg3_set_power_state(). * In particular, the TG3_FLAG_IS_NIC flag must be * determined before calling tg3_set_power_state() so that @@ -14316,9 +14324,9 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) else tg3_nvram_unlock(tp); } else if (tg3_flag(tp, 5717_PLUS)) { - if (PCI_FUNC(tp->pdev->devfn) & 1) + if (tp->pci_fn & 1) mac_offset = 0xcc; - if (PCI_FUNC(tp->pdev->devfn) > 1) + if (tp->pci_fn > 1) mac_offset += 0x18c; } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) mac_offset = 0x10; diff --git a/trunk/drivers/net/tg3.h b/trunk/drivers/net/tg3.h index 5f250aef7c92..b4c003db69a1 100644 --- a/trunk/drivers/net/tg3.h +++ b/trunk/drivers/net/tg3.h @@ -3020,6 +3020,7 @@ struct tg3 { u8 pci_cacheline_sz; u8 pci_lat_timer; + int pci_fn; int pm_cap; int msi_cap; int pcix_cap;