Commit 726097d6 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by David S. Miller

net: phy: improve auto-neg emulation in swphy

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=2Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Tested-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e8b47b53
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#define MII_REGS_NUM 29 #define MII_REGS_NUM 29
struct swmii_regs { struct swmii_regs {
u16 bmcr;
u16 bmsr; u16 bmsr;
u16 lpa; u16 lpa;
u16 lpagb; u16 lpagb;
...@@ -40,16 +39,13 @@ enum { ...@@ -40,16 +39,13 @@ enum {
*/ */
static const struct swmii_regs speed[] = { static const struct swmii_regs speed[] = {
[SWMII_SPEED_10] = { [SWMII_SPEED_10] = {
.bmcr = BMCR_FULLDPLX,
.lpa = LPA_10FULL | LPA_10HALF, .lpa = LPA_10FULL | LPA_10HALF,
}, },
[SWMII_SPEED_100] = { [SWMII_SPEED_100] = {
.bmcr = BMCR_FULLDPLX | BMCR_SPEED100,
.bmsr = BMSR_100FULL | BMSR_100HALF, .bmsr = BMSR_100FULL | BMSR_100HALF,
.lpa = LPA_100FULL | LPA_100HALF, .lpa = LPA_100FULL | LPA_100HALF,
}, },
[SWMII_SPEED_1000] = { [SWMII_SPEED_1000] = {
.bmcr = BMCR_FULLDPLX | BMCR_SPEED1000,
.bmsr = BMSR_ESTATEN, .bmsr = BMSR_ESTATEN,
.lpagb = LPA_1000FULL | LPA_1000HALF, .lpagb = LPA_1000FULL | LPA_1000HALF,
}, },
...@@ -57,13 +53,11 @@ static const struct swmii_regs speed[] = { ...@@ -57,13 +53,11 @@ static const struct swmii_regs speed[] = {
static const struct swmii_regs duplex[] = { static const struct swmii_regs duplex[] = {
[SWMII_DUPLEX_HALF] = { [SWMII_DUPLEX_HALF] = {
.bmcr = ~BMCR_FULLDPLX,
.bmsr = BMSR_ESTATEN | BMSR_100HALF, .bmsr = BMSR_ESTATEN | BMSR_100HALF,
.lpa = LPA_10HALF | LPA_100HALF, .lpa = LPA_10HALF | LPA_100HALF,
.lpagb = LPA_1000HALF, .lpagb = LPA_1000HALF,
}, },
[SWMII_DUPLEX_FULL] = { [SWMII_DUPLEX_FULL] = {
.bmcr = ~0,
.bmsr = BMSR_ESTATEN | BMSR_100FULL, .bmsr = BMSR_ESTATEN | BMSR_100FULL,
.lpa = LPA_10FULL | LPA_100FULL, .lpa = LPA_10FULL | LPA_100FULL,
.lpagb = LPA_1000FULL, .lpagb = LPA_1000FULL,
...@@ -118,7 +112,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state) ...@@ -118,7 +112,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state)
{ {
int speed_index, duplex_index; int speed_index, duplex_index;
u16 bmsr = BMSR_ANEGCAPABLE; u16 bmsr = BMSR_ANEGCAPABLE;
u16 bmcr = 0;
u16 lpagb = 0; u16 lpagb = 0;
u16 lpa = 0; u16 lpa = 0;
...@@ -136,7 +129,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state) ...@@ -136,7 +129,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state)
if (state->link) { if (state->link) {
bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE; bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE;
bmcr |= speed[speed_index].bmcr & duplex[duplex_index].bmcr;
lpa |= speed[speed_index].lpa & duplex[duplex_index].lpa; lpa |= speed[speed_index].lpa & duplex[duplex_index].lpa;
lpagb |= speed[speed_index].lpagb & duplex[duplex_index].lpagb; 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) ...@@ -149,7 +141,7 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state)
switch (reg) { switch (reg) {
case MII_BMCR: case MII_BMCR:
return bmcr; return BMCR_ANENABLE;
case MII_BMSR: case MII_BMSR:
return bmsr; return bmsr;
case MII_PHYSID1: case MII_PHYSID1:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment