[v2,09/15] net/bnxt: nq doorbell cleanups

Message ID 20190716092826.54276-10-ajit.khaparde@broadcom.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series bnxt patch series |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Ajit Khaparde July 16, 2019, 9:28 a.m. UTC
  From: Lance Richardson <lance.richardson@broadcom.com>

Simplify nq doorbell handling code by removing redundant db
parameter and consolidating NQ doorbell macro into the inline
function that uses it.

Add "enable interrupt" variant of nq write. This will be used
in a subsequent commit.

When initializing nq doorbell, don't assume that only the
"disable interrupt" form will be used.

Fixes: f8168ca0e690 ("net/bnxt: support thor controller")
Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt.h      |  1 +
 drivers/net/bnxt/bnxt_ring.c |  2 +-
 drivers/net/bnxt/bnxt_ring.h | 23 ++++++++++++++++++-----
 3 files changed, 20 insertions(+), 6 deletions(-)
  

Patch

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index cd809b385..3ccf784e5 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -246,6 +246,7 @@  struct bnxt_coal {
 #define DBR_TYPE_SRQ				(0x2ULL << 60)
 #define DBR_TYPE_CQ				(0x4ULL << 60)
 #define DBR_TYPE_NQ				(0xaULL << 60)
+#define DBR_TYPE_NQ_ARM				(0xbULL << 60)
 
 #define BNXT_RSS_TBL_SIZE_THOR		512
 #define BNXT_RSS_ENTRIES_PER_CTX_THOR	64
diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index 9b19459b6..faf861cc1 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -341,7 +341,7 @@  static void bnxt_set_db(struct bnxt *bp,
 			db->db_key64 = DBR_PATH_L2 | DBR_TYPE_CQ;
 			break;
 		case HWRM_RING_ALLOC_INPUT_RING_TYPE_NQ:
-			db->db_key64 = DBR_PATH_L2 | DBR_TYPE_NQ;
+			db->db_key64 = DBR_PATH_L2;
 			break;
 		}
 		db->db_key64 |= (uint64_t)fid << DBR_XID_SFT;
diff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h
index af2c5762f..e5cef3a1d 100644
--- a/drivers/net/bnxt/bnxt_ring.h
+++ b/drivers/net/bnxt/bnxt_ring.h
@@ -84,15 +84,28 @@  static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx)
 		rte_write32(db->db_key32 | idx, db->doorbell);
 }
 
+/* Ring an NQ doorbell and disable interrupts for the ring. */
 static inline void bnxt_db_nq(struct bnxt_cp_ring_info *cpr)
 {
-	struct bnxt_db_info *db = &cpr->cp_db;
+	if (unlikely(!cpr->cp_db.db_64))
+		return;
+
+	rte_smp_wmb();
+	rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ |
+		    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
+		    cpr->cp_db.doorbell);
+}
+
+/* Ring an NQ doorbell and enable interrupts for the ring. */
+static inline void bnxt_db_nq_arm(struct bnxt_cp_ring_info *cpr)
+{
+	if (unlikely(!cpr->cp_db.db_64))
+		return;
 
 	rte_smp_wmb();
-	if (likely(db->db_64))
-		rte_write64(db->db_key64 | DBR_TYPE_NQ |
-			    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
-			    db->doorbell);
+	rte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM |
+		    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),
+		    cpr->cp_db.doorbell);
 }
 
 static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr)