|
@@ -815,8 +815,7 @@ static void _mv88e6xxx_stats_read(struct mv88e6xxx_chip *chip,
|
|
|
*val = 0;
|
|
|
|
|
|
err = mv88e6xxx_g1_write(chip, GLOBAL_STATS_OP,
|
|
|
- GLOBAL_STATS_OP_READ_CAPTURED |
|
|
|
- GLOBAL_STATS_OP_HIST_RX_TX | stat);
|
|
|
+ GLOBAL_STATS_OP_READ_CAPTURED | stat);
|
|
|
if (err)
|
|
|
return;
|
|
|
|
|
@@ -901,7 +900,8 @@ static struct mv88e6xxx_hw_stat mv88e6xxx_hw_stats[] = {
|
|
|
|
|
|
static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
|
|
|
struct mv88e6xxx_hw_stat *s,
|
|
|
- int port)
|
|
|
+ int port, u16 bank1_select,
|
|
|
+ u16 histogram)
|
|
|
{
|
|
|
u32 low;
|
|
|
u32 high = 0;
|
|
@@ -924,10 +924,10 @@ static uint64_t _mv88e6xxx_get_ethtool_stat(struct mv88e6xxx_chip *chip,
|
|
|
}
|
|
|
break;
|
|
|
case STATS_TYPE_BANK1:
|
|
|
- reg = GLOBAL_STATS_OP_BANK_1;
|
|
|
+ reg = bank1_select;
|
|
|
/* fall through */
|
|
|
case STATS_TYPE_BANK0:
|
|
|
- reg |= s->reg;
|
|
|
+ reg |= s->reg | histogram;
|
|
|
_mv88e6xxx_stats_read(chip, reg, &low);
|
|
|
if (s->sizeof_stat == 8)
|
|
|
_mv88e6xxx_stats_read(chip, reg + 1, &high);
|
|
@@ -1012,7 +1012,8 @@ static int mv88e6xxx_get_sset_count(struct dsa_switch *ds)
|
|
|
}
|
|
|
|
|
|
static void mv88e6xxx_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
|
|
|
- uint64_t *data, int types)
|
|
|
+ uint64_t *data, int types,
|
|
|
+ u16 bank1_select, u16 histogram)
|
|
|
{
|
|
|
struct mv88e6xxx_hw_stat *stat;
|
|
|
int i, j;
|
|
@@ -1020,7 +1021,9 @@ static void mv88e6xxx_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
|
|
|
for (i = 0, j = 0; i < ARRAY_SIZE(mv88e6xxx_hw_stats); i++) {
|
|
|
stat = &mv88e6xxx_hw_stats[i];
|
|
|
if (stat->type & types) {
|
|
|
- data[j] = _mv88e6xxx_get_ethtool_stat(chip, stat, port);
|
|
|
+ data[j] = _mv88e6xxx_get_ethtool_stat(chip, stat, port,
|
|
|
+ bank1_select,
|
|
|
+ histogram);
|
|
|
j++;
|
|
|
}
|
|
|
}
|
|
@@ -1030,14 +1033,25 @@ static void mv88e6095_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
|
|
|
uint64_t *data)
|
|
|
{
|
|
|
return mv88e6xxx_stats_get_stats(chip, port, data,
|
|
|
- STATS_TYPE_BANK0 | STATS_TYPE_PORT);
|
|
|
+ STATS_TYPE_BANK0 | STATS_TYPE_PORT,
|
|
|
+ 0, GLOBAL_STATS_OP_HIST_RX_TX);
|
|
|
}
|
|
|
|
|
|
static void mv88e6320_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
|
|
|
uint64_t *data)
|
|
|
{
|
|
|
return mv88e6xxx_stats_get_stats(chip, port, data,
|
|
|
- STATS_TYPE_BANK0 | STATS_TYPE_BANK1);
|
|
|
+ STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
|
|
|
+ GLOBAL_STATS_OP_BANK_1_BIT_9,
|
|
|
+ GLOBAL_STATS_OP_HIST_RX_TX);
|
|
|
+}
|
|
|
+
|
|
|
+static void mv88e6390_stats_get_stats(struct mv88e6xxx_chip *chip, int port,
|
|
|
+ uint64_t *data)
|
|
|
+{
|
|
|
+ return mv88e6xxx_stats_get_stats(chip, port, data,
|
|
|
+ STATS_TYPE_BANK0 | STATS_TYPE_BANK1,
|
|
|
+ GLOBAL_STATS_OP_BANK_1_BIT_10, 0);
|
|
|
}
|
|
|
|
|
|
static void mv88e6xxx_get_stats(struct mv88e6xxx_chip *chip, int port,
|
|
@@ -3390,6 +3404,7 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
|
@@ -3405,6 +3420,7 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6191_ops = {
|
|
@@ -3420,6 +3436,7 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6240_ops = {
|
|
@@ -3452,6 +3469,7 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6320_ops = {
|
|
@@ -3546,6 +3564,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
|
@@ -3561,6 +3580,7 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_ops mv88e6391_ops = {
|
|
@@ -3576,6 +3596,7 @@ static const struct mv88e6xxx_ops mv88e6391_ops = {
|
|
|
.stats_set_histogram = mv88e6390_g1_stats_set_histogram,
|
|
|
.stats_get_sset_count = mv88e6320_stats_get_sset_count,
|
|
|
.stats_get_strings = mv88e6320_stats_get_strings,
|
|
|
+ .stats_get_stats = mv88e6390_stats_get_stats,
|
|
|
};
|
|
|
|
|
|
static const struct mv88e6xxx_info mv88e6xxx_table[] = {
|