Skip to content

Commit 473960a

Browse files
Ivan Bornyakovdavem330
authored andcommitted
net: phy: marvell-88x2222: move read_status after config_aneg
No functional changes, just move read link status routines below autonegotiation configuration to make future functional changes more distinct. Signed-off-by: Ivan Bornyakov <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 5858147 commit 473960a

File tree

1 file changed

+98
-98
lines changed

1 file changed

+98
-98
lines changed

drivers/net/phy/marvell-88x2222.c

Lines changed: 98 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -86,104 +86,6 @@ static int mv2222_soft_reset(struct phy_device *phydev)
8686
5000, 1000000, true);
8787
}
8888

89-
/* Returns negative on error, 0 if link is down, 1 if link is up */
90-
static int mv2222_read_status_10g(struct phy_device *phydev)
91-
{
92-
int val, link = 0;
93-
94-
val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_STAT1);
95-
if (val < 0)
96-
return val;
97-
98-
if (val & MDIO_STAT1_LSTATUS) {
99-
link = 1;
100-
101-
/* 10GBASE-R do not support auto-negotiation */
102-
phydev->autoneg = AUTONEG_DISABLE;
103-
phydev->speed = SPEED_10000;
104-
phydev->duplex = DUPLEX_FULL;
105-
}
106-
107-
return link;
108-
}
109-
110-
/* Returns negative on error, 0 if link is down, 1 if link is up */
111-
static int mv2222_read_status_1g(struct phy_device *phydev)
112-
{
113-
int val, link = 0;
114-
115-
val = phy_read_mmd(phydev, MDIO_MMD_PCS, MV_1GBX_STAT);
116-
if (val < 0)
117-
return val;
118-
119-
if (!(val & BMSR_LSTATUS) ||
120-
(phydev->autoneg == AUTONEG_ENABLE &&
121-
!(val & BMSR_ANEGCOMPLETE)))
122-
return 0;
123-
124-
link = 1;
125-
126-
val = phy_read_mmd(phydev, MDIO_MMD_PCS, MV_1GBX_PHY_STAT);
127-
if (val < 0)
128-
return val;
129-
130-
if (val & MV_1GBX_PHY_STAT_AN_RESOLVED) {
131-
if (val & MV_1GBX_PHY_STAT_DUPLEX)
132-
phydev->duplex = DUPLEX_FULL;
133-
else
134-
phydev->duplex = DUPLEX_HALF;
135-
136-
if (val & MV_1GBX_PHY_STAT_SPEED1000)
137-
phydev->speed = SPEED_1000;
138-
else if (val & MV_1GBX_PHY_STAT_SPEED100)
139-
phydev->speed = SPEED_100;
140-
else
141-
phydev->speed = SPEED_10;
142-
}
143-
144-
return link;
145-
}
146-
147-
static bool mv2222_link_is_operational(struct phy_device *phydev)
148-
{
149-
struct mv2222_data *priv = phydev->priv;
150-
int val;
151-
152-
val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MV_RX_SIGNAL_DETECT);
153-
if (val < 0 || !(val & MV_RX_SIGNAL_DETECT_GLOBAL))
154-
return false;
155-
156-
if (phydev->sfp_bus && !priv->sfp_link)
157-
return false;
158-
159-
return true;
160-
}
161-
162-
static int mv2222_read_status(struct phy_device *phydev)
163-
{
164-
struct mv2222_data *priv = phydev->priv;
165-
int link;
166-
167-
phydev->link = 0;
168-
phydev->speed = SPEED_UNKNOWN;
169-
phydev->duplex = DUPLEX_UNKNOWN;
170-
171-
if (!mv2222_link_is_operational(phydev))
172-
return 0;
173-
174-
if (priv->line_interface == PHY_INTERFACE_MODE_10GBASER)
175-
link = mv2222_read_status_10g(phydev);
176-
else
177-
link = mv2222_read_status_1g(phydev);
178-
179-
if (link < 0)
180-
return link;
181-
182-
phydev->link = link;
183-
184-
return 0;
185-
}
186-
18789
static int mv2222_disable_aneg(struct phy_device *phydev)
18890
{
18991
int ret = phy_clear_bits_mmd(phydev, MDIO_MMD_PCS, MV_1GBX_CTRL,
@@ -386,6 +288,104 @@ static int mv2222_aneg_done(struct phy_device *phydev)
386288
return (ret & BMSR_ANEGCOMPLETE);
387289
}
388290

291+
/* Returns negative on error, 0 if link is down, 1 if link is up */
292+
static int mv2222_read_status_10g(struct phy_device *phydev)
293+
{
294+
int val, link = 0;
295+
296+
val = phy_read_mmd(phydev, MDIO_MMD_PCS, MDIO_STAT1);
297+
if (val < 0)
298+
return val;
299+
300+
if (val & MDIO_STAT1_LSTATUS) {
301+
link = 1;
302+
303+
/* 10GBASE-R do not support auto-negotiation */
304+
phydev->autoneg = AUTONEG_DISABLE;
305+
phydev->speed = SPEED_10000;
306+
phydev->duplex = DUPLEX_FULL;
307+
}
308+
309+
return link;
310+
}
311+
312+
/* Returns negative on error, 0 if link is down, 1 if link is up */
313+
static int mv2222_read_status_1g(struct phy_device *phydev)
314+
{
315+
int val, link = 0;
316+
317+
val = phy_read_mmd(phydev, MDIO_MMD_PCS, MV_1GBX_STAT);
318+
if (val < 0)
319+
return val;
320+
321+
if (!(val & BMSR_LSTATUS) ||
322+
(phydev->autoneg == AUTONEG_ENABLE &&
323+
!(val & BMSR_ANEGCOMPLETE)))
324+
return 0;
325+
326+
link = 1;
327+
328+
val = phy_read_mmd(phydev, MDIO_MMD_PCS, MV_1GBX_PHY_STAT);
329+
if (val < 0)
330+
return val;
331+
332+
if (val & MV_1GBX_PHY_STAT_AN_RESOLVED) {
333+
if (val & MV_1GBX_PHY_STAT_DUPLEX)
334+
phydev->duplex = DUPLEX_FULL;
335+
else
336+
phydev->duplex = DUPLEX_HALF;
337+
338+
if (val & MV_1GBX_PHY_STAT_SPEED1000)
339+
phydev->speed = SPEED_1000;
340+
else if (val & MV_1GBX_PHY_STAT_SPEED100)
341+
phydev->speed = SPEED_100;
342+
else
343+
phydev->speed = SPEED_10;
344+
}
345+
346+
return link;
347+
}
348+
349+
static bool mv2222_link_is_operational(struct phy_device *phydev)
350+
{
351+
struct mv2222_data *priv = phydev->priv;
352+
int val;
353+
354+
val = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MV_RX_SIGNAL_DETECT);
355+
if (val < 0 || !(val & MV_RX_SIGNAL_DETECT_GLOBAL))
356+
return false;
357+
358+
if (phydev->sfp_bus && !priv->sfp_link)
359+
return false;
360+
361+
return true;
362+
}
363+
364+
static int mv2222_read_status(struct phy_device *phydev)
365+
{
366+
struct mv2222_data *priv = phydev->priv;
367+
int link;
368+
369+
phydev->link = 0;
370+
phydev->speed = SPEED_UNKNOWN;
371+
phydev->duplex = DUPLEX_UNKNOWN;
372+
373+
if (!mv2222_link_is_operational(phydev))
374+
return 0;
375+
376+
if (priv->line_interface == PHY_INTERFACE_MODE_10GBASER)
377+
link = mv2222_read_status_10g(phydev);
378+
else
379+
link = mv2222_read_status_1g(phydev);
380+
381+
if (link < 0)
382+
return link;
383+
384+
phydev->link = link;
385+
386+
return 0;
387+
}
388+
389389
static int mv2222_resume(struct phy_device *phydev)
390390
{
391391
return mv2222_tx_enable(phydev);

0 commit comments

Comments
 (0)