rc = qed_final_cleanup(p_hwfn, p_hwfn->p_main_ptt,
                                               p_hwfn->rel_pf_id, false);
                        if (rc) {
-                               DP_NOTICE(p_hwfn, "Final cleanup failed\n");
+                               qed_hw_err_notify(p_hwfn, p_hwfn->p_main_ptt,
+                                                 QED_HW_ERR_RAMROD_FAIL,
+                                                 "Final cleanup failed\n");
                                goto load_err;
                        }
                }
 
                                                            dst_type,
                                                            length_cur);
                if (qed_status) {
-                       DP_NOTICE(p_hwfn,
-                                 "qed_dmae_execute_sub_operation Failed with error 0x%x. source_addr 0x%llx, destination addr 0x%llx, size_in_dwords 0x%x\n",
-                                 qed_status, src_addr, dst_addr, length_cur);
+                       qed_hw_err_notify(p_hwfn, p_ptt, QED_HW_ERR_DMAE_FAIL,
+                                         "qed_dmae_execute_sub_operation Failed with error 0x%x. source_addr 0x%llx, destination addr 0x%llx, size_in_dwords 0x%x\n",
+                                         qed_status, src_addr,
+                                         dst_addr, length_cur);
                        break;
                }
        }
 
        return qed_pglueb_rbc_attn_handler(p_hwfn, p_hwfn->p_dpc_ptt);
 }
 
+static int qed_fw_assertion(struct qed_hwfn *p_hwfn)
+{
+       qed_hw_err_notify(p_hwfn, p_hwfn->p_dpc_ptt, QED_HW_ERR_FW_ASSERT,
+                         "FW assertion!\n");
+
+       return -EINVAL;
+}
+
 #define QED_DORQ_ATTENTION_REASON_MASK  (0xfffff)
 #define QED_DORQ_ATTENTION_OPAQUE_MASK  (0xffff)
 #define QED_DORQ_ATTENTION_OPAQUE_SHIFT (0x0)
        {
                {       /* After Invert 4 */
                        {"General Attention 32", ATTENTION_SINGLE,
-                        NULL, MAX_BLOCK_ID},
+                        qed_fw_assertion,
+                        MAX_BLOCK_ID},
                        {"General Attention %d",
                         (2 << ATTENTION_LENGTH_SHIFT) |
                         (33 << ATTENTION_OFFSET_SHIFT), NULL, MAX_BLOCK_ID},
                qed_int_attn_print(p_hwfn, p_aeu->block_index,
                                   ATTN_TYPE_INTERRUPT, !b_fatal);
 
-
-       /* If the attention is benign, no need to prevent it */
-       if (!rc)
+       /* Reach assertion if attention is fatal */
+       if (b_fatal)
+               qed_hw_err_notify(p_hwfn, p_hwfn->p_dpc_ptt, QED_HW_ERR_HW_ATTN,
+                                 "`%s': Fatal attention\n",
+                                 p_bit_name);
+       else /* If the attention is benign, no need to prevent it */
                goto out;
 
        /* Prevent this Attention from being asserted in the future */
 
                if (!QED_MB_FLAGS_IS_SET(p_mb_params, AVOID_BLOCK))
                        qed_mcp_cmd_set_blocking(p_hwfn, true);
 
+               qed_hw_err_notify(p_hwfn, p_ptt,
+                                 QED_HW_ERR_MFW_RESP_FAIL, NULL);
                return -EAGAIN;
        }
 
 
                return 0;
        }
 err:
-       DP_NOTICE(p_hwfn,
-                 "Ramrod is stuck [CID %08x cmd %02x protocol %02x echo %04x]\n",
-                 le32_to_cpu(p_ent->elem.hdr.cid),
-                 p_ent->elem.hdr.cmd_id,
-                 p_ent->elem.hdr.protocol_id,
-                 le16_to_cpu(p_ent->elem.hdr.echo));
+       p_ptt = qed_ptt_acquire(p_hwfn);
+       if (!p_ptt)
+               return -EBUSY;
+       qed_hw_err_notify(p_hwfn, p_ptt, QED_HW_ERR_RAMROD_FAIL,
+                         "Ramrod is stuck [CID %08x cmd %02x protocol %02x echo %04x]\n",
+                         le32_to_cpu(p_ent->elem.hdr.cid),
+                         p_ent->elem.hdr.cmd_id,
+                         p_ent->elem.hdr.protocol_id,
+                         le16_to_cpu(p_ent->elem.hdr.echo));
+       qed_ptt_release(p_hwfn, p_ptt);
 
        return -EBUSY;
 }