hw_err
struct hw_err_info *info = &hdev->captured_err_info.hw_err;
struct hw_err_info hw_err;
info = &hdev->captured_err_info.hw_err;
struct qm_hw_err *err, *tmp, *hw_err;
hw_err = kzalloc_obj(*hw_err);
if (!hw_err)
hw_err->timestamp = jiffies;
if ((hw_err->timestamp - err->timestamp) / HZ >
list_add(&hw_err->list, &isolate->qm_hw_errs);
static void hw_error_source_handler(struct xe_tile *tile, const enum hardware_error hw_err)
const char *hw_err_str = hw_error_to_str(hw_err);
err_src = xe_mmio_read32(&tile->mmio, DEV_ERR_STAT_REG(hw_err));
csc_hw_error_handler(tile, hw_err);
xe_mmio_write32(&tile->mmio, DEV_ERR_STAT_REG(hw_err), err_src);
enum hardware_error hw_err;
for (hw_err = 0; hw_err < HARDWARE_ERROR_MAX; hw_err++)
if (master_ctl & ERROR_IRQ(hw_err))
hw_error_source_handler(tile, hw_err);
static const char *hw_error_to_str(const enum hardware_error hw_err)
switch (hw_err) {
static void csc_hw_error_handler(struct xe_tile *tile, const enum hardware_error hw_err)
const char *hw_err_str = hw_error_to_str(hw_err);
ctx->hw_err = false;
ctx->hw_err = false;
ctx->hw_err = false;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ctx->hw_err = true;
ret = ctx->hw_err ? -EFAULT : 0;
ctx->encode_errors += ctx->hw_err ? 1 : 0;
bool hw_err;
hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
hw_err(hw, "eeprom read at offset %d failed\n", offset);
hw_err(hw, "eeprom read at offset %d failed\n",
hw_err(hw, "eeprom read at offset %d failed\n",
hw_err(hw, "eeprom read at offset %d failed\n", offset);
hw_err(hw, "eeprom read at offset %d failed\n", offset);
hw_err(hw, "eeprom read at offset %d failed\n",
hw_err(hw, "eeprom read at offset %d failed\n", data_offset);
hw_err(hw, "eeprom read at %d failed\n",
hw_err(hw, "eeprom read at offset %d failed\n", *list_offset);
hw_err(hw, "port expander access failed with %d\n", status);
hw_err(hw, "port expander access failed with %d\n", status);
hw_err(hw, "CS4227 reset did not complete\n");
hw_err(hw, "CS4227 EEPROM did not load successfully\n");
hw_err(hw, "semaphore failed with %d\n", status);
hw_err(hw, "semaphore failed with %d\n", status);
hw_err(hw, "CS4227 reset failed: %d", status);
hw_err(hw, "semaphore failed with %d", status);
hw_err(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
hw_err(hw, "Flow control param set incorrectly\n");
hw_err(hw, "Flow control autoneg is disabled");
hw_err(hw, "The link is down");
hw_err(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n");
hw_err(hw, "Flow control param set incorrectly\n");
hw_err(hw, "rx_pause not valid in strict IEEE mode\n");
static const u8 hw_err[] = { HCI_EV_HARDWARE_ERROR, 0x01, 0x00 };
skb_put_data(skb, hw_err, 3);