MAILBOX_t *mb = &pmb->u.mb;
        struct lpfc_dmabuf *mp = (struct lpfc_dmabuf *) pmb->context1;
        struct lpfc_vport  *vport = pmb->vport;
-
+       struct serv_parm *sp = &vport->fc_sparam;
+       uint32_t ed_tov;
 
        /* Check for error */
        if (mb->mbxStatus) {
 
        memcpy((uint8_t *) &vport->fc_sparam, (uint8_t *) mp->virt,
               sizeof (struct serv_parm));
+
+       ed_tov = be32_to_cpu(sp->cmn.e_d_tov);
+       if (sp->cmn.edtovResolution)    /* E_D_TOV ticks are in nanoseconds */
+               ed_tov = (ed_tov + 999999) / 1000000;
+
+       phba->fc_edtov = ed_tov;
+       phba->fc_ratov = (2 * ed_tov) / 1000;
+       if (phba->fc_ratov < FF_DEF_RATOV) {
+               /* RA_TOV should be atleast 10sec for initial flogi */
+               phba->fc_ratov = FF_DEF_RATOV;
+       }
+
        lpfc_update_vport_wwn(vport);
        if (vport->port_type == LPFC_PHYSICAL_PORT) {
                memcpy(&phba->wwnn, &vport->fc_nodename, sizeof(phba->wwnn));
 
 
 #define FF_DEF_EDTOV          2000     /* Default E_D_TOV (2000ms) */
 #define FF_DEF_ALTOV            15     /* Default AL_TIME (15ms) */
-#define FF_DEF_RATOV             2     /* Default RA_TOV (2s) */
+#define FF_DEF_RATOV            10     /* Default RA_TOV (10s) */
 #define FF_DEF_ARBTOV         1900     /* Default ARB_TOV (1900ms) */
 
 #define LPFC_BUF_RING0        64       /* Number of buffers to post to RING