[BNX2]: Fix 5709 Serdes detection.
5709 has a new register to detect copper/fiber PHYs. 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
261dd5ca05
commit
253c8b7554
@@ -5643,6 +5643,44 @@ poll_bnx2(struct net_device *dev)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void __devinit
|
||||||
|
bnx2_get_5709_media(struct bnx2 *bp)
|
||||||
|
{
|
||||||
|
u32 val = REG_RD(bp, BNX2_MISC_DUAL_MEDIA_CTRL);
|
||||||
|
u32 bond_id = val & BNX2_MISC_DUAL_MEDIA_CTRL_BOND_ID;
|
||||||
|
u32 strap;
|
||||||
|
|
||||||
|
if (bond_id == BNX2_MISC_DUAL_MEDIA_CTRL_BOND_ID_C)
|
||||||
|
return;
|
||||||
|
else if (bond_id == BNX2_MISC_DUAL_MEDIA_CTRL_BOND_ID_S) {
|
||||||
|
bp->phy_flags |= PHY_SERDES_FLAG;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val & BNX2_MISC_DUAL_MEDIA_CTRL_STRAP_OVERRIDE)
|
||||||
|
strap = (val & BNX2_MISC_DUAL_MEDIA_CTRL_PHY_CTRL) >> 21;
|
||||||
|
else
|
||||||
|
strap = (val & BNX2_MISC_DUAL_MEDIA_CTRL_PHY_CTRL_STRAP) >> 8;
|
||||||
|
|
||||||
|
if (PCI_FUNC(bp->pdev->devfn) == 0) {
|
||||||
|
switch (strap) {
|
||||||
|
case 0x4:
|
||||||
|
case 0x5:
|
||||||
|
case 0x6:
|
||||||
|
bp->phy_flags |= PHY_SERDES_FLAG;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (strap) {
|
||||||
|
case 0x1:
|
||||||
|
case 0x2:
|
||||||
|
case 0x4:
|
||||||
|
bp->phy_flags |= PHY_SERDES_FLAG;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int __devinit
|
static int __devinit
|
||||||
bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||||
{
|
{
|
||||||
@@ -5863,10 +5901,9 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
|||||||
bp->phy_addr = 1;
|
bp->phy_addr = 1;
|
||||||
|
|
||||||
/* Disable WOL support if we are running on a SERDES chip. */
|
/* Disable WOL support if we are running on a SERDES chip. */
|
||||||
if (CHIP_NUM(bp) == CHIP_NUM_5709) {
|
if (CHIP_NUM(bp) == CHIP_NUM_5709)
|
||||||
if (CHIP_BOND_ID(bp) != BNX2_MISC_DUAL_MEDIA_CTRL_BOND_ID_C)
|
bnx2_get_5709_media(bp);
|
||||||
bp->phy_flags |= PHY_SERDES_FLAG;
|
else if (CHIP_BOND_ID(bp) & CHIP_BOND_ID_SERDES_BIT)
|
||||||
} else if (CHIP_BOND_ID(bp) & CHIP_BOND_ID_SERDES_BIT)
|
|
||||||
bp->phy_flags |= PHY_SERDES_FLAG;
|
bp->phy_flags |= PHY_SERDES_FLAG;
|
||||||
|
|
||||||
if (bp->phy_flags & PHY_SERDES_FLAG) {
|
if (bp->phy_flags & PHY_SERDES_FLAG) {
|
||||||
|
Reference in New Issue
Block a user