All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kurt Kanzenbach <kurt@kmk-computers.de>
To: Andrew Lunn <andrew@lunn.ch>,
	Vivien Didelot <vivien.didelot@gmail.com>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Vladimir Oltean <olteanv@gmail.com>
Cc: "David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	netdev@vger.kernel.org, Kurt Kanzenbach <kurt@kmk-computers.de>
Subject: [PATCH net-next 1/6] net: dsa: hellcreek: Report RAM usage
Date: Thu, 11 Mar 2021 18:53:39 +0100	[thread overview]
Message-ID: <20210311175344.3084-2-kurt@kmk-computers.de> (raw)
In-Reply-To: <20210311175344.3084-1-kurt@kmk-computers.de>

Report the RAM usage via devlink. This is a useful debug feature. The actual
size depends on the used Hellcreek version:

|root@tsn:~# devlink resource show platform/ff240000.switch
|platform/ff240000.switch:
|  name VLAN size 4096 occ 3 unit entry dpipe_tables none
|  name FDB size 256 occ 6 unit entry dpipe_tables none
|  name RAM size 320 occ 14 unit entry dpipe_tables none

Signed-off-by: Kurt Kanzenbach <kurt@kmk-computers.de>
---
 drivers/net/dsa/hirschmann/hellcreek.c | 38 ++++++++++++++++++++++++--
 drivers/net/dsa/hirschmann/hellcreek.h |  2 ++
 2 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/drivers/net/dsa/hirschmann/hellcreek.c b/drivers/net/dsa/hirschmann/hellcreek.c
index 463137c39db2..c7a439336336 100644
--- a/drivers/net/dsa/hirschmann/hellcreek.c
+++ b/drivers/net/dsa/hirschmann/hellcreek.c
@@ -221,11 +221,13 @@ static void hellcreek_feature_detect(struct hellcreek *hellcreek)
 
 	features = hellcreek_read(hellcreek, HR_FEABITS0);
 
-	/* Only detect the size of the FDB table. The size and current
-	 * utilization can be queried via devlink.
+	/* Detect the FDB table size and the maximum RAM page count. The size
+	 * and current utilization can be queried via devlink.
 	 */
 	hellcreek->fdb_entries = ((features & HR_FEABITS0_FDBBINS_MASK) >>
-			       HR_FEABITS0_FDBBINS_SHIFT) * 32;
+				  HR_FEABITS0_FDBBINS_SHIFT) * 32;
+	hellcreek->page_count  = ((features & HR_FEABITS0_PCNT_MASK) >>
+				  HR_FEABITS0_PCNT_SHIFT) * 32;
 }
 
 static enum dsa_tag_protocol hellcreek_get_tag_protocol(struct dsa_switch *ds,
@@ -1034,10 +1036,23 @@ static u64 hellcreek_devlink_fdb_table_get(void *priv)
 	return count;
 }
 
+static u64 hellcreek_devlink_ram_usage_get(void *priv)
+{
+	struct hellcreek *hellcreek = priv;
+	u64 usage = 0;
+
+	/* Indicates how many free ram pages are available. */
+	usage = hellcreek_read(hellcreek, HR_PFREE);
+	usage = hellcreek->page_count - usage;
+
+	return usage;
+}
+
 static int hellcreek_setup_devlink_resources(struct dsa_switch *ds)
 {
 	struct devlink_resource_size_params size_vlan_params;
 	struct devlink_resource_size_params size_fdb_params;
+	struct devlink_resource_size_params size_ram_params;
 	struct hellcreek *hellcreek = ds->priv;
 	int err;
 
@@ -1050,6 +1065,11 @@ static int hellcreek_setup_devlink_resources(struct dsa_switch *ds)
 					  hellcreek->fdb_entries,
 					  1, DEVLINK_RESOURCE_UNIT_ENTRY);
 
