/* * In addition to the health status codes provided below, the firmware might * generate Health Status Codes that are not pertinent to the end-user. * For instance, Health Code 0x1002 is triggered when the command fails. * Such codes should be disregarded by the end-user. * The below lookup requires to be sorted by code.
*/
staticconstchar ice_common_port_solutions[] = "Check your cable connection. Change or replace the module or cable. Manually set speed and duplex."; staticconstchar ice_port_number_label[] = "Port Number"; staticconstchar ice_update_nvm_solution[] = "Update to the latest NVM image.";
staticconststruct ice_health_status ice_health_status_lookup[] = {
{ICE_AQC_HEALTH_STATUS_ERR_UNKNOWN_MOD_STRICT, "An unsupported module was detected.",
ice_common_port_solutions, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_MOD_TYPE, "Module type is not supported.", "Change or replace the module or cable.", {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_MOD_QUAL, "Module is not qualified.",
ice_common_port_solutions, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_MOD_COMM, "Device cannot communicate with the module.", "Check your cable connection. Change or replace the module or cable. Manually set speed and duplex.",
{ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_MOD_CONFLICT, "Unresolved module conflict.", "Manually set speed/duplex or change the port option. If the problem persists, use a cable/module that is found in the supported modules and cables list for this device.",
{ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_MOD_NOT_PRESENT, "Module is not present.", "Check that the module is inserted correctly. If the problem persists, use a cable/module that is found in the supported modules and cables list for this device.",
{ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_INFO_MOD_UNDERUTILIZED, "Underutilized module.", "Change or replace the module or cable. Change the port option.",
{ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_UNKNOWN_MOD_LENIENT, "An unsupported module was detected.",
ice_common_port_solutions, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_INVALID_LINK_CFG, "Invalid link configuration.",
NULL, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_PORT_ACCESS, "Port hardware access error.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_PORT_UNREACHABLE, "A port is unreachable.", "Change the port option. Update to the latest NVM image."},
{ICE_AQC_HEALTH_STATUS_INFO_PORT_SPEED_MOD_LIMITED, "Port speed is limited due to module.", "Change the module or configure the port option to match the current module speed. Change the port option.",
{ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_PARALLEL_FAULT, "All configured link modes were attempted but failed to establish link. The device will restart the process to establish link.", "Check link partner connection and configuration.",
{ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_INFO_PORT_SPEED_PHY_LIMITED, "Port speed is limited by PHY capabilities.", "Change the module to align to port option.", {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_NETLIST_TOPO, "LOM topology netlist is corrupted.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_NETLIST, "Unrecoverable netlist error.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_TOPO_CONFLICT, "Port topology conflict.", "Change the port option. Update to the latest NVM image."},
{ICE_AQC_HEALTH_STATUS_ERR_LINK_HW_ACCESS, "Unrecoverable hardware access error.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_LINK_RUNTIME, "Unrecoverable runtime error.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_DNL_INIT, "Link management engine failed to initialize.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_ERR_PHY_FW_LOAD, "Failed to load the firmware image in the external PHY.",
ice_update_nvm_solution, {ice_port_number_label}},
{ICE_AQC_HEALTH_STATUS_INFO_RECOVERY, "The device is in firmware recovery mode.",
ice_update_nvm_solution, {"Extended Error"}},
{ICE_AQC_HEALTH_STATUS_ERR_FLASH_ACCESS, "The flash chip cannot be accessed.", "If issue persists, call customer support.", {"Access Type"}},
{ICE_AQC_HEALTH_STATUS_ERR_NVM_AUTH, "NVM authentication failed.",
ice_update_nvm_solution},
{ICE_AQC_HEALTH_STATUS_ERR_OROM_AUTH, "Option ROM authentication failed.",
ice_update_nvm_solution},
{ICE_AQC_HEALTH_STATUS_ERR_DDP_AUTH, "DDP package authentication failed.", "Update to latest base driver and DDP package."},
{ICE_AQC_HEALTH_STATUS_ERR_NVM_COMPAT, "NVM image is incompatible.",
ice_update_nvm_solution},
{ICE_AQC_HEALTH_STATUS_ERR_OROM_COMPAT, "Option ROM is incompatible.",
ice_update_nvm_solution, {"Expected PCI Device ID", "Expected Module ID"}},
{ICE_AQC_HEALTH_STATUS_ERR_DCB_MIB, "Supplied MIB file is invalid. DCB reverted to default configuration.", "Disable FW-LLDP and check DCBx system configuration.",
{ice_port_number_label, "MIB ID"}},
};
if (enable)
enable_bits = ICE_AQC_HEALTH_STATUS_SET_PF_SPECIFIC_MASK |
ICE_AQC_HEALTH_STATUS_SET_GLOBAL_MASK;
ret = ice_aq_set_health_status_cfg(&pf->hw, enable_bits); if (ret)
dev_err(ice_pf_to_dev(pf), "Failed to %s firmware health events, err %d aq_err %s\n",
str_enable_disable(enable), ret,
libie_aq_str(pf->hw.adminq.sq_last_status));
}
/** * ice_process_health_status_event - Process the health status event from FW * @pf: pointer to the PF structure * @event: event structure containing the Health Status Event opcode * * Decode the Health Status Events and print the associated messages
*/ void ice_process_health_status_event(struct ice_pf *pf, struct ice_rq_event_info *event)
{ conststruct ice_aqc_health_status_elem *health_info; conststruct ice_aqc_get_health_status *cmd;
u16 count;
if (count > (event->buf_len / sizeof(*health_info))) {
dev_err(ice_pf_to_dev(pf), "Received a health status event with invalid element count\n"); return;
}
for (size_t i = 0; i < count; i++) { conststruct ice_health_status *health_code;
u16 status_code;
/** * ice_devlink_health_report - boilerplate to call given @reporter * * @reporter: devlink health reporter to call, do nothing on NULL * @msg: message to pass up, "event name" is fine * @priv_ctx: typically some event struct
*/ staticvoid ice_devlink_health_report(struct devlink_health_reporter *reporter, constchar *msg, void *priv_ctx)
{ if (!reporter) return;
/* We do not do auto recovering, so return value of the below function * will always be 0, thus we do ignore it.
*/
devlink_health_report(reporter, msg, priv_ctx);
}
/** * ice_report_mdd_event - Report an MDD event through devlink health * @pf: the PF device structure * @src: the HW block that was the source of this MDD event * @pf_num: the pf_num on which the MDD event occurred * @vf_num: the vf_num on which the MDD event occurred * @event: the event type of the MDD event * @queue: the queue on which the MDD event occurred * * Report an MDD event that has occurred on this PF.
*/ void ice_report_mdd_event(struct ice_pf *pf, enum ice_mdd_src src, u8 pf_num,
u16 vf_num, u8 event, u16 queue)
{ struct ice_mdd_event ev = {
.src = src,
.pf_num = pf_num,
.vf_num = vf_num,
.event = event,
.queue = queue,
};
/** * ice_fmsg_put_ptr - put hex value of pointer into fmsg * * @fmsg: devlink fmsg under construction * @name: name to pass * @ptr: 64 bit value to print as hex and put into fmsg
*/ staticvoid ice_fmsg_put_ptr(struct devlink_fmsg *fmsg, constchar *name, void *ptr)
{ char buf[sizeof(ptr) * 3];
/** * ice_health_clear - clear devlink health issues after a reset * @pf: the PF device structure * * Mark the PF in healthy state again after a reset has completed.
*/ void ice_health_clear(struct ice_pf *pf)
{
ice_health_assign_healthy_state(pf->health_reporters.mdd);
ice_health_assign_healthy_state(pf->health_reporters.tx_hang);
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.