From: Andrew Lunn <andrew@lunn.ch>
To: David Miller <davem@davemloft.net>
Cc: netdev <netdev@vger.kernel.org>,
Vivien Didelot <vivien.didelot@savoirfairelinux.com>,
Andrew Lunn <andrew@lunn.ch>
Subject: [PATCH net-next 11/11] net: dsa: mv88e6xxx: Implement mv88e6390 get_stats
Date: Fri, 11 Nov 2016 03:53:43 +0100 [thread overview]
Message-ID: <1478832823-31471-12-git-send-email-andrew@lunn.ch> (raw)
In-Reply-To: <1478832823-31471-1-git-send-email-andrew@lunn.ch>
The mv88e6390 uses a different bit to select between bank0 and bank1
of the statistics. So implement an ops function for this, and pass the
selector bit to the generic stats read function. Also, the histogram
selection has moved for the mv88e6390, so abstract its selection as
well.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
drivers/net/dsa/mv88e6xxx/chip.c | 33 ++++++++++++++++++++++++---------
drivers/net/dsa/mv88e6xxx/mv88e6xxx.h | 3 ++-
2 files changed, 26 insertions(+), 10 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index ebef214eb1e3..9e3cdc356ae2 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -837,8 +837,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;
@@ -923,7 +922,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;
@@ -946,10 +946,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);
@@ -1031,7 +1031,8 @@ static int mv88e6xxx_get_sset_count(struct dsa_switch *ds)
}
static void _mv88e6xxx_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;
@@ -1040,7 +1041,8 @@ static void _mv88e6xxx_get_stats(struct mv88e6xxx_chip *chip, int port,
stat = &mv88e6xxx_hw_stats[i];
if (stat->type & types) {
data[j] = _mv88e6xxx_get_ethtool_stat(chip, stat, port,
- bank1_select);
+ bank1_select,
+ histogram);
j++;
}
}
@@ -1050,14 +1052,25 @@ static void mv88e6095_get_stats(struct mv88e6xxx_chip *chip, int port,
uint64_t *data)
{
return _mv88e6xxx_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_get_stats(struct mv88e6xxx_chip *chip, int port,
uint64_t *data)
{
return _mv88e6xxx_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_get_stats(struct mv88e6xxx_chip *chip, int port,
+ uint64_t *data)
+{
+ return _mv88e6xxx_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,
@@ -3522,6 +3535,7 @@ static const struct mv88e6xxx_ops mv88e6390_ops = {
.stats_snapshot = mv88e6390_stats_snapshot,
.stats_get_sset_count = mv88e6320_get_sset_count,
.stats_get_strings = mv88e6320_get_strings,
+ .stats_get_stats = mv88e6390_get_stats,
};
static const struct mv88e6xxx_ops mv88e6390x_ops = {
@@ -3537,6 +3551,7 @@ static const struct mv88e6xxx_ops mv88e6390x_ops = {
.stats_snapshot = mv88e6390_stats_snapshot,
.stats_get_sset_count = mv88e6320_get_sset_count,
.stats_get_strings = mv88e6320_get_strings,
+ .stats_get_stats = mv88e6390_get_stats,
};
static const struct mv88e6xxx_info mv88e6xxx_table[] = {
diff --git a/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h b/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
index e0196450e8a2..9ec1fbd94a3a 100644
--- a/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
+++ b/drivers/net/dsa/mv88e6xxx/mv88e6xxx.h
@@ -296,7 +296,8 @@
#define GLOBAL_STATS_OP_HIST_RX ((1 << 10) | GLOBAL_STATS_OP_BUSY)
#define GLOBAL_STATS_OP_HIST_TX ((2 << 10) | GLOBAL_STATS_OP_BUSY)
#define GLOBAL_STATS_OP_HIST_RX_TX ((3 << 10) | GLOBAL_STATS_OP_BUSY)
-#define GLOBAL_STATS_OP_BANK_1 BIT(9)
+#define GLOBAL_STATS_OP_BANK_1_BIT_9 BIT(9)
+#define GLOBAL_STATS_OP_BANK_1_BIT_10 BIT(10)
#define GLOBAL_STATS_COUNTER_32 0x1e
#define GLOBAL_STATS_COUNTER_01 0x1f
--
2.10.2
next prev parent reply other threads:[~2016-11-11 2:54 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-11 2:53 [PATCH net-next 00/11] Start adding support for mv88e6390 family Andrew Lunn
2016-11-11 2:53 ` [PATCH net-next 01/11] net: dsa: mv88e6xxx: Take switch out of reset before probe Andrew Lunn
2016-11-14 1:23 ` Vivien Didelot
2016-11-11 2:53 ` [PATCH net-next 02/11] net: dsa: mv88e6xxx: Fix unused variable warning by using variable Andrew Lunn
2016-11-14 1:25 ` Vivien Didelot
2016-11-11 2:53 ` [PATCH net-next 03/11] net: dsa: mv88e6xxx: Add the mv88e6390 family Andrew Lunn
2016-11-14 2:05 ` Vivien Didelot
2016-11-11 2:53 ` [PATCH net-next 04/11] net: dsa: mv88e6xxx: Abstract stats_snapshot into ops structure Andrew Lunn
2016-11-13 23:37 ` Vivien Didelot
2016-11-11 2:53 ` [PATCH net-next 05/11] net: dsa: mv88e6xxx: Add comment about family a device belongs to Andrew Lunn
2016-11-14 2:08 ` Vivien Didelot
2016-11-14 2:48 ` Andrew Lunn
2016-11-11 2:53 ` [PATCH net-next 06/11] net: dsa: mv88e6xxx: Add mv88e6390 stats snapshot operation Andrew Lunn
2016-11-11 2:53 ` [PATCH net-next 07/11] net: dsa: mv88e6xxx: Add mv88e6390 statistics unit init Andrew Lunn
2016-11-14 2:29 ` Vivien Didelot
2016-11-11 2:53 ` [PATCH net-next 08/11] net: dsa: mv88e6xxx: Add stats_get_sset_count to ops structure Andrew Lunn
2016-11-14 2:47 ` Vivien Didelot
2016-11-11 2:53 ` [PATCH net-next 09/11] net: dsa: mv88e6xxx: Add stats_get_strings " Andrew Lunn
2016-11-11 2:53 ` [PATCH net-next 10/11] net: dsa: mv88e6xxx: Add stats_get_stats " Andrew Lunn
2016-11-11 2:53 ` Andrew Lunn [this message]
2016-11-13 5:48 ` [PATCH net-next 00/11] Start adding support for mv88e6390 family David Miller
2016-11-13 20:24 ` Andrew Lunn
2016-11-14 3:39 ` David Miller
2016-11-14 21:30 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1478832823-31471-12-git-send-email-andrew@lunn.ch \
--to=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=vivien.didelot@savoirfairelinux.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).