net/ark: update MPU functions for firmware update

- 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>
This commit is contained in:
Ed Czeck 2022-06-07 17:31:44 -04:00 committed by Ferruh Yigit
parent 15827c4de2
commit c8eaa414c4
6 changed files with 29 additions and 50 deletions

View File

@ -300,6 +300,25 @@ 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 releases 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 between DPDK releases and the corresponding
Arkville releases. Intermediate releases not listed below remain
compatible, e.g., DPDK releases 21.05, 21.08, and 21.11 are all compatible
with Arkville releases 21.05, 21.08 and 21.11. LTS versions of DPDK remain
compatible with the corresponding Arkville version. 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
---------------------------

View File

@ -110,6 +110,10 @@ New Features
* Added ``enable_llq`` device argument for controlling the PMD LLQ
(Low Latency Queue) mode.
* **Updated Atomic Rules' Arkville PMD.**
* A firmware version update to Arkville 22.07 is required.
* **Updated Intel iavf driver.**
* Added Tx QoS queue rate limitation support.

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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

View File

@ -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