All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 0/2] dpaa2-eth: misc fixes
@ 2019-10-10 16:19 Ioana Ciornei
  2019-10-10 16:19 ` [PATCH net 1/2] dpaa2-eth: add irq for the dpmac connect/disconnect event Ioana Ciornei
  2019-10-10 16:19 ` [PATCH net 2/2] dpaa2-eth: Fix TX FQID values Ioana Ciornei
  0 siblings, 2 replies; 4+ messages in thread
From: Ioana Ciornei @ 2019-10-10 16:19 UTC (permalink / raw)
  To: davem; +Cc: netdev, Ioana Ciornei

This patch set adds a couple of fixes around updating configuration on MAC
change.  Depending on when MC connects the DPNI to a MAC, both the MAC
address and TX FQIDs should be updated everytime there is a change in
configuration.

Florin Chiculita (1):
  dpaa2-eth: add irq for the dpmac connect/disconnect event

Ioana Radulescu (1):
  dpaa2-eth: Fix TX FQID values

 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 48 +++++++++++++++++++++++-
 drivers/net/ethernet/freescale/dpaa2/dpni.h      |  5 ++-
 2 files changed, 51 insertions(+), 2 deletions(-)

-- 
1.9.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net 1/2] dpaa2-eth: add irq for the dpmac connect/disconnect event
  2019-10-10 16:19 [PATCH net 0/2] dpaa2-eth: misc fixes Ioana Ciornei
@ 2019-10-10 16:19 ` Ioana Ciornei
  2019-10-10 16:19 ` [PATCH net 2/2] dpaa2-eth: Fix TX FQID values Ioana Ciornei
  1 sibling, 0 replies; 4+ messages in thread
From: Ioana Ciornei @ 2019-10-10 16:19 UTC (permalink / raw)
  To: davem; +Cc: netdev, Florin Chiculita, Ioana Ciornei

From: Florin Chiculita <florinlaurentiu.chiculita@nxp.com>

Add IRQ for the DPNI endpoint change event, resolving the issue
when a dynamically created DPNI gets a randomly generated hw address
when the endpoint is a DPMAC object.

Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 6 +++++-
 drivers/net/ethernet/freescale/dpaa2/dpni.h      | 5 ++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index 162d7d8fb295..5acd734a216b 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -3306,6 +3306,9 @@ static irqreturn_t dpni_irq0_handler_thread(int irq_num, void *arg)
 	if (status & DPNI_IRQ_EVENT_LINK_CHANGED)
 		link_state_update(netdev_priv(net_dev));
 
+	if (status & DPNI_IRQ_EVENT_ENDPOINT_CHANGED)
+		set_mac_addr(netdev_priv(net_dev));
+
 	return IRQ_HANDLED;
 }
 
