switch (event) {
        case BFA_FCS_ITNIM_SM_ONLINE:
                bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
+               itnim->prli_retries = 0;
                bfa_fcs_itnim_send_prli(itnim, NULL);
                break;
 
 
        switch (event) {
        case BFA_FCS_ITNIM_SM_TIMEOUT:
-               bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
-               bfa_fcs_itnim_send_prli(itnim, NULL);
+               if (itnim->prli_retries < BFA_FCS_RPORT_MAX_RETRIES) {
+                       itnim->prli_retries++;
+                       bfa_trc(itnim->fcs, itnim->prli_retries);
+                       bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
+                       bfa_fcs_itnim_send_prli(itnim, NULL);
+               } else {
+                       /* invoke target offline */
+                       bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
+                       bfa_fcs_rport_logo_imp(itnim->rport);
+               }
                break;
 
        case BFA_FCS_ITNIM_SM_OFFLINE:
 
 
 #include <fcs/bfa_fcs_rport.h>
 
+#define BFA_FCS_RPORT_MAX_RETRIES               (5)
+
 void bfa_fcs_rport_uf_recv(struct bfa_fcs_rport_s *rport, struct fchs_s *fchs,
                        u16 len);
 void bfa_fcs_rport_scn(struct bfa_fcs_rport_s *rport);
 
        struct bfa_fcs_s        *fcs;           /*  fcs instance         */
        struct bfa_timer_s      timer;          /*  timer functions      */
        struct bfa_itnim_s      *bfa_itnim;     /*  BFA itnim struct     */
+       u32                     prli_retries;   /*  max prli retry attempts */
        bfa_boolean_t           seq_rec;        /*  seq recovery support */
        bfa_boolean_t           rec_support;    /*  REC supported        */
        bfa_boolean_t           conf_comp;      /*  FCP_CONF     support */
 
 
 BFA_TRC_FILE(FCS, RPORT);
 
-#define BFA_FCS_RPORT_MAX_RETRIES              (5)
-
 /* In millisecs */
 static u32 bfa_fcs_rport_del_timeout =
                        BFA_FCS_RPORT_DEF_DEL_TIMEOUT * 1000;
                 */
 
        case RPSM_EVENT_TIMEOUT:
-               rport->plogi_retries++;
                if (rport->plogi_retries < BFA_FCS_RPORT_MAX_RETRIES) {
+                       rport->plogi_retries++;
                        bfa_sm_set_state(rport, bfa_fcs_rport_sm_plogi_sending);
                        bfa_fcs_rport_send_plogi(rport, NULL);
                } else {