net: phy: improve auto-neg emulation in swphy
authorHeiner Kallweit <hkallweit1@gmail.com>
Sun, 24 Feb 2019 16:41:47 +0000 (17:41 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 25 Feb 2019 06:28:15 +0000 (22:28 -0800)
Auto-neg emulation currently doesn't set bit BMCR_ANENABLE in BMCR,
add this. Users will ignore speed and duplex settings in BMCR because
we're emulating auto-neg, therefore we can remove related code.
See also following discussion [0].

[0] https://marc.info/?t=155041784900002&r=1&w=2

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Tested-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/swphy.c

index b9743569e431046e02f0a4d761279ace9e864044..dad22481d9c1d77f6990b0365ab47c8209d646cd 100644 (file)
@@ -19,7 +19,6 @@
 #define MII_REGS_NUM 29
 
 struct swmii_regs {
-       u16 bmcr;
        u16 bmsr;
        u16 lpa;
        u16 lpagb;
@@ -40,16 +39,13 @@ enum {
  */
 static const struct swmii_regs speed[] = {
        [SWMII_SPEED_10] = {
-               .bmcr  = BMCR_FULLDPLX,
                .lpa   = LPA_10FULL | LPA_10HALF,
        },
        [SWMII_SPEED_100] = {
-               .bmcr  = BMCR_FULLDPLX | BMCR_SPEED100,
                .bmsr  = BMSR_100FULL | BMSR_100HALF,
                .lpa   = LPA_100FULL | LPA_100HALF,
        },
        [SWMII_SPEED_1000] = {
-               .bmcr  = BMCR_FULLDPLX | BMCR_SPEED1000,
                .bmsr  = BMSR_ESTATEN,
                .lpagb = LPA_1000FULL | LPA_1000HALF,
        },
@@ -57,13 +53,11 @@ static const struct swmii_regs speed[] = {
 
 static const struct swmii_regs duplex[] = {
        [SWMII_DUPLEX_HALF] = {
-               .bmcr  = ~BMCR_FULLDPLX,
                .bmsr  = BMSR_ESTATEN | BMSR_100HALF,
                .lpa   = LPA_10HALF | LPA_100HALF,
                .lpagb = LPA_1000HALF,
        },
        [SWMII_DUPLEX_FULL] = {
-               .bmcr  = ~0,
                .bmsr  = BMSR_ESTATEN | BMSR_100FULL,
                .lpa   = LPA_10FULL | LPA_100FULL,
                .lpagb = LPA_1000FULL,
@@ -118,7 +112,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state)
 {
        int speed_index, duplex_index;
        u16 bmsr = BMSR_ANEGCAPABLE;
-       u16 bmcr = 0;
        u16 lpagb = 0;
        u16 lpa = 0;
 
@@ -136,7 +129,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state)
        if (state->link) {
                bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
 
-               bmcr  |= speed[speed_index].bmcr  & duplex[duplex_index].bmcr;
                lpa   |= speed[speed_index].lpa   & duplex[duplex_index].lpa;
                lpagb |= speed[speed_index].lpagb & duplex[duplex_index].lpagb;
 
@@ -149,7 +141,7 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state)
 
        switch (reg) {
        case MII_BMCR:
-               return bmcr;
+               return BMCR_ANENABLE;
        case MII_BMSR:
                return bmsr;
        case MII_PHYSID1: