(XSEM_REG_FAST_MEMORY + SEM_FAST_REG_INT_RAM + \
        XSTORM_PQ_INFO_OFFSET(pq_id))
 
+static const char * const s_protocol_types[] = {
+       "PROTOCOLID_ISCSI", "PROTOCOLID_FCOE", "PROTOCOLID_ROCE",
+       "PROTOCOLID_CORE", "PROTOCOLID_ETH", "PROTOCOLID_IWARP",
+       "PROTOCOLID_TOE", "PROTOCOLID_PREROCE", "PROTOCOLID_COMMON",
+       "PROTOCOLID_TCP", "PROTOCOLID_RDMA", "PROTOCOLID_SCSI",
+};
+
+static const char *s_ramrod_cmd_ids[][28] = {
+       {
+       "ISCSI_RAMROD_CMD_ID_UNUSED", "ISCSI_RAMROD_CMD_ID_INIT_FUNC",
+        "ISCSI_RAMROD_CMD_ID_DESTROY_FUNC",
+        "ISCSI_RAMROD_CMD_ID_OFFLOAD_CONN",
+        "ISCSI_RAMROD_CMD_ID_UPDATE_CONN",
+        "ISCSI_RAMROD_CMD_ID_TERMINATION_CONN",
+        "ISCSI_RAMROD_CMD_ID_CLEAR_SQ", "ISCSI_RAMROD_CMD_ID_MAC_UPDATE",
+        "ISCSI_RAMROD_CMD_ID_CONN_STATS", },
+       { "FCOE_RAMROD_CMD_ID_INIT_FUNC", "FCOE_RAMROD_CMD_ID_DESTROY_FUNC",
+        "FCOE_RAMROD_CMD_ID_STAT_FUNC",
+        "FCOE_RAMROD_CMD_ID_OFFLOAD_CONN",
+        "FCOE_RAMROD_CMD_ID_TERMINATE_CONN", },
+       { "RDMA_RAMROD_UNUSED", "RDMA_RAMROD_FUNC_INIT",
+        "RDMA_RAMROD_FUNC_CLOSE", "RDMA_RAMROD_REGISTER_MR",
+        "RDMA_RAMROD_DEREGISTER_MR", "RDMA_RAMROD_CREATE_CQ",
+        "RDMA_RAMROD_RESIZE_CQ", "RDMA_RAMROD_DESTROY_CQ",
+        "RDMA_RAMROD_CREATE_SRQ", "RDMA_RAMROD_MODIFY_SRQ",
+        "RDMA_RAMROD_DESTROY_SRQ", "RDMA_RAMROD_START_NS_TRACKING",
+        "RDMA_RAMROD_STOP_NS_TRACKING", "ROCE_RAMROD_CREATE_QP",
+        "ROCE_RAMROD_MODIFY_QP", "ROCE_RAMROD_QUERY_QP",
+        "ROCE_RAMROD_DESTROY_QP", "ROCE_RAMROD_CREATE_UD_QP",
+        "ROCE_RAMROD_DESTROY_UD_QP", "ROCE_RAMROD_FUNC_UPDATE",
+        "ROCE_RAMROD_SUSPEND_QP", "ROCE_RAMROD_QUERY_SUSPENDED_QP",
+        "ROCE_RAMROD_CREATE_SUSPENDED_QP", "ROCE_RAMROD_RESUME_QP",
+        "ROCE_RAMROD_SUSPEND_UD_QP", "ROCE_RAMROD_RESUME_UD_QP",
+        "ROCE_RAMROD_CREATE_SUSPENDED_UD_QP", "ROCE_RAMROD_FLUSH_DPT_QP", },
+       { "CORE_RAMROD_UNUSED", "CORE_RAMROD_RX_QUEUE_START",
+        "CORE_RAMROD_TX_QUEUE_START", "CORE_RAMROD_RX_QUEUE_STOP",
+        "CORE_RAMROD_TX_QUEUE_STOP",
+        "CORE_RAMROD_RX_QUEUE_FLUSH",
+        "CORE_RAMROD_TX_QUEUE_UPDATE", "CORE_RAMROD_QUEUE_STATS_QUERY", },
+       { "ETH_RAMROD_UNUSED", "ETH_RAMROD_VPORT_START",
+        "ETH_RAMROD_VPORT_UPDATE", "ETH_RAMROD_VPORT_STOP",
+        "ETH_RAMROD_RX_QUEUE_START", "ETH_RAMROD_RX_QUEUE_STOP",
+        "ETH_RAMROD_TX_QUEUE_START", "ETH_RAMROD_TX_QUEUE_STOP",
+        "ETH_RAMROD_FILTERS_UPDATE", "ETH_RAMROD_RX_QUEUE_UPDATE",
+        "ETH_RAMROD_RX_CREATE_OPENFLOW_ACTION",
+        "ETH_RAMROD_RX_ADD_OPENFLOW_FILTER",
+        "ETH_RAMROD_RX_DELETE_OPENFLOW_FILTER",
+        "ETH_RAMROD_RX_ADD_UDP_FILTER",
+        "ETH_RAMROD_RX_DELETE_UDP_FILTER",
+        "ETH_RAMROD_RX_CREATE_GFT_ACTION",
+        "ETH_RAMROD_RX_UPDATE_GFT_FILTER", "ETH_RAMROD_TX_QUEUE_UPDATE",
+        "ETH_RAMROD_RGFS_FILTER_ADD", "ETH_RAMROD_RGFS_FILTER_DEL",
+        "ETH_RAMROD_TGFS_FILTER_ADD", "ETH_RAMROD_TGFS_FILTER_DEL",
+        "ETH_RAMROD_GFS_COUNTERS_REPORT_REQUEST", },
+       { "RDMA_RAMROD_UNUSED", "RDMA_RAMROD_FUNC_INIT",
+        "RDMA_RAMROD_FUNC_CLOSE", "RDMA_RAMROD_REGISTER_MR",
+        "RDMA_RAMROD_DEREGISTER_MR", "RDMA_RAMROD_CREATE_CQ",
+        "RDMA_RAMROD_RESIZE_CQ", "RDMA_RAMROD_DESTROY_CQ",
+        "RDMA_RAMROD_CREATE_SRQ", "RDMA_RAMROD_MODIFY_SRQ",
+        "RDMA_RAMROD_DESTROY_SRQ", "RDMA_RAMROD_START_NS_TRACKING",
+        "RDMA_RAMROD_STOP_NS_TRACKING",
+        "IWARP_RAMROD_CMD_ID_TCP_OFFLOAD",
+        "IWARP_RAMROD_CMD_ID_MPA_OFFLOAD",
+        "IWARP_RAMROD_CMD_ID_MPA_OFFLOAD_SEND_RTR",
+        "IWARP_RAMROD_CMD_ID_CREATE_QP", "IWARP_RAMROD_CMD_ID_QUERY_QP",
+        "IWARP_RAMROD_CMD_ID_MODIFY_QP",
+        "IWARP_RAMROD_CMD_ID_DESTROY_QP",
+        "IWARP_RAMROD_CMD_ID_ABORT_TCP_OFFLOAD", },
+       { NULL }, /*TOE*/
+       { NULL }, /*PREROCE*/
+       { "COMMON_RAMROD_UNUSED", "COMMON_RAMROD_PF_START",
+            "COMMON_RAMROD_PF_STOP", "COMMON_RAMROD_VF_START",
+            "COMMON_RAMROD_VF_STOP", "COMMON_RAMROD_PF_UPDATE",
+            "COMMON_RAMROD_RL_UPDATE", "COMMON_RAMROD_EMPTY", }
+};
+
 /******************** INTERNAL IMPLEMENTATION *********************/
 
 /* Returns the external VOQ number */
        qed_wr(p_hwfn, p_ptt, CDU_REG_TCFC_CTX_VALID0, ctx_validation);
 }
 
