X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fhinic%2Fbase%2Fhinic_pmd_mgmt.c;h=babb93a204b32d71bbe9a20a6841564bdd0cd191;hb=9b5f64904b1fb01310e94a6c884b4a7f8e51b3a0;hp=eee50a80d10e0af1b1b2ea5ce1f35947a99f555e;hpb=b8582d051af1b9b696b963a81ded9a585e497c40;p=dpdk.git diff --git a/drivers/net/hinic/base/hinic_pmd_mgmt.c b/drivers/net/hinic/base/hinic_pmd_mgmt.c index eee50a80d1..babb93a204 100644 --- a/drivers/net/hinic/base/hinic_pmd_mgmt.c +++ b/drivers/net/hinic/base/hinic_pmd_mgmt.c @@ -248,6 +248,19 @@ static void free_msg_buf(struct hinic_msg_pf_to_mgmt *pf_to_mgmt) free_recv_msg(&pf_to_mgmt->recv_msg_from_mgmt); } +static int hinic_get_mgmt_channel_status(void *hwdev) +{ + struct hinic_hwif *hwif = ((struct hinic_hwdev *)hwdev)->hwif; + u32 val; + + if (hinic_func_type((struct hinic_hwdev *)hwdev) == TYPE_VF) + return false; + + val = hinic_hwif_read_reg(hwif, HINIC_ICPL_RESERVD_ADDR); + + return HINIC_GET_MGMT_CHANNEL_STATUS(val, MGMT_CHANNEL_STATUS); +} + /** * send_msg_to_mgmt_async - send async message * @pf_to_mgmt: PF to MGMT channel @@ -309,6 +322,14 @@ static int send_msg_to_mgmt_sync(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, u64 header; u16 cmd_size = mgmt_msg_len(msg_len); + /* If fw is hot active, return failed */ + if (hinic_get_mgmt_channel_status(pf_to_mgmt->hwdev)) { + if (mod == HINIC_MOD_COMM || mod == HINIC_MOD_L2NIC) + return HINIC_DEV_BUSY_ACTIVE_FW; + else + return -EBUSY; + } + if (direction == HINIC_MSG_RESPONSE) prepare_header(pf_to_mgmt, &header, msg_len, mod, ack_type, direction, cmd, resp_msg_id); @@ -449,7 +470,7 @@ hinic_pf_to_mgmt_sync(struct hinic_hwdev *hwdev, recv_msg->msg_len); *out_size = recv_msg->msg_len; } else { - PMD_DRV_LOG(ERR, "Mgmt rsp's msg len:%u overflow.", + PMD_DRV_LOG(ERR, "Mgmt rsp's msg len: %u overflow.", recv_msg->msg_len); err = -ERANGE; } @@ -462,19 +483,6 @@ unlock_sync_msg: return err; } -static int hinic_get_mgmt_channel_status(void *hwdev) -{ - struct hinic_hwif *hwif = ((struct hinic_hwdev *)hwdev)->hwif; - u32 val; - - if (hinic_func_type((struct hinic_hwdev *)hwdev) == TYPE_VF) - return false; - - val = hinic_hwif_read_reg(hwif, HINIC_ICPL_RESERVD_ADDR); - - return HINIC_GET_MGMT_CHANNEL_STATUS(val, MGMT_CHANNEL_STATUS); -} - int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, void *buf_in, u16 in_size, void *buf_out, u16 *out_size, u32 timeout) @@ -484,10 +492,6 @@ int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, if (!hwdev || in_size > HINIC_MSG_TO_MGMT_MAX_LEN) return -EINVAL; - /* If status is hot upgrading, don't send message to mgmt */ - if (hinic_get_mgmt_channel_status(hwdev)) - return -EPERM; - if (hinic_func_type(hwdev) == TYPE_VF) { rc = hinic_mbox_to_pf(hwdev, mod, cmd, buf_in, in_size, buf_out, out_size, timeout); @@ -500,8 +504,7 @@ int hinic_msg_to_mgmt_sync(void *hwdev, enum hinic_mod_type mod, u8 cmd, } int hinic_msg_to_mgmt_no_ack(void *hwdev, enum hinic_mod_type mod, u8 cmd, - void *buf_in, u16 in_size, __rte_unused void *buf_out, - __rte_unused u16 *out_size) + void *buf_in, u16 in_size) { struct hinic_msg_pf_to_mgmt *pf_to_mgmt = ((struct hinic_hwdev *)hwdev)->pf_to_mgmt; @@ -577,7 +580,7 @@ static void hinic_mgmt_recv_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, buf_out, &out_size); break; default: - PMD_DRV_LOG(ERR, "No handler, mod = %d", recv_msg->mod); + PMD_DRV_LOG(ERR, "No handler, mod: %d", recv_msg->mod); break; } @@ -617,7 +620,7 @@ static int recv_mgmt_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, if (!check_mgmt_seq_id_and_seg_len(recv_msg, seq_id, seq_len)) { PMD_DRV_LOG(ERR, - "Mgmt msg sequence and segment check fail, " + "Mgmt msg sequence and segment check failed, " "func id: 0x%x, front id: 0x%x, current id: 0x%x, seg len: 0x%x", hinic_global_func_id(pf_to_mgmt->hwdev), recv_msg->sed_id, seq_id, seq_len); @@ -741,8 +744,7 @@ int hinic_aeq_poll_msg(struct hinic_eq *eq, u32 timeout, void *param) event = EQ_ELEM_DESC_GET(aeqe_desc, TYPE); if (EQ_ELEM_DESC_GET(aeqe_desc, SRC)) { - PMD_DRV_LOG(ERR, "AEQ sw event not support %d", - event); + PMD_DRV_LOG(ERR, "AEQ sw event not support %d", event); return -ENODEV; } else {