Commit f34e308b authored by Michal Kosiarz's avatar Michal Kosiarz Committed by Jeff Kirsher

i40e: Add returning AQ critical error to SW

The FW has the ability to return a critical error on every AQ command.
When this critical error occurs then we need to send the correct response
to the caller.
Signed-off-by: default avatarMichal Kosiarz <michal.kosiarz@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 9515a2e0
...@@ -907,11 +907,16 @@ i40e_status i40e_asq_send_command(struct i40e_hw *hw, ...@@ -907,11 +907,16 @@ i40e_status i40e_asq_send_command(struct i40e_hw *hw,
/* update the error if time out occurred */ /* update the error if time out occurred */
if ((!cmd_completed) && if ((!cmd_completed) &&
(!details->async && !details->postpone)) { (!details->async && !details->postpone)) {
i40e_debug(hw, if (rd32(hw, hw->aq.asq.len) & I40E_GL_ATQLEN_ATQCRIT_MASK) {
I40E_DEBUG_AQ_MESSAGE, i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
"AQTX: AQ Critical error.\n");
status = I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR;
} else {
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
"AQTX: Writeback timeout.\n"); "AQTX: Writeback timeout.\n");
status = I40E_ERR_ADMIN_QUEUE_TIMEOUT; status = I40E_ERR_ADMIN_QUEUE_TIMEOUT;
} }
}
asq_send_command_error: asq_send_command_error:
mutex_unlock(&hw->aq.asq_mutex); mutex_unlock(&hw->aq.asq_mutex);
......
...@@ -278,6 +278,8 @@ const char *i40e_stat_str(struct i40e_hw *hw, i40e_status stat_err) ...@@ -278,6 +278,8 @@ const char *i40e_stat_str(struct i40e_hw *hw, i40e_status stat_err)
return "I40E_NOT_SUPPORTED"; return "I40E_NOT_SUPPORTED";
case I40E_ERR_FIRMWARE_API_VERSION: case I40E_ERR_FIRMWARE_API_VERSION:
return "I40E_ERR_FIRMWARE_API_VERSION"; return "I40E_ERR_FIRMWARE_API_VERSION";
case I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR:
return "I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR";
} }
snprintf(hw->err_str, sizeof(hw->err_str), "%d", stat_err); snprintf(hw->err_str, sizeof(hw->err_str), "%d", stat_err);
......
...@@ -95,6 +95,7 @@ enum i40e_status_code { ...@@ -95,6 +95,7 @@ enum i40e_status_code {
I40E_ERR_NOT_READY = -63, I40E_ERR_NOT_READY = -63,
I40E_NOT_SUPPORTED = -64, I40E_NOT_SUPPORTED = -64,
I40E_ERR_FIRMWARE_API_VERSION = -65, I40E_ERR_FIRMWARE_API_VERSION = -65,
I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR = -66,
}; };
#endif /* _I40E_STATUS_H_ */ #endif /* _I40E_STATUS_H_ */
...@@ -837,11 +837,16 @@ i40e_status i40evf_asq_send_command(struct i40e_hw *hw, ...@@ -837,11 +837,16 @@ i40e_status i40evf_asq_send_command(struct i40e_hw *hw,
/* update the error if time out occurred */ /* update the error if time out occurred */
if ((!cmd_completed) && if ((!cmd_completed) &&
(!details->async && !details->postpone)) { (!details->async && !details->postpone)) {
i40e_debug(hw, if (rd32(hw, hw->aq.asq.len) & I40E_VF_ATQLEN1_ATQCRIT_MASK) {
I40E_DEBUG_AQ_MESSAGE, i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
"AQTX: AQ Critical error.\n");
status = I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR;
} else {
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
"AQTX: Writeback timeout.\n"); "AQTX: Writeback timeout.\n");
status = I40E_ERR_ADMIN_QUEUE_TIMEOUT; status = I40E_ERR_ADMIN_QUEUE_TIMEOUT;
} }
}
asq_send_command_error: asq_send_command_error:
mutex_unlock(&hw->aq.asq_mutex); mutex_unlock(&hw->aq.asq_mutex);
......
...@@ -284,6 +284,8 @@ const char *i40evf_stat_str(struct i40e_hw *hw, i40e_status stat_err) ...@@ -284,6 +284,8 @@ const char *i40evf_stat_str(struct i40e_hw *hw, i40e_status stat_err)
return "I40E_NOT_SUPPORTED"; return "I40E_NOT_SUPPORTED";
case I40E_ERR_FIRMWARE_API_VERSION: case I40E_ERR_FIRMWARE_API_VERSION:
return "I40E_ERR_FIRMWARE_API_VERSION"; return "I40E_ERR_FIRMWARE_API_VERSION";
case I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR:
return "I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR";
} }
snprintf(hw->err_str, sizeof(hw->err_str), "%d", stat_err); snprintf(hw->err_str, sizeof(hw->err_str), "%d", stat_err);
......
...@@ -95,6 +95,7 @@ enum i40e_status_code { ...@@ -95,6 +95,7 @@ enum i40e_status_code {
I40E_ERR_NOT_READY = -63, I40E_ERR_NOT_READY = -63,
I40E_NOT_SUPPORTED = -64, I40E_NOT_SUPPORTED = -64,
I40E_ERR_FIRMWARE_API_VERSION = -65, I40E_ERR_FIRMWARE_API_VERSION = -65,
I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR = -66,
}; };
#endif /* _I40E_STATUS_H_ */ #endif /* _I40E_STATUS_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment