Skip to content

Commit 348a46c

Browse files
fidanali16kuba-moo
authored andcommitted
mv88e6xxx: Refactor 6352's serdes functions
Changes: 1. Replace serdes check by mv88e6352_g2_scratch_port_has_serdes in mv88e6352_pcs_init function by mv88e6xxx_serdes_get_lane function making it more generic. 2. Replace serdes checks in mv88e6352_serdes_get_* functions with mv88e6xxx_serdes_get_lane making them more generic. 3. Add lane argument to mv88e6352_serdes_read so it can be reused later for 6321. Co-developed-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com> Signed-off-by: Thomas Eckerman <thomas.eckerman.ext@ericsson.com> Signed-off-by: Fidan Aliyeva <fidan.aliyeva.ext@ericsson.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20260528210310.1365858-3-fidan.aliyeva.ext@ericsson.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 1a79978 commit 348a46c

2 files changed

Lines changed: 33 additions & 30 deletions

File tree

drivers/net/dsa/mv88e6xxx/pcs-6352.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,17 +324,17 @@ static int mv88e6352_pcs_init(struct mv88e6xxx_chip *chip, int port)
324324
struct mii_bus *bus;
325325
struct device *dev;
326326
unsigned int irq;
327-
int err;
327+
int lane, err;
328328

329-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
330-
if (err <= 0)
331-
return err;
329+
lane = mv88e6xxx_serdes_get_lane(chip, port);
330+
if (lane < 0)
331+
return 0;
332332

333333
irq = mv88e6xxx_serdes_irq_mapping(chip, port);
334334
bus = mv88e6xxx_default_mdio_bus(chip);
335335
dev = chip->dev;
336336

337-
mpcs = marvell_c22_pcs_alloc(dev, bus, MV88E6352_ADDR_SERDES);
337+
mpcs = marvell_c22_pcs_alloc(dev, bus, lane);
338338
if (!mpcs)
339339
return -ENOMEM;
340340

drivers/net/dsa/mv88e6xxx/serdes.c

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
#include "port.h"
1818
#include "serdes.h"
1919

20-
static int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int reg,
21-
u16 *val)
20+
static int mv88e6352_serdes_read(struct mv88e6xxx_chip *chip, int lane,
21+
int reg, u16 *val)
2222
{
23-
return mv88e6xxx_phy_page_read(chip, MV88E6352_ADDR_SERDES,
23+
return mv88e6xxx_phy_page_read(chip, lane,
2424
MV88E6352_SERDES_PAGE_FIBER,
2525
reg, val);
2626
}
@@ -126,11 +126,11 @@ static struct mv88e6352_serdes_hw_stat mv88e6352_serdes_hw_stats[] = {
126126

127127
int mv88e6352_serdes_get_sset_count(struct mv88e6xxx_chip *chip, int port)
128128
{
129-
int err;
129+
int lane = -ENODEV;
130130

131-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
132-
if (err <= 0)
133-
return err;
131+
lane = mv88e6xxx_serdes_get_lane(chip, port);
132+
if (lane < 0)
133+
return 0;
134134

135135
return ARRAY_SIZE(mv88e6352_serdes_hw_stats);
136136
}
@@ -139,11 +139,12 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip, int port,
139139
uint8_t **data)
140140
{
141141
struct mv88e6352_serdes_hw_stat *stat;
142-
int err, i;
142+
int lane = -ENODEV;
143+
int i;
143144

144-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
145-
if (err <= 0)
146-
return err;
145+
lane = mv88e6xxx_serdes_get_lane(chip, port);
146+
if (lane < 0)
147+
return 0;
147148

148149
for (i = 0; i < ARRAY_SIZE(mv88e6352_serdes_hw_stats); i++) {
149150
stat = &mv88e6352_serdes_hw_stats[i];
@@ -152,14 +153,14 @@ int mv88e6352_serdes_get_strings(struct mv88e6xxx_chip *chip, int port,
152153
return ARRAY_SIZE(mv88e6352_serdes_hw_stats);
153154
}
154155

155-
static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
156+
static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip, int lane,
156157
struct mv88e6352_serdes_hw_stat *stat)
157158
{
158159
u64 val = 0;
159160
u16 reg;
160161
int err;
161162

162-
err = mv88e6352_serdes_read(chip, stat->reg, &reg);
163+
err = mv88e6352_serdes_read(chip, lane, stat->reg, &reg);
163164
if (err) {
164165
dev_err(chip->dev, "failed to read statistic\n");
165166
return 0;
@@ -168,7 +169,7 @@ static uint64_t mv88e6352_serdes_get_stat(struct mv88e6xxx_chip *chip,
168169
val = reg;
169170

170171
if (stat->sizeof_stat == 32) {
171-
err = mv88e6352_serdes_read(chip, stat->reg + 1, &reg);
172+
err = mv88e6352_serdes_read(chip, lane, stat->reg + 1, &reg);
172173
if (err) {
173174
dev_err(chip->dev, "failed to read statistic\n");
174175
return 0;
@@ -184,19 +185,20 @@ size_t mv88e6352_serdes_get_stats(struct mv88e6xxx_chip *chip, int port,
184185
{
185186
struct mv88e6xxx_port *mv88e6xxx_port = &chip->ports[port];
186187
struct mv88e6352_serdes_hw_stat *stat;
187-
int i, err;
188+
int lane = -ENODEV;
188189
u64 value;
190+
int i;
189191

190-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
191-
if (err <= 0)
192+
lane = mv88e6xxx_serdes_get_lane(chip, port);
193+
if (lane < 0)
192194
return 0;
193195

194196
BUILD_BUG_ON(ARRAY_SIZE(mv88e6352_serdes_hw_stats) >
195197
ARRAY_SIZE(mv88e6xxx_port->serdes_stats));
196198

197199
for (i = 0; i < ARRAY_SIZE(mv88e6352_serdes_hw_stats); i++) {
198200
stat = &mv88e6352_serdes_hw_stats[i];
199-
value = mv88e6352_serdes_get_stat(chip, stat);
201+
value = mv88e6352_serdes_get_stat(chip, lane, stat);
200202
mv88e6xxx_port->serdes_stats[i] += value;
201203
data[i] = mv88e6xxx_port->serdes_stats[i];
202204
}
@@ -211,28 +213,29 @@ unsigned int mv88e6352_serdes_irq_mapping(struct mv88e6xxx_chip *chip, int port)
211213

212214
int mv88e6352_serdes_get_regs_len(struct mv88e6xxx_chip *chip, int port)
213215
{
214-
int err;
216+
int lane = -ENODEV;
215217

216-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
217-
if (err <= 0)
218-
return err;
218+
lane = mv88e6xxx_serdes_get_lane(chip, port);
219+
if (lane < 0)
220+
return 0;
219221

220222
return 32 * sizeof(u16);
221223
}
222224

223225
void mv88e6352_serdes_get_regs(struct mv88e6xxx_chip *chip, int port, void *_p)
224226
{
227+
int lane = -ENODEV;
225228
u16 *p = _p;
226229
u16 reg;
227230
int err;
228231
int i;
229232

230-
err = mv88e6352_g2_scratch_port_has_serdes(chip, port);
231-
if (err <= 0)
233+
lane = mv88e6xxx_serdes_get_lane(chip, port);
234+
if (lane < 0)
232235
return;
233236

234237
for (i = 0 ; i < 32; i++) {
235-
err = mv88e6352_serdes_read(chip, i, &reg);
238+
err = mv88e6352_serdes_read(chip, lane, i, &reg);
236239
if (!err)
237240
p[i] = reg;
238241
}

0 commit comments

Comments
 (0)