netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vladimir Oltean <olteanv@gmail.com>
To: f.fainelli@gmail.com, vivien.didelot@gmail.com, andrew@lunn.ch,
	davem@davemloft.net, richardcochran@gmail.com,
	john.stultz@linaro.org, tglx@linutronix.de, sboyd@kernel.org
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	Vladimir Oltean <olteanv@gmail.com>
Subject: [PATCH v3 net-next 14/17] net: dsa: sja1105: Add a global sja1105_tagger_data structure
Date: Tue,  4 Jun 2019 20:07:53 +0300	[thread overview]
Message-ID: <20190604170756.14338-15-olteanv@gmail.com> (raw)
In-Reply-To: <20190604170756.14338-1-olteanv@gmail.com>

This will be used to keep state for RX timestamping. It is global
because the switch serializes timestampable and meta frames when
trapping them towards the CPU port (lower port indices have higher
priority) and therefore having one state machine per port would create
unnecessary complications.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
---
Changes in v3:

Split from previous 09/10 patch (no functional changes).

Changes in v2:

None.

 drivers/net/dsa/sja1105/sja1105.h      |  1 +
 drivers/net/dsa/sja1105/sja1105_main.c |  5 +++++
 include/linux/dsa/sja1105.h            | 15 +++++++++++++++
 3 files changed, 21 insertions(+)

diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sja1105.h
index 5a4f83a3417b..0fc6fe9ada87 100644
--- a/drivers/net/dsa/sja1105/sja1105.h
+++ b/drivers/net/dsa/sja1105/sja1105.h
@@ -103,6 +103,7 @@ struct sja1105_private {
 	 * the switch doesn't confuse them with one another.
 	 */
 	struct mutex mgmt_lock;
+	struct sja1105_tagger_data tagger_data;
 };
 
 #include "sja1105_dynamic_config.h"
diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c
index f83f924c0833..9dd2ab2725b6 100644
--- a/drivers/net/dsa/sja1105/sja1105_main.c
+++ b/drivers/net/dsa/sja1105/sja1105_main.c
@@ -1828,6 +1828,7 @@ static int sja1105_check_device_id(struct sja1105_private *priv)
 
 static int sja1105_probe(struct spi_device *spi)
 {
+	struct sja1105_tagger_data *tagger_data;
 	struct device *dev = &spi->dev;
 	struct sja1105_private *priv;
 	struct dsa_switch *ds;
@@ -1882,12 +1883,16 @@ static int sja1105_probe(struct spi_device *spi)
 	ds->priv = priv;
 	priv->ds = ds;
 
+	tagger_data = &priv->tagger_data;
+	skb_queue_head_init(&tagger_data->skb_rxtstamp_queue);
+
 	/* Connections between dsa_port and sja1105_port */
 	for (i = 0; i < SJA1105_NUM_PORTS; i++) {
 		struct sja1105_port *sp = &priv->ports[i];
 
 		ds->ports[i].priv = sp;
 		sp->dp = &ds->ports[i];
+		sp->data = tagger_data;
 	}
 	mutex_init(&priv->mgmt_lock);
 
diff --git a/include/linux/dsa/sja1105.h b/include/linux/dsa/sja1105.h
index b9619d9fca4c..b83f6e428e5d 100644
--- a/include/linux/dsa/sja1105.h
+++ b/include/linux/dsa/sja1105.h
@@ -31,7 +31,22 @@
 #define SJA1105_META_SMAC			0x222222222222ull
 #define SJA1105_META_DMAC			0x0180C200000Eull
 
+/* Global tagger data: each struct sja1105_port has a reference to
+ * the structure defined in struct sja1105_private.
+ */
+struct sja1105_tagger_data {
+	struct sk_buff_head skb_rxtstamp_queue;
+	struct work_struct rxtstamp_work;
+	struct sk_buff *stampable_skb;
+	/* Protects concurrent access to the meta state machine
+	 * from taggers running on multiple ports on SMP systems
+	 */
+	spinlock_t meta_lock;
+	bool hwts_rx_en;
+};
+
 struct sja1105_port {
+	struct sja1105_tagger_data *data;
 	struct dsa_port *dp;
 	bool hwts_tx_en;
 	int mgmt_slot;
-- 
2.17.1


  parent reply	other threads:[~2019-06-04 17:08 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-04 17:07 [PATCH v3 net-next 00/17] PTP support for the SJA1105 DSA driver Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 01/17] net: dsa: Keep a pointer to the skb clone for TX timestamping Vladimir Oltean
2019-06-04 20:31   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 02/17] net: dsa: Add teardown callback for drivers Vladimir Oltean
2019-06-04 18:15   ` Andrew Lunn
2019-06-04 20:32   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 03/17] net: dsa: tag_8021q: Create helper function for removing VLAN header Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 04/17] net: dsa: sja1105: Move sja1105_change_tpid into sja1105_vlan_filtering Vladimir Oltean
2019-06-04 20:58   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 05/17] net: dsa: sja1105: Reverse TPID and TPID2 Vladimir Oltean
2019-06-04 20:33   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 06/17] net: dsa: sja1105: Limit use of incl_srcpt to bridge+vlan mode Vladimir Oltean
2019-06-04 20:35   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 07/17] net: dsa: sja1105: Add support for the PTP clock Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 08/17] net: dsa: sja1105: Move sja1105_is_link_local to include/linux Vladimir Oltean
2019-06-04 20:35   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 09/17] net: dsa: sja1105: Add logic for TX timestamping Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 10/17] net: dsa: sja1105: Build a minimal understanding of meta frames Vladimir Oltean
2019-06-04 21:00   ` Florian Fainelli
2019-06-04 17:07 ` [PATCH v3 net-next 11/17] net: dsa: sja1105: Add support for the AVB Parameters Table Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 12/17] net: dsa: sja1105: Make sja1105_is_link_local not match meta frames Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 13/17] net: dsa: sja1105: Receive and decode " Vladimir Oltean
2019-06-04 17:07 ` Vladimir Oltean [this message]
2019-06-04 17:07 ` [PATCH v3 net-next 15/17] net: dsa: sja1105: Increase priority of CPU-trapped frames Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 16/17] net: dsa: sja1105: Add a state machine for RX timestamping Vladimir Oltean
2019-06-04 17:07 ` [PATCH v3 net-next 17/17] net: dsa: sja1105: Expose PTP timestamping ioctls to userspace Vladimir Oltean
2019-06-05  3:22 ` [PATCH v3 net-next 00/17] PTP support for the SJA1105 DSA driver David Miller
2019-06-05  9:13   ` Vladimir Oltean
2019-06-05 11:33     ` Vladimir Oltean
2019-06-05 17:45       ` Richard Cochran
2019-06-05 17:50         ` Vladimir Oltean
2019-06-05 17:52           ` Vladimir Oltean
2019-06-05 18:08         ` Vladimir Oltean
2019-06-06  3:11           ` Richard Cochran
2019-06-06 13:40             ` Vladimir Oltean
2019-06-07  3:32               ` Richard Cochran
2019-06-07  9:43                 ` Vladimir Oltean
2019-06-05 18:44     ` David Miller
2019-06-07 19:15       ` David Miller
2019-06-07 19:38         ` Vladimir Oltean

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=20190604170756.14338-15-olteanv@gmail.com \
    --to=olteanv@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=john.stultz@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=richardcochran@gmail.com \
    --cc=sboyd@kernel.org \
    --cc=tglx@linutronix.de \
    --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 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).