+const char *qed_get_protocol_type_str(u32 protocol_type)
+{
+       if (protocol_type >= ARRAY_SIZE(s_protocol_types))
+               return "Invalid protocol type";
+
+       return s_protocol_types[protocol_type];
+}
+
+const char *qed_get_ramrod_cmd_id_str(u32 protocol_type, u32 ramrod_cmd_id)
+{
+       const char *ramrod_cmd_id_str;
+
+       if (protocol_type >= ARRAY_SIZE(s_ramrod_cmd_ids))
+               return "Invalid protocol type";
+
+       if (ramrod_cmd_id >= ARRAY_SIZE(s_ramrod_cmd_ids[0]))
+               return "Invalid Ramrod command ID";
+
+       ramrod_cmd_id_str = s_ramrod_cmd_ids[protocol_type][ramrod_cmd_id];
+
+       if (!ramrod_cmd_id_str)
+               return "Invalid Ramrod command ID";
+
+       return ramrod_cmd_id_str;
+}
+
 static u32 qed_get_rdma_assert_ram_addr(struct qed_hwfn *p_hwfn, u8 storm_id)
 {
        switch (storm_id) {
 
        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",
+                         "Ramrod is stuck [CID %08x %s:%02x %s:%02x echo %04x]\n",
                          le32_to_cpu(p_ent->elem.hdr.cid),
+                         qed_get_ramrod_cmd_id_str(p_ent->elem.hdr.protocol_id,
+                                                   p_ent->elem.hdr.cmd_id),
                          p_ent->elem.hdr.cmd_id,
-                         p_ent->elem.hdr.protocol_id,
+                         qed_get_protocol_type_str(p_ent->elem.hdr.protocol_id),
+                                                   p_ent->elem.hdr.protocol_id,
                          le16_to_cpu(p_ent->elem.hdr.echo));
        qed_ptt_release(p_hwfn, p_ptt);
 
                return -EINVAL;
        }
 
