From 875020cedb09f33b29de6b8aeef2d40d3b371672 Mon Sep 17 00:00:00 2001 From: Lars Munch Date: Wed, 7 Jun 2023 11:58:25 +0200 Subject: [PATCH] Set target function register before checking for busy According to the documentation the target function register should be set before checking o_msg_status when sending mbox message from PF. Without this fix the wrong target fn will potentially be checked for busy. Signed-off-by: Lars Munch --- .../drivers/net/qdma/qdma_access/qdma_mbox_protocol.c | 8 ++++---- .../driver/libqdma/qdma_access/qdma_mbox_protocol.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/QDMA/DPDK/drivers/net/qdma/qdma_access/qdma_mbox_protocol.c b/QDMA/DPDK/drivers/net/qdma/qdma_access/qdma_mbox_protocol.c index 3dbae0d85..cd9d638c8 100755 --- a/QDMA/DPDK/drivers/net/qdma/qdma_access/qdma_mbox_protocol.c +++ b/QDMA/DPDK/drivers/net/qdma/qdma_access/qdma_mbox_protocol.c @@ -1964,14 +1964,14 @@ int qdma_mbox_send(void *dev_hndl, uint8_t is_vf, uint32_t *raw_data) uint16_t dst_func_id = msg->hdr.dst_func_id; uint32_t mbox_base = get_mbox_offset(dev_hndl, is_vf); - v = qdma_reg_read(dev_hndl, mbox_base + MBOX_FN_STATUS); - if (v & F_MBOX_FN_STATUS_OUT_MSG) - return -QDMA_ERR_MBOX_SEND_BUSY; - if (!is_vf) qdma_reg_write(dev_hndl, mbox_base + MBOX_FN_TARGET, V_MBOX_FN_TARGET_ID(dst_func_id)); + v = qdma_reg_read(dev_hndl, mbox_base + MBOX_FN_STATUS); + if (v & F_MBOX_FN_STATUS_OUT_MSG) + return -QDMA_ERR_MBOX_SEND_BUSY; + for (i = 0; i < MBOX_MSG_REG_MAX; i++, reg += MBOX_MSG_STEP) qdma_reg_write(dev_hndl, mbox_base + reg, raw_data[i]); diff --git a/QDMA/linux-kernel/driver/libqdma/qdma_access/qdma_mbox_protocol.c b/QDMA/linux-kernel/driver/libqdma/qdma_access/qdma_mbox_protocol.c index 67e7268cb..0d668bfcc 100755 --- a/QDMA/linux-kernel/driver/libqdma/qdma_access/qdma_mbox_protocol.c +++ b/QDMA/linux-kernel/driver/libqdma/qdma_access/qdma_mbox_protocol.c @@ -1948,14 +1948,14 @@ int qdma_mbox_send(void *dev_hndl, uint8_t is_vf, uint32_t *raw_data) uint16_t dst_func_id = msg->hdr.dst_func_id; uint32_t mbox_base = get_mbox_offset(dev_hndl, is_vf); - v = qdma_reg_read(dev_hndl, mbox_base + MBOX_FN_STATUS); - if (v & F_MBOX_FN_STATUS_OUT_MSG) - return -QDMA_ERR_MBOX_SEND_BUSY; - if (!is_vf) qdma_reg_write(dev_hndl, mbox_base + MBOX_FN_TARGET, V_MBOX_FN_TARGET_ID(dst_func_id)); + v = qdma_reg_read(dev_hndl, mbox_base + MBOX_FN_STATUS); + if (v & F_MBOX_FN_STATUS_OUT_MSG) + return -QDMA_ERR_MBOX_SEND_BUSY; + for (i = 0; i < MBOX_MSG_REG_MAX; i++, reg += MBOX_MSG_STEP) qdma_reg_write(dev_hndl, mbox_base + reg, raw_data[i]);