void fcoe_ctlr_init(struct fcoe_ctlr *fip)
 {
        fip->state = FIP_ST_LINK_WAIT;
+       fip->mode = FIP_ST_AUTO;
        INIT_LIST_HEAD(&fip->fcfs);
        spin_lock_init(&fip->lock);
        fip->flogi_oxid = FC_XID_UNKNOWN;
                spin_unlock_bh(&fip->lock);
                fc_linkup(fip->lp);
        } else if (fip->state == FIP_ST_LINK_WAIT) {
-               fip->state = FIP_ST_AUTO;
+               fip->state = fip->mode;
                fip->last_link = 1;
                fip->link = 1;
                spin_unlock_bh(&fip->lock);
-               LIBFCOE_FIP_DBG("%s", "setting AUTO mode.\n");
+               if (fip->state == FIP_ST_AUTO)
+                       LIBFCOE_FIP_DBG("%s", "setting AUTO mode.\n");
                fc_linkup(fip->lp);
                fcoe_ctlr_solicit(fip, NULL);
        } else
 
 /**
  * struct fcoe_ctlr - FCoE Controller and FIP state
  * @state:        internal FIP state for network link and FIP or non-FIP mode.
+ * @mode:         LLD-selected mode.
  * @lp:                   &fc_lport: libfc local port.
  * @sel_fcf:      currently selected FCF, or NULL.
  * @fcfs:         list of discovered FCFs.
  */
 struct fcoe_ctlr {
        enum fip_state state;
+       enum fip_state mode;
        struct fc_lport *lp;
        struct fcoe_fcf *sel_fcf;
        struct list_head fcfs;