Skip to content

Commit 40cff8f

Browse files
lunndavem330
authored andcommitted
net: dsa: mv88e6xxx: Fix stats histogram mode
The statistics histogram mode was not being explicitly initialized on devices other than the 6390 family. Clearing the statistics then overwrote the default setting, setting the histogram to a reserved mode. Explicitly set the histogram mode for all devices. Change the statistics clear into a read/modify/write, and since it is now more complex, move it into global1.c. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent c311db9 commit 40cff8f

File tree

3 files changed

+58
-13
lines changed

3 files changed

+58
-13
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2004,19 +2004,7 @@ static int mv88e6xxx_g1_setup(struct mv88e6xxx_chip *chip)
20042004
if (err)
20052005
return err;
20062006

2007-
/* Clear the statistics counters for all ports */
2008-
err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_STATS_OP,
2009-
MV88E6XXX_G1_STATS_OP_BUSY |
2010-
MV88E6XXX_G1_STATS_OP_FLUSH_ALL);
2011-
if (err)
2012-
return err;
2013-
2014-
/* Wait for the flush to complete. */
2015-
err = mv88e6xxx_g1_stats_wait(chip);
2016-
if (err)
2017-
return err;
2018-
2019-
return 0;
2007+
return mv88e6xxx_g1_stats_clear(chip);
20202008
}
20212009

