diff options
author | Heiner Kallweit <hkallweit1@gmail.com> | 2019-02-24 11:41:47 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-02-25 01:28:15 -0500 |
commit | 726097d6d6d8e928c62f459305d74856f7cab155 (patch) | |
tree | 23b25e830d552589391e6423cc50e6f1da5da544 | |
parent | e8b47b53a172e74dd9907eb7810f02a1d09fb29b (diff) |
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=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>
-rw-r--r-- | drivers/net/phy/swphy.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/drivers/net/phy/swphy.c b/drivers/net/phy/swphy.c index b9743569e431..dad22481d9c1 100644 --- a/drivers/net/phy/swphy.c +++ b/drivers/net/phy/swphy.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #define MII_REGS_NUM 29 | 19 | #define MII_REGS_NUM 29 |
20 | 20 | ||
21 | struct swmii_regs { | 21 | struct swmii_regs { |
22 | u16 bmcr; | ||
23 | u16 bmsr; | 22 | u16 bmsr; |
24 | u16 lpa; | 23 | u16 lpa; |
25 | u16 lpagb; | 24 | u16 lpagb; |
@@ -40,16 +39,13 @@ enum { | |||
40 | */ | 39 | */ |
41 | static const struct swmii_regs speed[] = { | 40 | static const struct swmii_regs speed[] = { |
42 | [SWMII_SPEED_10] = { | 41 | [SWMII_SPEED_10] = { |
43 | .bmcr = BMCR_FULLDPLX, | ||
44 | .lpa = LPA_10FULL | LPA_10HALF, | 42 | .lpa = LPA_10FULL | LPA_10HALF, |
45 | }, | 43 | }, |
46 | [SWMII_SPEED_100] = { | 44 | [SWMII_SPEED_100] = { |
47 | .bmcr = BMCR_FULLDPLX | BMCR_SPEED100, | ||
48 | .bmsr = BMSR_100FULL | BMSR_100HALF, | 45 | .bmsr = BMSR_100FULL | BMSR_100HALF, |
49 | .lpa = LPA_100FULL | LPA_100HALF, | 46 | .lpa = LPA_100FULL | LPA_100HALF, |
50 | }, | 47 | }, |
51 | [SWMII_SPEED_1000] = { | 48 | [SWMII_SPEED_1000] = { |
52 | .bmcr = BMCR_FULLDPLX | BMCR_SPEED1000, | ||
53 | .bmsr = BMSR_ESTATEN, | 49 | .bmsr = BMSR_ESTATEN, |
54 | .lpagb = LPA_1000FULL | LPA_1000HALF, | 50 | .lpagb = LPA_1000FULL | LPA_1000HALF, |
55 | }, | 51 | }, |
@@ -57,13 +53,11 @@ static const struct swmii_regs speed[] = { | |||
57 | 53 | ||
58 | static const struct swmii_regs duplex[] = { | 54 | static const struct swmii_regs duplex[] = { |
59 | [SWMII_DUPLEX_HALF] = { | 55 | [SWMII_DUPLEX_HALF] = { |
60 | .bmcr = ~BMCR_FULLDPLX, | ||
61 | .bmsr = BMSR_ESTATEN | BMSR_100HALF, | 56 | .bmsr = BMSR_ESTATEN | BMSR_100HALF, |
62 | .lpa = LPA_10HALF | LPA_100HALF, | 57 | .lpa = LPA_10HALF | LPA_100HALF, |
63 | .lpagb = LPA_1000HALF, | 58 | .lpagb = LPA_1000HALF, |
64 | }, | 59 | }, |
65 | [SWMII_DUPLEX_FULL] = { | 60 | [SWMII_DUPLEX_FULL] = { |
66 | .bmcr = ~0, | ||
67 | .bmsr = BMSR_ESTATEN | BMSR_100FULL, | 61 | .bmsr = BMSR_ESTATEN | BMSR_100FULL, |
68 | .lpa = LPA_10FULL | LPA_100FULL, | 62 | .lpa = LPA_10FULL | LPA_100FULL, |
69 | .lpagb = LPA_1000FULL, | 63 | .lpagb = LPA_1000FULL, |
@@ -118,7 +112,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state) | |||
118 | { | 112 | { |
119 | int speed_index, duplex_index; | 113 | int speed_index, duplex_index; |
120 | u16 bmsr = BMSR_ANEGCAPABLE; | 114 | u16 bmsr = BMSR_ANEGCAPABLE; |
121 | u16 bmcr = 0; | ||
122 | u16 lpagb = 0; | 115 | u16 lpagb = 0; |
123 | u16 lpa = 0; | 116 | u16 lpa = 0; |
124 | 117 | ||
@@ -136,7 +129,6 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state) | |||
136 | if (state->link) { | 129 | if (state->link) { |
137 | bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE; | 130 | bmsr |= BMSR_LSTATUS | BMSR_ANEGCOMPLETE; |
138 | 131 | ||
139 | bmcr |= speed[speed_index].bmcr & duplex[duplex_index].bmcr; | ||
140 | lpa |= speed[speed_index].lpa & duplex[duplex_index].lpa; | 132 | lpa |= speed[speed_index].lpa & duplex[duplex_index].lpa; |
141 | lpagb |= speed[speed_index].lpagb & duplex[duplex_index].lpagb; | 133 | lpagb |= speed[speed_index].lpagb & duplex[duplex_index].lpagb; |
142 | 134 | ||
@@ -149,7 +141,7 @@ int swphy_read_reg(int reg, const struct fixed_phy_status *state) | |||
149 | 141 | ||
150 | switch (reg) { | 142 | switch (reg) { |
151 | case MII_BMCR: | 143 | case MII_BMCR: |
152 | return bmcr; | 144 | return BMCR_ANENABLE; |
153 | case MII_BMSR: | 145 | case MII_BMSR: |
154 | return bmsr; | 146 | return bmsr; |
155 | case MII_PHYSID1: | 147 | case MII_PHYSID1: |