Skip to content

Commit 2fda45f

Browse files
elkablodavem330
authored andcommitted
net: dsa: mv88e6xxx: wrap .set_egress_port method
There are two implementations of the .set_egress_port method, and both of them, if successful, set chip->*gress_dest_port variable. To avoid code repetition, wrap this method into mv88e6xxx_set_egress_port. Signed-off-by: Marek Behún <[email protected]> Reviewed-by: Pavana Sharma <[email protected]> Reviewed-by: Vladimir Oltean <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 193c5b2 commit 2fda45f

File tree

2 files changed

+33
-35
lines changed

2 files changed

+33
-35
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,6 +2550,27 @@ static int mv88e6xxx_serdes_power(struct mv88e6xxx_chip *chip, int port,
25502550
return err;
25512551
}
25522552

2553+
static int mv88e6xxx_set_egress_port(struct mv88e6xxx_chip *chip,
2554+
enum mv88e6xxx_egress_direction direction,
2555+
int port)
2556+
{
2557+
int err;
2558+
2559+
if (!chip->info->ops->set_egress_port)
2560+
return -EOPNOTSUPP;
2561+
2562+
err = chip->info->ops->set_egress_port(chip, direction, port);
2563+
if (err)
2564+
return err;
2565+
2566+
if (direction == MV88E6XXX_EGRESS_DIR_INGRESS)
2567+
chip->ingress_dest_port = port;
2568+
else
2569+
chip->egress_dest_port = port;
2570+
2571+
return 0;
2572+
}
2573+
25532574
static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port)
25542575
{
25552576
struct dsa_switch *ds = chip->ds;
@@ -2572,19 +2593,17 @@ static int mv88e6xxx_setup_upstream_port(struct mv88e6xxx_chip *chip, int port)
25722593
return err;
25732594
}
25742595

2575-
if (chip->info->ops->set_egress_port) {
2576-
err = chip->info->ops->set_egress_port(chip,
2596+
err = mv88e6xxx_set_egress_port(chip,
25772597
MV88E6XXX_EGRESS_DIR_INGRESS,
25782598
upstream_port);
2579-
if (err)
2580-
return err;
2599+
if (err && err != -EOPNOTSUPP)
2600+
return err;
25812601

2582-
err = chip->info->ops->set_egress_port(chip,
2602+
err = mv88e6xxx_set_egress_port(chip,
25832603
MV88E6XXX_EGRESS_DIR_EGRESS,
25842604
upstream_port);
2585-
if (err)
2586-
return err;
2587-
}
2605+
if (err && err != -EOPNOTSUPP)
2606+
return err;
25882607
}
25892608

25902609
return 0;
@@ -5338,9 +5357,6 @@ static int mv88e6xxx_port_mirror_add(struct dsa_switch *ds, int port,
53385357
int i;
53395358
int err;
53405359

5341-
if (!chip->info->ops->set_egress_port)
5342-
return -EOPNOTSUPP;
5343-
53445360
mutex_lock(&chip->reg_lock);
53455361
if ((ingress ? chip->ingress_dest_port : chip->egress_dest_port) !=
53465362
mirror->to_local_port) {
@@ -5355,9 +5371,8 @@ static int mv88e6xxx_port_mirror_add(struct dsa_switch *ds, int port,
53555371
goto out;
53565372
}
53575373

5358-
err = chip->info->ops->set_egress_port(chip,
5359-
direction,
5360-
mirror->to_local_port);
5374+
err = mv88e6xxx_set_egress_port(chip, direction,
5375+
mirror->to_local_port);
53615376
if (err)
53625377
goto out;
53635378
}
@@ -5390,10 +5405,8 @@ static void mv88e6xxx_port_mirror_del(struct dsa_switch *ds, int port,
53905405

53915406
/* Reset egress port when no other mirror is active */
53925407
if (!other_mirrors) {
5393-
if (chip->info->ops->set_egress_port(chip,
5394-
direction,
5395-
dsa_upstream_port(ds,
5396-
port)))
5408+
if (mv88e6xxx_set_egress_port(chip, direction,
5409+
dsa_upstream_port(ds, port)))
53975410
dev_err(ds->dev, "failed to set egress port\n");
53985411
}
53995412

drivers/net/dsa/mv88e6xxx/global1.c

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,6 @@ int mv88e6095_g1_set_egress_port(struct mv88e6xxx_chip *chip,
315315
enum mv88e6xxx_egress_direction direction,
316316
int port)
317317
{
318-
int *dest_port_chip;
319318
u16 reg;
320319
int err;
321320

@@ -325,13 +324,11 @@ int mv88e6095_g1_set_egress_port(struct mv88e6xxx_chip *chip,
325324

326325
switch (direction) {
327326
case MV88E6XXX_EGRESS_DIR_INGRESS:
328-
dest_port_chip = &chip->ingress_dest_port;
329327
reg &= ~MV88E6185_G1_MONITOR_CTL_INGRESS_DEST_MASK;
330328
reg |= port <<
331329
__bf_shf(MV88E6185_G1_MONITOR_CTL_INGRESS_DEST_MASK);
332330
break;
333331
case MV88E6XXX_EGRESS_DIR_EGRESS:
334-
dest_port_chip = &chip->egress_dest_port;
335332
reg &= ~MV88E6185_G1_MONITOR_CTL_EGRESS_DEST_MASK;
336333
reg |= port <<
337334
__bf_shf(MV88E6185_G1_MONITOR_CTL_EGRESS_DEST_MASK);
@@ -340,11 +337,7 @@ int mv88e6095_g1_set_egress_port(struct mv88e6xxx_chip *chip,
340337
return -EINVAL;
341338
}
342339

343-
err = mv88e6xxx_g1_write(chip, MV88E6185_G1_MONITOR_CTL, reg);
344-
if (!err)
345-
*dest_port_chip = port;
346-
347-
return err;
340+
return mv88e6xxx_g1_write(chip, MV88E6185_G1_MONITOR_CTL, reg);
348341
}
349342

350343
/* Older generations also call this the ARP destination. It has been
@@ -380,28 +373,20 @@ int mv88e6390_g1_set_egress_port(struct mv88e6xxx_chip *chip,
380373
enum mv88e6xxx_egress_direction direction,
381374
int port)
382375
{
383-
int *dest_port_chip;
384376
u16 ptr;
385-
int err;
386377

387378
switch (direction) {
388379
case MV88E6XXX_EGRESS_DIR_INGRESS:
389-
dest_port_chip = &chip->ingress_dest_port;
390380
ptr = MV88E6390_G1_MONITOR_MGMT_CTL_PTR_INGRESS_DEST;
391381
break;
392382
case MV88E6XXX_EGRESS_DIR_EGRESS:
393-
dest_port_chip = &chip->egress_dest_port;
394383
ptr = MV88E6390_G1_MONITOR_MGMT_CTL_PTR_EGRESS_DEST;
395384
break;
396385
default:
397386
return -EINVAL;
398387
}
399388

400-
err = mv88e6390_g1_monitor_write(chip, ptr, port);
401-
if (!err)
402-
*dest_port_chip = port;
403-
404-
return err;
389+
return mv88e6390_g1_monitor_write(chip, ptr, port);
405390
}
406391

407392
int mv88e6390_g1_set_cpu_port(struct mv88e6xxx_chip *chip, int port)

0 commit comments

Comments
 (0)