X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fbnxt%2Fbnxt_cpr.c;h=12230dcea4ecb8a3c668952435ea3c3d25c31fe1;hb=f787952d13d20b7eceaf6d1742ea591239b63ba1;hp=f4c9c7266420fdd044417bba1d257553f3a53629;hpb=8117f5f61a7399fb160cc48d05daf6e0aac734f8;p=dpdk.git diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c index f4c9c72664..12230dcea4 100644 --- a/drivers/net/bnxt/bnxt_cpr.c +++ b/drivers/net/bnxt/bnxt_cpr.c @@ -91,6 +91,22 @@ bnxt_process_default_vnic_change(struct bnxt *bp, bnxt_rep_dev_start_op(eth_dev); } +static void bnxt_handle_event_error_report(struct bnxt *bp, + uint32_t data1, + uint32_t data2) +{ + switch (BNXT_EVENT_ERROR_REPORT_TYPE(data1)) { + case HWRM_ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_PAUSE_STORM: + PMD_DRV_LOG(WARNING, "Port:%d Pause Storm detected!\n", + bp->eth_dev->data->port_id); + break; + default: + PMD_DRV_LOG(INFO, "FW reported unknown error type data1 %d" + " data2: %d\n", data1, data2); + break; + } +} + /* * Async event handling */ @@ -103,7 +119,10 @@ void bnxt_handle_async_event(struct bnxt *bp, uint16_t port_id = bp->eth_dev->data->port_id; struct bnxt_error_recovery_info *info; uint32_t event_data; - uint32_t echo_req_data1, echo_req_data2; + uint32_t data1, data2; + + data1 = rte_le_to_cpu_32(async_cmp->event_data1); + data2 = rte_le_to_cpu_32(async_cmp->event_data2); switch (event_id) { case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE: @@ -138,7 +157,7 @@ void bnxt_handle_async_event(struct bnxt *bp, } pthread_mutex_lock(&bp->err_recovery_lock); - event_data = rte_le_to_cpu_32(async_cmp->event_data1); + event_data = data1; /* timestamp_lo/hi values are in units of 100ms */ bp->fw_reset_max_msecs = async_cmp->timestamp_hi ? rte_le_to_cpu_16(async_cmp->timestamp_hi) * 100 : @@ -172,8 +191,7 @@ void bnxt_handle_async_event(struct bnxt *bp, PMD_DRV_LOG(INFO, "Port %u: Error recovery async event received\n", port_id); - event_data = rte_le_to_cpu_32(async_cmp->event_data1) & - EVENT_DATA1_FLAGS_MASK; + event_data = data1 & EVENT_DATA1_FLAGS_MASK; if (event_data & EVENT_DATA1_FLAGS_MASTER_FUNC) info->flags |= BNXT_FLAG_MASTER_FUNC; @@ -200,22 +218,21 @@ void bnxt_handle_async_event(struct bnxt *bp, bnxt_schedule_fw_health_check(bp); break; case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION: - PMD_DRV_LOG(INFO, "DNC event: evt_data1 %#x evt_data2 %#x\n", - rte_le_to_cpu_32(async_cmp->event_data1), - rte_le_to_cpu_32(async_cmp->event_data2)); + PMD_DRV_LOG(INFO, "Port: %u DNC event: data1 %#x data2 %#x\n", + port_id, data1, data2); break; case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE: bnxt_process_default_vnic_change(bp, async_cmp); break; case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ECHO_REQUEST: - echo_req_data1 = rte_le_to_cpu_32(async_cmp->event_data1); - echo_req_data2 = rte_le_to_cpu_32(async_cmp->event_data2); PMD_DRV_LOG(INFO, "Port %u: Received fw echo request: data1 %#x data2 %#x\n", - port_id, echo_req_data1, echo_req_data2); + port_id, data1, data2); if (bp->recovery_info) - bnxt_hwrm_fw_echo_reply(bp, echo_req_data1, - echo_req_data2); + bnxt_hwrm_fw_echo_reply(bp, data1, data2); + break; + case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ERROR_REPORT: + bnxt_handle_event_error_report(bp, data1, data2); break; default: PMD_DRV_LOG(DEBUG, "handle_async_event id = 0x%x\n", event_id);