[v2,2/7] net/ark: update MPU functions for firmware update

Message ID 20220520141512.2713384-2-ed.czeck@atomicrules.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers
Series [v2,1/7] devtools: add Atomic Rules acronyms for commit checks |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Ed Czeck May 20, 2022, 2:15 p.m. UTC
  new firmware version for MPU (Mbuf Prefetch Unit)
remove device-level global operations
remove ark_mpu_reset_stats function

Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com>

---
v2:
- document version compatibility between firmware and DPDK
- reword commit message
---
 doc/guides/nics/ark.rst         | 15 +++++++++++++++
 drivers/net/ark/ark_ethdev.c    |  2 --
 drivers/net/ark/ark_ethdev_rx.c |  4 ----
 drivers/net/ark/ark_mpu.c       | 21 ++++-----------------
 drivers/net/ark/ark_mpu.h       | 29 ++---------------------------
 5 files changed, 21 insertions(+), 50 deletions(-)
  

Comments

Ferruh Yigit May 23, 2022, 2:39 p.m. UTC | #1
On 5/20/2022 3:15 PM, Ed Czeck wrote:
> diff --git a/doc/guides/nics/ark.rst b/doc/guides/nics/ark.rst
> index c965406a7b..29c0a07d60 100644
> --- a/doc/guides/nics/ark.rst
> +++ b/doc/guides/nics/ark.rst
> @@ -300,6 +300,21 @@ ARK PMD supports the following Arkville RTL PCIe instances including:
>   * ``1d6c:101e`` - AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile]
>   * ``1d6c:101f`` - AR-TK242 [2x100GbE Packet Capture Device]
> 
> +DPDK and Arkville Firmware Versioning
> +-------------------------------------
> +
> +Arkville's firmware and its PMD have version dependencies which must
> +be stepped together at certain releases. PMD code ensures the versions are
> +compatible. The following lists shows where version compatible steps have
> +occurred. If other combinations are required, please contact Atomic Rules
> +support.
> +
> +* DPDK 22.07 requires Arkville 22.07.
> +* DPDK 22.03 requires Arkville 22.03.
> +* DPDK 21.05 requires Arkville 21.05.
> +* DPDK 18.11 requires Arkville 18.11.
> +* DPDK 17.05 requires Arkville 17.05 -- initial version.

This means dpdk21.08 & dpdk21.11 supports "Arkville 21.05", right?

And what exactly "Arkville 22.07" represents, I assume it is a package 
distributed by Arkville. Is the "Arkville 22.07" information enough, or 
is there any benefit to document required FW versions?


Also can you please update release notes that device FW(s) needs to be 
updated to "Arkville 22.07".
  

Patch

diff --git a/doc/guides/nics/ark.rst b/doc/guides/nics/ark.rst
index c965406a7b..29c0a07d60 100644
--- a/doc/guides/nics/ark.rst
+++ b/doc/guides/nics/ark.rst
@@ -300,6 +300,21 @@  ARK PMD supports the following Arkville RTL PCIe instances including:
 * ``1d6c:101e`` - AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile]
 * ``1d6c:101f`` - AR-TK242 [2x100GbE Packet Capture Device]
 
+DPDK and Arkville Firmware Versioning
+-------------------------------------
+
+Arkville's firmware and its PMD have version dependencies which must
+be stepped together at certain releases. PMD code ensures the versions are
+compatible. The following lists shows where version compatible steps have
+occurred. If other combinations are required, please contact Atomic Rules
+support.
+
+* DPDK 22.07 requires Arkville 22.07.
+* DPDK 22.03 requires Arkville 22.03.
+* DPDK 21.05 requires Arkville 21.05.
+* DPDK 18.11 requires Arkville 18.11.
+* DPDK 17.05 requires Arkville 17.05 -- initial version.
+
 Supported Operating Systems
 ---------------------------
 
diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
index 76b88c62d0..c0578b85ce 100644
--- a/drivers/net/ark/ark_ethdev.c
+++ b/drivers/net/ark/ark_ethdev.c
@@ -524,7 +524,6 @@  ark_config_device(struct rte_eth_dev *dev)
 	num_q = ark_api_num_queues(mpu);
 	ark->rx_queues = num_q;
 	for (i = 0; i < num_q; i++) {
-		ark_mpu_reset(mpu);
 		mpu = RTE_PTR_ADD(mpu, ARK_MPU_QOFFSET);
 	}
 
@@ -536,7 +535,6 @@  ark_config_device(struct rte_eth_dev *dev)
 	num_q = ark_api_num_queues(mpu);
 	ark->tx_queues = num_q;
 	for (i = 0; i < num_q; i++) {
-		ark_mpu_reset(mpu);
 		mpu = RTE_PTR_ADD(mpu, ARK_MPU_QOFFSET);
 	}
 
diff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c
index 0fbb2603db..85e34d0bb8 100644
--- a/drivers/net/ark/ark_ethdev_rx.c
+++ b/drivers/net/ark/ark_ethdev_rx.c
@@ -91,9 +91,6 @@  eth_ark_rx_hw_setup(struct rte_eth_dev *dev,
 
 	ark_udm_write_addr(queue->udm, phys_addr_prod_index);
 
-	/* advance the valid pointer, but don't start until the queue starts */
-	ark_mpu_reset_stats(queue->mpu);
-
 	/* The seed is the producer index for the HW */
 	ark_mpu_set_producer(queue->mpu, queue->seed_index);
 	dev->data->rx_queue_state[rx_queue_idx] = RTE_ETH_QUEUE_STATE_STOPPED;
@@ -589,7 +586,6 @@  eth_rx_queue_stats_reset(void *vqueue)
 	if (queue == 0)
 		return;
 
-	ark_mpu_reset_stats(queue->mpu);
 	ark_udm_queue_stats_reset(queue->udm);
 }
 
