ncsi_dev_state_config_gls,
        ncsi_dev_state_config_done,
        ncsi_dev_state_suspend_select   = 0x0401,
+       ncsi_dev_state_suspend_gls,
        ncsi_dev_state_suspend_dcnt,
        ncsi_dev_state_suspend_dc,
        ncsi_dev_state_suspend_deselect,
 
                else
                        nca.bytes[0] = 1;
 
-               nd->state = ncsi_dev_state_suspend_dcnt;
+               /* To retrieve the last link states of channels in current
+                * package when current active channel needs fail over to
+                * another one. It means we will possibly select another
+                * channel as next active one. The link states of channels
+                * are most important factor of the selection. So we need
+                * accurate link states. Unfortunately, the link states on
+                * inactive channels can't be updated with LSC AEN in time.
+                */
+               if (ndp->flags & NCSI_DEV_RESHUFFLE)
+                       nd->state = ncsi_dev_state_suspend_gls;
+               else
+                       nd->state = ncsi_dev_state_suspend_dcnt;
                ret = ncsi_xmit_cmd(&nca);
                if (ret)
                        goto error;
 
+               break;
+       case ncsi_dev_state_suspend_gls:
+               ndp->pending_req_num = np->channel_num;
+
+               nca.type = NCSI_PKT_CMD_GLS;
+               nca.package = np->id;
+
+               nd->state = ncsi_dev_state_suspend_dcnt;
+               NCSI_FOR_EACH_CHANNEL(np, nc) {
+                       nca.channel = nc->id;
+                       ret = ncsi_xmit_cmd(&nca);
+                       if (ret)
+                               goto error;
+               }
+
                break;
        case ncsi_dev_state_suspend_dcnt:
                ndp->pending_req_num = 1;