add support for Xilinx 1000BASE-X phy (GTX)
commit 39695029bc15041c809df3db4ba19bd729c447fa Author: Charles Coldwell <coldwell@ll.mit.edu> Date: Tue Feb 19 08:27:33 2013 -0500 Changes to support the Xilinx 1000BASE-X phy (GTX/MGT) Signed-off-by: Charles Coldwell <coldwell@ll.mit.edu>
This commit is contained in:
parent
5da7cf81c8
commit
de1d786edf
@ -75,6 +75,10 @@ static int genphy_config_advert(struct phy_device *phydev)
|
|||||||
adv |= ADVERTISE_PAUSE_CAP;
|
adv |= ADVERTISE_PAUSE_CAP;
|
||||||
if (advertise & ADVERTISED_Asym_Pause)
|
if (advertise & ADVERTISED_Asym_Pause)
|
||||||
adv |= ADVERTISE_PAUSE_ASYM;
|
adv |= ADVERTISE_PAUSE_ASYM;
|
||||||
|
if (advertise & ADVERTISED_1000baseX_Half)
|
||||||
|
adv |= ADVERTISE_1000XHALF;
|
||||||
|
if (advertise & ADVERTISED_1000baseX_Full)
|
||||||
|
adv |= ADVERTISE_1000XFULL;
|
||||||
|
|
||||||
if (adv != oldadv) {
|
if (adv != oldadv) {
|
||||||
err = phy_write(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE, adv);
|
err = phy_write(phydev, MDIO_DEVAD_NONE, MII_ADVERTISE, adv);
|
||||||
@ -288,6 +292,7 @@ int genphy_parse_link(struct phy_device *phydev)
|
|||||||
if (mii_reg & BMSR_ANEGCAPABLE) {
|
if (mii_reg & BMSR_ANEGCAPABLE) {
|
||||||
u32 lpa = 0;
|
u32 lpa = 0;
|
||||||
u32 gblpa = 0;
|
u32 gblpa = 0;
|
||||||
|
u32 estatus = 0;
|
||||||
|
|
||||||
/* Check for gigabit capability */
|
/* Check for gigabit capability */
|
||||||
if (mii_reg & BMSR_ERCAP) {
|
if (mii_reg & BMSR_ERCAP) {
|
||||||
@ -327,6 +332,18 @@ int genphy_parse_link(struct phy_device *phydev)
|
|||||||
|
|
||||||
} else if (lpa & LPA_10FULL)
|
} else if (lpa & LPA_10FULL)
|
||||||
phydev->duplex = DUPLEX_FULL;
|
phydev->duplex = DUPLEX_FULL;
|
||||||
|
|
||||||
|
if (mii_reg & BMSR_ESTATEN)
|
||||||
|
estatus = phy_read(phydev, MDIO_DEVAD_NONE,
|
||||||
|
MII_ESTATUS);
|
||||||
|
|
||||||
|
if (estatus & (ESTATUS_1000_XFULL | ESTATUS_1000_XHALF |
|
||||||
|
ESTATUS_1000_TFULL | ESTATUS_1000_THALF)) {
|
||||||
|
phydev->speed = SPEED_1000;
|
||||||
|
if (estatus & (ESTATUS_1000_XFULL | ESTATUS_1000_TFULL))
|
||||||
|
phydev->duplex = DUPLEX_FULL;
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
u32 bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
|
u32 bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
|
||||||
|
|
||||||
@ -384,6 +401,10 @@ int genphy_config(struct phy_device *phydev)
|
|||||||
features |= SUPPORTED_1000baseT_Full;
|
features |= SUPPORTED_1000baseT_Full;
|
||||||
if (val & ESTATUS_1000_THALF)
|
if (val & ESTATUS_1000_THALF)
|
||||||
features |= SUPPORTED_1000baseT_Half;
|
features |= SUPPORTED_1000baseT_Half;
|
||||||
|
if (val & ESTATUS_1000_XFULL)
|
||||||
|
features |= SUPPORTED_1000baseX_Full;
|
||||||
|
if (val & ESTATUS_1000_XHALF)
|
||||||
|
features |= SUPPORTED_1000baseX_Full;
|
||||||
}
|
}
|
||||||
|
|
||||||
phydev->supported = features;
|
phydev->supported = features;
|
||||||
|
@ -580,6 +580,8 @@ enum ethtool_sfeatures_retval_bits {
|
|||||||
#define SUPPORTED_10000baseKX4_Full (1 << 18)
|
#define SUPPORTED_10000baseKX4_Full (1 << 18)
|
||||||
#define SUPPORTED_10000baseKR_Full (1 << 19)
|
#define SUPPORTED_10000baseKR_Full (1 << 19)
|
||||||
#define SUPPORTED_10000baseR_FEC (1 << 20)
|
#define SUPPORTED_10000baseR_FEC (1 << 20)
|
||||||
|
#define SUPPORTED_1000baseX_Half (1 << 21)
|
||||||
|
#define SUPPORTED_1000baseX_Full (1 << 22)
|
||||||
|
|
||||||
/* Indicates what features are advertised by the interface. */
|
/* Indicates what features are advertised by the interface. */
|
||||||
#define ADVERTISED_10baseT_Half (1 << 0)
|
#define ADVERTISED_10baseT_Half (1 << 0)
|
||||||
@ -603,6 +605,8 @@ enum ethtool_sfeatures_retval_bits {
|
|||||||
#define ADVERTISED_10000baseKX4_Full (1 << 18)
|
#define ADVERTISED_10000baseKX4_Full (1 << 18)
|
||||||
#define ADVERTISED_10000baseKR_Full (1 << 19)
|
#define ADVERTISED_10000baseKR_Full (1 << 19)
|
||||||
#define ADVERTISED_10000baseR_FEC (1 << 20)
|
#define ADVERTISED_10000baseR_FEC (1 << 20)
|
||||||
|
#define ADVERTISED_1000baseX_Half (1 << 21)
|
||||||
|
#define ADVERTISED_1000baseX_Full (1 << 22)
|
||||||
|
|
||||||
/* The following are all involved in forcing a particular link
|
/* The following are all involved in forcing a particular link
|
||||||
* mode for the device for setting things. When getting the
|
* mode for the device for setting things. When getting the
|
||||||
|
@ -115,6 +115,8 @@
|
|||||||
#define EXPANSION_MFAULTS 0x0010 /* Multiple faults detected */
|
#define EXPANSION_MFAULTS 0x0010 /* Multiple faults detected */
|
||||||
#define EXPANSION_RESV 0xffe0 /* Unused... */
|
#define EXPANSION_RESV 0xffe0 /* Unused... */
|
||||||
|
|
||||||
|
#define ESTATUS_1000_XFULL 0x8000 /* Can do 1000BX Full */
|
||||||
|
#define ESTATUS_1000_XHALF 0x4000 /* Can do 1000BX Half */
|
||||||
#define ESTATUS_1000_TFULL 0x2000 /* Can do 1000BT Full */
|
#define ESTATUS_1000_TFULL 0x2000 /* Can do 1000BT Full */
|
||||||
#define ESTATUS_1000_THALF 0x1000 /* Can do 1000BT Half */
|
#define ESTATUS_1000_THALF 0x1000 /* Can do 1000BT Half */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user