uint16_t response[MAILBOX_REGISTER_COUNT];
        uint16_t config[4], new_config[4];
        uint8_t *fw_sts_ptr;
-       uint8_t *req_data = NULL;
+       void *req_data = NULL;
        dma_addr_t req_data_dma;
        uint32_t req_data_len;
        uint8_t *rsp_data = NULL;
            bsg_request->rqst_data.h_vendor.vendor_cmd[2];
 
        if (atomic_read(&vha->loop_state) == LOOP_READY &&
-           (ha->current_topology == ISP_CFG_F ||
-           (get_unaligned_le32(req_data) == ELS_OPCODE_BYTE &&
-            req_data_len == MAX_ELS_FRAME_PAYLOAD)) &&
-           elreq.options == EXTERNAL_LOOPBACK) {
+           ((ha->current_topology == ISP_CFG_F && (elreq.options & 7) >= 2) ||
+           ((IS_QLA81XX(ha) || IS_QLA8031(ha) || IS_QLA8044(ha)) &&
+           get_unaligned_le32(req_data) == ELS_OPCODE_BYTE &&
+           req_data_len == MAX_ELS_FRAME_PAYLOAD &&
+           elreq.options == EXTERNAL_LOOPBACK))) {
                type = "FC_BSG_HST_VENDOR_ECHO_DIAG";
                ql_dbg(ql_dbg_user, vha, 0x701e,
                    "BSG request type: %s.\n", type);