-       DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
-                  "Ramrod header: [CID 0x%08x CMD 0x%02x protocol 0x%02x] Data pointer: [%08x:%08x] Completion Mode: %s\n",
+       DP_VERBOSE(p_hwfn,
+                  QED_MSG_SPQ,
+                  "Ramrod hdr: [CID 0x%08x %s:0x%02x %s:0x%02x] Data ptr: [%08x:%08x] Cmpltion Mode: %s\n",
                   p_ent->elem.hdr.cid,
+                  qed_get_ramrod_cmd_id_str(p_ent->elem.hdr.protocol_id,
+                                            p_ent->elem.hdr.cmd_id),
                   p_ent->elem.hdr.cmd_id,
-                  p_ent->elem.hdr.protocol_id,
-                  p_ent->elem.data_ptr.hi,
-                  p_ent->elem.data_ptr.lo,
+                  qed_get_protocol_type_str(p_ent->elem.hdr.protocol_id),
+                                            p_ent->elem.hdr.protocol_id,
+                  p_ent->elem.data_ptr.hi, p_ent->elem.data_ptr.lo,
                   D_TRINE(p_ent->comp_mode, QED_SPQ_MODE_EBLOCK,
                           QED_SPQ_MODE_BLOCK, "MODE_EBLOCK", "MODE_BLOCK",
                           "MODE_CB"));
 {
        qed_spq_async_comp_cb cb;
 
-       if (!p_hwfn->p_spq || (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE))
+       if (!p_hwfn->p_spq)
                return -EINVAL;
 
+       if (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE) {
+               DP_ERR(p_hwfn, "Wrong protocol: %s:%d\n",
+                      qed_get_protocol_type_str(p_eqe->protocol_id),
+                      p_eqe->protocol_id);
+
+               return -EINVAL;
+       }
+
        cb = p_hwfn->p_spq->async_comp_cb[p_eqe->protocol_id];
        if (cb) {
                return cb(p_hwfn, p_eqe->opcode, p_eqe->echo,
                          &p_eqe->data, p_eqe->fw_return_code);
        } else {
                DP_NOTICE(p_hwfn,
-                         "Unknown Async completion for protocol: %d\n",
+                         "Unknown Async completion for %s:%d\n",
+                         qed_get_protocol_type_str(p_eqe->protocol_id),
                          p_eqe->protocol_id);
+
                return -EINVAL;
        }
 }
        if (p_hwfn->cdev->recov_in_prog) {
                DP_VERBOSE(p_hwfn,
                           QED_MSG_SPQ,
-                          "Recovery is in progress. Skip spq post [cmd %02x protocol %02x]\n",
-                          p_ent->elem.hdr.cmd_id, p_ent->elem.hdr.protocol_id);
+                          "Recovery is in progress. Skip spq post [%s:%02x %s:%02x]\n",
+                          qed_get_ramrod_cmd_id_str(p_ent->elem.hdr.protocol_id,
+                                                    p_ent->elem.hdr.cmd_id),
+                          p_ent->elem.hdr.cmd_id,
+                          qed_get_protocol_type_str(p_ent->elem.hdr.protocol_id),
+                          p_ent->elem.hdr.protocol_id);
 
                /* Let the flow complete w/o any error handling */
                qed_spq_recov_set_ret_code(p_ent, fw_return_code);