[v1,1/5] net/ark: update mpu code to match current hardware version
Checks
Commit Message
new version code
remove device-level global operations
remove ark_mpu_reset_stats function
Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com>
---
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 ++---------------------------
4 files changed, 6 insertions(+), 50 deletions(-)
Comments
On 5/6/2022 10:27 PM, Ed Czeck wrote:
> new version code
> remove device-level global operations
> remove ark_mpu_reset_stats function
>
Hi Ed, please find a few comments inline.
Also I assume 'mpu' is an abbreviation, can you please document what it
stands for in the commit log, like MPU (M.. P.. U..)?
And can you please make it uppercase in the commit title, also if you
can add them to 'devtools/words-case.txt' (in a separate patch), it will
be checked next time by './devtools/check-git-log.sh' script.
Same for all patches.
> Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com>
> ---
> 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 ++---------------------------
> 4 files changed, 6 insertions(+), 50 deletions(-)
>
<...>
> @@ -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) {
The driver will work with a specific version of the 'MPU'. So a device
previously working with previous version of the driver, won't work
anymore after this patch, and will be forced to a (FW/bitstream/?) update.
I am not sure how problematic is this from the stable release
perspective. cc'ed maintainers.
But at least won't it be good to document this in release notes, and
perhaps having a table in the driver documentation to list which DPDK
version requires which HW version can be good, what do you think?
On 18/05/2022 13:54, Ferruh Yigit wrote:
> On 5/6/2022 10:27 PM, Ed Czeck wrote:
>> new version code
>> remove device-level global operations
>> remove ark_mpu_reset_stats function
>>
>
> Hi Ed, please find a few comments inline.
>
> Also I assume 'mpu' is an abbreviation, can you please document what it
> stands for in the commit log, like MPU (M.. P.. U..)?
> And can you please make it uppercase in the commit title, also if you
> can add them to 'devtools/words-case.txt' (in a separate patch), it will
> be checked next time by './devtools/check-git-log.sh' script.
> Same for all patches.
>
>> Signed-off-by: Ed Czeck <ed.czeck@atomicrules.com>
>> ---
>> 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 ++---------------------------
>> 4 files changed, 6 insertions(+), 50 deletions(-)
>>
>
> <...>
>
>> @@ -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) {
>
> The driver will work with a specific version of the 'MPU'. So a device
> previously working with previous version of the driver, won't work
> anymore after this patch, and will be forced to a (FW/bitstream/?) update.
> I am not sure how problematic is this from the stable release
> perspective. cc'ed maintainers.
>
While it is nice-to-have, stable releases are not guaranteed to work
with future HW/FW/3rd party software etc.
More importantly, a user should not *have* to make updates outside DPDK
when moving along a single DPDK LTS stream. e.g. 21.11.1 -> 21.11.2.
> But at least won't it be good to document this in release notes, and
> perhaps having a table in the driver documentation to list which DPDK
> version requires which HW version can be good, what do you think?
>
I agree documenting the matching versions is good for usability. e.g.
http://doc.dpdk.org/guides/nics/ice.html#recommended-matching-list
@@ -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);
}
@@ -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);
}
@@ -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
@@ -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