20222010
static int mv88e6xxx_setup(struct dsa_switch *ds)
@@ -2299,6 +2287,7 @@ static const struct mv88e6xxx_ops mv88e6085_ops = {
22992287
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
23002288
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
23012289
.stats_snapshot = mv88e6xxx_g1_stats_snapshot,
2290+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
23022291
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
23032292
.stats_get_strings = mv88e6095_stats_get_strings,
23042293
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2326,6 +2315,7 @@ static const struct mv88e6xxx_ops mv88e6095_ops = {
23262315
.port_set_egress_floods = mv88e6185_port_set_egress_floods,
23272316
.port_set_upstream_port = mv88e6095_port_set_upstream_port,
23282317
.stats_snapshot = mv88e6xxx_g1_stats_snapshot,
2318+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
23292319
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
23302320
.stats_get_strings = mv88e6095_stats_get_strings,
23312321
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2356,6 +2346,7 @@ static const struct mv88e6xxx_ops mv88e6097_ops = {
23562346
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
23572347
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
23582348
.stats_snapshot = mv88e6xxx_g1_stats_snapshot,
2349+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
23592350
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
23602351
.stats_get_strings = mv88e6095_stats_get_strings,
23612352
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2383,6 +2374,7 @@ static const struct mv88e6xxx_ops mv88e6123_ops = {
23832374
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
23842375
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
23852376
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2377+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
23862378
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
23872379
.stats_get_strings = mv88e6095_stats_get_strings,
23882380
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2413,6 +2405,7 @@ static const struct mv88e6xxx_ops mv88e6131_ops = {
24132405
.port_egress_rate_limiting = mv88e6097_port_egress_rate_limiting,
24142406
.port_pause_limit = mv88e6097_port_pause_limit,
24152407
.stats_snapshot = mv88e6xxx_g1_stats_snapshot,
2408+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
24162409
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
24172410
.stats_get_strings = mv88e6095_stats_get_strings,
24182411
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2449,6 +2442,7 @@ static const struct mv88e6xxx_ops mv88e6141_ops = {
24492442
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
24502443
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
24512444
.stats_snapshot = mv88e6390_g1_stats_snapshot,
2445+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
24522446
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
24532447
.stats_get_strings = mv88e6320_stats_get_strings,
24542448
.stats_get_stats = mv88e6390_stats_get_stats,
@@ -2481,6 +2475,7 @@ static const struct mv88e6xxx_ops mv88e6161_ops = {
24812475
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
24822476
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
24832477
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2478+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
24842479
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
24852480
.stats_get_strings = mv88e6095_stats_get_strings,
24862481
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2506,6 +2501,7 @@ static const struct mv88e6xxx_ops mv88e6165_ops = {
25062501
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
25072502
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
25082503
.stats_snapshot = mv88e6xxx_g1_stats_snapshot,
2504+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
25092505
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
25102506
.stats_get_strings = mv88e6095_stats_get_strings,
25112507
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2539,6 +2535,7 @@ static const struct mv88e6xxx_ops mv88e6171_ops = {
25392535
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
25402536
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
25412537
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2538+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
25422539
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
25432540
.stats_get_strings = mv88e6095_stats_get_strings,
25442541
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2574,6 +2571,7 @@ static const struct mv88e6xxx_ops mv88e6172_ops = {
25742571
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
25752572
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
25762573
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2574+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
25772575
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
25782576
.stats_get_strings = mv88e6095_stats_get_strings,
25792577
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2608,6 +2606,7 @@ static const struct mv88e6xxx_ops mv88e6175_ops = {
26082606
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
26092607
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
26102608
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2609+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
26112610
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
26122611
.stats_get_strings = mv88e6095_stats_get_strings,
26132612
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2643,6 +2642,7 @@ static const struct mv88e6xxx_ops mv88e6176_ops = {
26432642
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
26442643
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
26452644
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2645+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
26462646
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
26472647
.stats_get_strings = mv88e6095_stats_get_strings,
26482648
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2670,6 +2670,7 @@ static const struct mv88e6xxx_ops mv88e6185_ops = {
26702670
.port_egress_rate_limiting = mv88e6095_port_egress_rate_limiting,
26712671
.port_set_upstream_port = mv88e6095_port_set_upstream_port,
26722672
.stats_snapshot = mv88e6xxx_g1_stats_snapshot,
2673+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
26732674
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
26742675
.stats_get_strings = mv88e6095_stats_get_strings,
26752676
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2811,6 +2812,7 @@ static const struct mv88e6xxx_ops mv88e6240_ops = {
28112812
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
28122813
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
28132814
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2815+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
28142816
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
28152817
.stats_get_strings = mv88e6095_stats_get_strings,
28162818
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -2882,6 +2884,7 @@ static const struct mv88e6xxx_ops mv88e6320_ops = {
28822884
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
28832885
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
28842886
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2887+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
28852888
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
28862889
.stats_get_strings = mv88e6320_stats_get_strings,
28872890
.stats_get_stats = mv88e6320_stats_get_stats,
@@ -2915,6 +2918,7 @@ static const struct mv88e6xxx_ops mv88e6321_ops = {
29152918
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
29162919
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
29172920
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2921+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
29182922
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
29192923
.stats_get_strings = mv88e6320_stats_get_strings,
29202924
.stats_get_stats = mv88e6320_stats_get_stats,
@@ -2947,6 +2951,7 @@ static const struct mv88e6xxx_ops mv88e6341_ops = {
29472951
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
29482952
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
29492953
.stats_snapshot = mv88e6390_g1_stats_snapshot,
2954+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
29502955
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
29512956
.stats_get_strings = mv88e6320_stats_get_strings,
29522957
.stats_get_stats = mv88e6390_stats_get_stats,
@@ -2980,6 +2985,7 @@ static const struct mv88e6xxx_ops mv88e6350_ops = {
29802985
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
29812986
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
29822987
.stats_snapshot = mv88e6320_g1_stats_snapshot,
2988+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
29832989
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
29842990
.stats_get_strings = mv88e6095_stats_get_strings,
29852991
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -3013,6 +3019,7 @@ static const struct mv88e6xxx_ops mv88e6351_ops = {
30133019
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
30143020
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
30153021
.stats_snapshot = mv88e6320_g1_stats_snapshot,
3022+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
30163023
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
30173024
.stats_get_strings = mv88e6095_stats_get_strings,
30183025
.stats_get_stats = mv88e6095_stats_get_stats,
@@ -3048,6 +3055,7 @@ static const struct mv88e6xxx_ops mv88e6352_ops = {
30483055
.port_disable_learn_limit = mv88e6xxx_port_disable_learn_limit,
30493056
.port_disable_pri_override = mv88e6xxx_port_disable_pri_override,
30503057
.stats_snapshot = mv88e6320_g1_stats_snapshot,
3058+
.stats_set_histogram = mv88e6095_g1_stats_set_histogram,
30513059
.stats_get_sset_count = mv88e6095_stats_get_sset_count,
30523060
.stats_get_strings = mv88e6095_stats_get_strings,
30533061
.stats_get_stats = mv88e6095_stats_get_stats,

drivers/net/dsa/mv88e6xxx/global1.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,22 @@ int mv88e6xxx_g1_stats_wait(struct mv88e6xxx_chip *chip)
374374
MV88E6XXX_G1_STATS_OP_BUSY);
375375
}
376376

377+
int mv88e6095_g1_stats_set_histogram(struct mv88e6xxx_chip *chip)
378+
{
379+
u16 val;
380+
int err;
381+
382+
err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_STATS_OP, &val);
383+
if (err)
384+
return err;
385+
386+
val |= MV88E6XXX_G1_STATS_OP_HIST_RX_TX;
387+
388+
err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_STATS_OP, val);
389+
390+
return err;
391+
}
392+
377393
int mv88e6xxx_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port)
378394
{
379395
int err;
@@ -444,3 +460,22 @@ void mv88e6xxx_g1_stats_read(struct mv88e6xxx_chip *chip, int stat, u32 *val)
444460

445461
*val = value | reg;
446462
}
463+
464+
int mv88e6xxx_g1_stats_clear(struct mv88e6xxx_chip *chip)
465+
{
466+
int err;
467+
u16 val;
468+
469+
err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_STATS_OP, &val);
470+
if (err)
471+
return err;
472+
473+
val |= MV88E6XXX_G1_STATS_OP_BUSY | MV88E6XXX_G1_STATS_OP_FLUSH_ALL;
474+
475+
err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_STATS_OP, val);
476+
if (err)
477+
return err;
478+
479+
/* Wait for the flush to complete. */
480+
return mv88e6xxx_g1_stats_wait(chip);
481+
}

drivers/net/dsa/mv88e6xxx/global1.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,10 @@ int mv88e6xxx_g1_stats_wait(struct mv88e6xxx_chip *chip);
235235
int mv88e6xxx_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port);
236236
int mv88e6320_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port);
237237
int mv88e6390_g1_stats_snapshot(struct mv88e6xxx_chip *chip, int port);
238+
int mv88e6095_g1_stats_set_histogram(struct mv88e6xxx_chip *chip);
238239
int mv88e6390_g1_stats_set_histogram(struct mv88e6xxx_chip *chip);
239240
void mv88e6xxx_g1_stats_read(struct mv88e6xxx_chip *chip, int stat, u32 *val);
241+
int mv88e6xxx_g1_stats_clear(struct mv88e6xxx_chip *chip);
240242
int mv88e6095_g1_set_egress_port(struct mv88e6xxx_chip *chip, int port);
241243
int mv88e6390_g1_set_egress_port(struct mv88e6xxx_chip *chip, int port);
242244
int mv88e6095_g1_set_cpu_port(struct mv88e6xxx_chip *chip, int port);

0 commit comments

Comments
 (0)