npr->TaskRetryIdReq = 1;
                }
                npr->acceptRspCode = PRLI_REQ_EXECUTED;
-               npr->estabImagePair = 1;
+
+               /* Set image pair for complementary pairs only. */
+               if (ndlp->nlp_type & NLP_FCP_TARGET)
+                       npr->estabImagePair = 1;
+               else
+                       npr->estabImagePair = 0;
                npr->readXferRdyDis = 1;
                npr->ConfmComplAllowed = 1;
                npr->prliType = PRLI_FCP_TYPE;
                npr->initiatorFunc = 1;
+
+               /* Xmit PRLI ACC response tag <ulpIoTag> */
+               lpfc_printf_vlog(vport, KERN_INFO,
+                                LOG_ELS | LOG_NODE | LOG_DISCOVERY,
+                                "6014 FCP issue PRLI ACC imgpair %d "
+                                "retry %d task %d\n",
+                                npr->estabImagePair,
+                                npr->Retry, npr->TaskRetryIdReq);
+
        } else if (prli_fc4_req == PRLI_NVME_TYPE) {
                /* Respond with an NVME PRLI Type */
                npr_nvme = (struct lpfc_nvme_prli *) pcmd;
 
        struct lpfc_nvme_prli *nvpr;
        void *temp_ptr;
        u32 ulp_status;
+       bool acc_imode_sps = false;
 
        cmdiocb = (struct lpfc_iocbq *) arg;
        rspiocb = cmdiocb->rsp_iocb;
                goto out_err;
        }
 
-       if (npr && (npr->acceptRspCode == PRLI_REQ_EXECUTED) &&
-           (npr->prliType == PRLI_FCP_TYPE)) {
-               lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC,
-                                "6028 FCP NPR PRLI Cmpl Init %d Target %d\n",
-                                npr->initiatorFunc,
-                                npr->targetFunc);
-               if (npr->initiatorFunc)
-                       ndlp->nlp_type |= NLP_FCP_INITIATOR;
-               if (npr->targetFunc) {
-                       ndlp->nlp_type |= NLP_FCP_TARGET;
-                       if (npr->writeXferRdyDis)
-                               ndlp->nlp_flag |= NLP_FIRSTBURST;
+       if (npr && npr->prliType == PRLI_FCP_TYPE) {
+               lpfc_printf_vlog(vport, KERN_INFO,
+                                LOG_ELS | LOG_NODE | LOG_DISCOVERY,
+                                "6028 FCP NPR PRLI Cmpl Init %d Target %d "
+                                "EIP %d AccCode x%x\n",
+                                npr->initiatorFunc, npr->targetFunc,
+                                npr->estabImagePair, npr->acceptRspCode);
+
+               if (npr->acceptRspCode == PRLI_INV_SRV_PARM) {
+                       /* Strict initiators don't establish an image pair. */
+                       if (npr->initiatorFunc && !npr->targetFunc &&
+                           !npr->estabImagePair)
+                               acc_imode_sps = true;
                }
-               if (npr->Retry)
-                       ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
 
+               if (npr->acceptRspCode == PRLI_REQ_EXECUTED || acc_imode_sps) {
+                       if (npr->initiatorFunc)
+                               ndlp->nlp_type |= NLP_FCP_INITIATOR;
+                       if (npr->targetFunc) {
+                               ndlp->nlp_type |= NLP_FCP_TARGET;
+                               if (npr->writeXferRdyDis)
+                                       ndlp->nlp_flag |= NLP_FIRSTBURST;
+                       }
+                       if (npr->Retry)
+                               ndlp->nlp_fcp_info |= NLP_FCP_2_DEVICE;
+               }
        } else if (nvpr &&
                   (bf_get_be32(prli_acc_rsp_code, nvpr) ==
                    PRLI_REQ_EXECUTED) &&