+	devlink_resource_size_params_init(&size_ram_params,
+					  hellcreek->page_count,
+					  hellcreek->page_count,
+					  1, DEVLINK_RESOURCE_UNIT_ENTRY);
+
 	err = dsa_devlink_resource_register(ds, "VLAN", VLAN_N_VID,
 					    HELLCREEK_DEVLINK_PARAM_ID_VLAN_TABLE,
 					    DEVLINK_RESOURCE_ID_PARENT_TOP,
@@ -1064,6 +1084,13 @@ static int hellcreek_setup_devlink_resources(struct dsa_switch *ds)
 	if (err)
 		goto out;
 
+	err = dsa_devlink_resource_register(ds, "RAM", hellcreek->page_count,
+					    HELLCREEK_DEVLINK_PARAM_ID_RAM_USAGE,
+					    DEVLINK_RESOURCE_ID_PARENT_TOP,
+					    &size_ram_params);
+	if (err)
+		goto out;
+
 	dsa_devlink_resource_occ_get_register(ds,
 					      HELLCREEK_DEVLINK_PARAM_ID_VLAN_TABLE,
 					      hellcreek_devlink_vlan_table_get,
@@ -1074,6 +1101,11 @@ static int hellcreek_setup_devlink_resources(struct dsa_switch *ds)
 					      hellcreek_devlink_fdb_table_get,
 					      hellcreek);
 
+	dsa_devlink_resource_occ_get_register(ds,
+					      HELLCREEK_DEVLINK_PARAM_ID_RAM_USAGE,
+					      hellcreek_devlink_ram_usage_get,
+					      hellcreek);
+
 	return 0;
 
 out:
diff --git a/drivers/net/dsa/hirschmann/hellcreek.h b/drivers/net/dsa/hirschmann/hellcreek.h
index 305e76dab34d..9c08aeabbc24 100644
--- a/drivers/net/dsa/hirschmann/hellcreek.h
+++ b/drivers/net/dsa/hirschmann/hellcreek.h
@@ -286,6 +286,7 @@ struct hellcreek {
 	u64 last_ts;		/* Used for overflow detection */
 	u16 status_out;		/* ptp.status_out shadow */
 	size_t fdb_entries;
+	size_t page_count;
 };
 
 /* A Qbv schedule can only started up to 8 seconds in the future. If the delta
@@ -302,6 +303,7 @@ struct hellcreek {
 enum hellcreek_devlink_resource_id {
 	HELLCREEK_DEVLINK_PARAM_ID_VLAN_TABLE,
 	HELLCREEK_DEVLINK_PARAM_ID_FDB_TABLE,
+	HELLCREEK_DEVLINK_PARAM_ID_RAM_USAGE,
 };
 
 #endif /* _HELLCREEK_H_ */
-- 
2.30.2


  reply	other threads:[~2021-03-11 18:23 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11 17:53 [PATCH net-next 0/6] net: dsa: hellcreek: Add support for dumping tables Kurt Kanzenbach
2021-03-11 17:53 ` Kurt Kanzenbach [this message]
2021-03-11 20:35   ` [PATCH net-next 1/6] net: dsa: hellcreek: Report RAM usage Jakub Kicinski
2021-03-11 17:53 ` [PATCH net-next 2/6] net: dsa: hellcreek: Report META data usage Kurt Kanzenbach
2021-03-11 22:52   ` Andrew Lunn
2021-03-11 23:17     ` Vladimir Oltean
2021-03-12 16:11       ` Kurt Kanzenbach
2021-03-11 17:53 ` [PATCH net-next 3/6] net: dsa: hellcreek: Add devlink VLAN region Kurt Kanzenbach
2021-03-11 17:53 ` [PATCH net-next 4/6] net: dsa: hellcreek: Use boolean value Kurt Kanzenbach
2021-03-11 23:09   ` Andrew Lunn
2021-03-11 17:53 ` [PATCH net-next 5/6] net: dsa: hellcreek: Move common code to helper Kurt Kanzenbach
2021-03-11 23:10   ` Andrew Lunn
2021-03-11 17:53 ` [PATCH net-next 6/6] net: dsa: hellcreek: Add devlink FDB region Kurt Kanzenbach
2021-03-11 23:12   ` Andrew Lunn

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=20210311175344.3084-2-kurt@kmk-computers.de \
    --to=kurt@kmk-computers.de \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=vivien.didelot@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.