diff --git a/drivers/net/ark/ark_mpu.c b/drivers/net/ark/ark_mpu.c
index b8e94b6ed3..9d5ee7841b 100644
--- a/drivers/net/ark/ark_mpu.c
+++ b/drivers/net/ark/ark_mpu.c
@@ -24,10 +24,10 @@  ark_mpu_verify(struct ark_mpu_t *mpu, uint32_t obj_size)
 {
 	uint32_t version;
 
-	version = mpu->id.vernum & 0x0000fF00;
-	if ((mpu->id.idnum != 0x2055504d) ||
-	    (mpu->hw.obj_size != obj_size) ||
-	    (version != 0x00003100)) {
+	version = mpu->id.vernum;
+	if (mpu->id.idnum != ARK_MPU_MODID ||
+	    version != ARK_MPU_MODVER ||
+	    mpu->hw.obj_size != obj_size) {
 		ARK_PMD_LOG(ERR,
 			    "   MPU module not found as expected %08x"
 			    " \"%c%c%c%c %c%c%c%c\"\n",
@@ -79,16 +79,9 @@  ark_mpu_reset(struct ark_mpu_t *mpu)
 		mpu->cfg.command = MPU_CMD_FORCE_RESET;
 		usleep(10);
 	}
-	ark_mpu_reset_stats(mpu);
 	return mpu->cfg.command != MPU_CMD_IDLE;
 }
 
-void
-ark_mpu_reset_stats(struct ark_mpu_t *mpu)
-{
-	mpu->stats.pci_request = 1;	/* reset stats */
-}
-
 int
 ark_mpu_configure(struct ark_mpu_t *mpu, rte_iova_t ring, uint32_t ring_size,
 		  int is_tx)
@@ -118,12 +111,6 @@  ark_mpu_dump(struct ark_mpu_t *mpu, const char *code, uint16_t qid)
 	ARK_PMD_LOG(DEBUG, "MPU: %s Q: %3u sw_prod %u, hw_cons: %u\n",
 		      code, qid,
 		      mpu->cfg.sw_prod_index, mpu->cfg.hw_cons_index);
-	ARK_PMD_LOG(DEBUG, "MPU: %s state: %d count %d, reserved %d"
-		      "\n",
-		      code,
-		      mpu->debug.state, mpu->debug.count,
-		      mpu->debug.reserved
-		      );
 }
 
 void
diff --git a/drivers/net/ark/ark_mpu.h b/drivers/net/ark/ark_mpu.h
index 92c3e67c86..9d2b70d35f 100644
--- a/drivers/net/ark/ark_mpu.h
+++ b/drivers/net/ark/ark_mpu.h
@@ -15,6 +15,8 @@ 
  * there is minimal documentation.
  */
 
+#define ARK_MPU_MODID 0x2055504d
+#define ARK_MPU_MODVER 0x37313232
 /*
  * MPU hardware structures
  * These are overlay structures to a memory mapped FPGA device.  These
@@ -64,26 +66,6 @@  enum ARK_MPU_COMMAND {
 	MPU_COMMAND_LIMIT = 0xfFFFFFFF
 };
 
-#define ARK_MPU_STATS 0x080
-struct ark_mpu_stats_t {
-	volatile uint64_t pci_request;
-	volatile uint64_t q_empty;
-	volatile uint64_t q_q1;
-	volatile uint64_t q_q2;
-	volatile uint64_t q_q3;
-	volatile uint64_t q_q4;
-	volatile uint64_t q_full;
-};
-
-#define ARK_MPU_DEBUG 0x0C0
-struct ark_mpu_debug_t {
-	volatile uint32_t state;
-	uint32_t reserved;
-	volatile uint32_t count;
-	volatile uint32_t take;
-	volatile uint32_t peek[4];
-};
-
 /*  Consolidated structure */
 struct ark_mpu_t {
 	struct ark_mpu_id_t id;
@@ -93,12 +75,6 @@  struct ark_mpu_t {
 	uint8_t reserved1[(ARK_MPU_CFG - ARK_MPU_HW) -
 			  sizeof(struct ark_mpu_hw_t)];
 	struct ark_mpu_cfg_t cfg;
-	uint8_t reserved2[(ARK_MPU_STATS - ARK_MPU_CFG) -
-			  sizeof(struct ark_mpu_cfg_t)];
-	struct ark_mpu_stats_t stats;
-	uint8_t reserved3[(ARK_MPU_DEBUG - ARK_MPU_STATS) -
-			  sizeof(struct ark_mpu_stats_t)];
-	struct ark_mpu_debug_t debug;
 };
 
 uint16_t ark_api_num_queues(struct ark_mpu_t *mpu);
@@ -113,7 +89,6 @@  int ark_mpu_configure(struct ark_mpu_t *mpu, rte_iova_t ring,
 
 void ark_mpu_dump(struct ark_mpu_t *mpu, const char *msg, uint16_t idx);
 void ark_mpu_dump_setup(struct ark_mpu_t *mpu, uint16_t qid);
-void ark_mpu_reset_stats(struct ark_mpu_t *mpu);
 
 /*  this action is in a performance critical path */
 static inline void