@@ -3331,7 +3334,8 @@ static int setup_irqs(struct fsl_mc_device *ls_dev)
 	}
 
 	err = dpni_set_irq_mask(ls_dev->mc_io, 0, ls_dev->mc_handle,
-				DPNI_IRQ_INDEX, DPNI_IRQ_EVENT_LINK_CHANGED);
+				DPNI_IRQ_INDEX, DPNI_IRQ_EVENT_LINK_CHANGED |
+				DPNI_IRQ_EVENT_ENDPOINT_CHANGED);
 	if (err < 0) {
 		dev_err(&ls_dev->dev, "dpni_set_irq_mask(): %d\n", err);
 		goto free_irq;
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpni.h b/drivers/net/ethernet/freescale/dpaa2/dpni.h
index fd583911b6c0..ee0711d06b3a 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpni.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dpni.h
@@ -133,9 +133,12 @@ int dpni_reset(struct fsl_mc_io	*mc_io,
  */
 #define DPNI_IRQ_INDEX				0
 /**
- * IRQ event - indicates a change in link state
+ * IRQ events:
+ *       indicates a change in link state
+ *       indicates a change in endpoint
  */
 #define DPNI_IRQ_EVENT_LINK_CHANGED		0x00000001
+#define DPNI_IRQ_EVENT_ENDPOINT_CHANGED		0x00000002
 
 int dpni_set_irq_enable(struct fsl_mc_io	*mc_io,
 			u32			cmd_flags,
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net 2/2] dpaa2-eth: Fix TX FQID values
  2019-10-10 16:19 [PATCH net 0/2] dpaa2-eth: misc fixes Ioana Ciornei
  2019-10-10 16:19 ` [PATCH net 1/2] dpaa2-eth: add irq for the dpmac connect/disconnect event Ioana Ciornei
@ 2019-10-10 16:19 ` Ioana Ciornei
  2019-10-12 22:32   ` David Miller
  1 sibling, 1 reply; 4+ messages in thread
From: Ioana Ciornei @ 2019-10-10 16:19 UTC (permalink / raw)
  To: davem; +Cc: netdev, Ioana Radulescu, Ioana Ciornei

From: Ioana Radulescu <ruxandra.radulescu@nxp.com>

Depending on when MC connects the DPNI to a MAC, Tx FQIDs may
not be available during probe time.

Read the FQIDs each time the link goes up to avoid using invalid
values. In case an error occurs or an invalid value is retrieved,
fall back to QDID-based enqueueing.

Fixes: 1fa0f68c9255 ("dpaa2-eth: Use FQ-based DPIO enqueue API")
Signed-off-by: Ioana Radulescu <ruxandra.radulescu@nxp.com>
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 42 ++++++++++++++++++++++++
 1 file changed, 42 insertions(+)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index 5acd734a216b..5bd24c160256 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -1235,6 +1235,8 @@ static void dpaa2_eth_set_rx_taildrop(struct dpaa2_eth_priv *priv, bool enable)
 	priv->rx_td_enabled = enable;
 }
 
+static void update_tx_fqids(struct dpaa2_eth_priv *priv);
+
 static int link_state_update(struct dpaa2_eth_priv *priv)
 {
 	struct dpni_link_state state = {0};
@@ -1261,6 +1263,7 @@ static int link_state_update(struct dpaa2_eth_priv *priv)
 		goto out;
 
 	if (state.up) {
+		update_tx_fqids(priv);
 		netif_carrier_on(priv->net_dev);
 		netif_tx_start_all_queues(priv->net_dev);
 	} else {
@@ -2533,6 +2536,45 @@ static int set_pause(struct dpaa2_eth_priv *priv)
 	return 0;
 }
 
+static void update_tx_fqids(struct dpaa2_eth_priv *priv)
+{
+	struct dpaa2_eth_fq *fq;
+	struct dpni_queue queue;
+	struct dpni_queue_id qid = {0};
+	int i, j, err;
+
+	/* We only use Tx FQIDs for FQID-based enqueue, so check
+	 * if DPNI version supports it before updating FQIDs
+	 */
+	if (dpaa2_eth_cmp_dpni_ver(priv, DPNI_ENQUEUE_FQID_VER_MAJOR,
+				   DPNI_ENQUEUE_FQID_VER_MINOR) < 0)
+		return;
+
+	for (i = 0; i < priv->num_fqs; i++) {
+		fq = &priv->fq[i];
+		if (fq->type != DPAA2_TX_CONF_FQ)
+			continue;
+		for (j = 0; j < dpaa2_eth_tc_count(priv); j++) {
+			err = dpni_get_queue(priv->mc_io, 0, priv->mc_token,
+					     DPNI_QUEUE_TX, j, fq->flowid,
+					     &queue, &qid);
+			if (err)
+				goto out_err;
+
+			fq->tx_fqid[j] = qid.fqid;
+			if (fq->tx_fqid[j] == 0)
+				goto out_err;
+		}
+	}
+
+	return;
+
+out_err:
+	netdev_info(priv->net_dev,
+		    "Error reading Tx FQID, fallback to QDID-based enqueue");
+	priv->enqueue = dpaa2_eth_enqueue_qd;
+}
+
 /* Configure the DPNI object this interface is associated with */
 static int setup_dpni(struct fsl_mc_device *ls_dev)
 {
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net 2/2] dpaa2-eth: Fix TX FQID values
  2019-10-10 16:19 ` [PATCH net 2/2] dpaa2-eth: Fix TX FQID values Ioana Ciornei
@ 2019-10-12 22:32   ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2019-10-12 22:32 UTC (permalink / raw)
  To: ioana.ciornei; +Cc: netdev, ruxandra.radulescu

From: Ioana Ciornei <ioana.ciornei@nxp.com>
Date: Thu, 10 Oct 2019 19:19:47 +0300

> @@ -2533,6 +2536,45 @@ static int set_pause(struct dpaa2_eth_priv *priv)
>  	return 0;
>  }
>  
> +static void update_tx_fqids(struct dpaa2_eth_priv *priv)
> +{
> +	struct dpaa2_eth_fq *fq;
> +	struct dpni_queue queue;
> +	struct dpni_queue_id qid = {0};
> +	int i, j, err;

Reverse christmas tree local variable ordering here please.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-10-12 22:32 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-10 16:19 [PATCH net 0/2] dpaa2-eth: misc fixes Ioana Ciornei
2019-10-10 16:19 ` [PATCH net 1/2] dpaa2-eth: add irq for the dpmac connect/disconnect event Ioana Ciornei
2019-10-10 16:19 ` [PATCH net 2/2] dpaa2-eth: Fix TX FQID values Ioana Ciornei
2019-10-12 22:32   ` David Miller

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.