const struct iwl_sap_me_msg_start_ok *rsp,
                           ssize_t len)
 {
-       struct iwl_mei *mei = mei_cldev_get_drvdata(cldev);
-
        if (len != sizeof(*rsp)) {
                dev_err(&cldev->dev,
                        "got invalid SAP_ME_MSG_START_OK from CSME firmware\n");
 
        mutex_lock(&iwl_mei_mutex);
        set_bit(IWL_MEI_STATUS_SAP_CONNECTED, &iwl_mei_status);
-       /* wifi driver has registered already */
-       if (iwl_mei_cache.ops) {
-               iwl_mei_send_sap_msg(mei->cldev,
-                                    SAP_MSG_NOTIF_WIFIDR_UP);
-               iwl_mei_cache.ops->sap_connected(iwl_mei_cache.priv);
-       }
-
+       /*
+        * We'll receive AMT_STATE SAP message in a bit and
+        * that will continue the flow
+        */
        mutex_unlock(&iwl_mei_mutex);
 }
 
                .val = cpu_to_le32(iwl_mei_cache.rf_kill),
        };
 
+       /* wifi driver has registered already */
+       if (iwl_mei_cache.ops) {
+               iwl_mei_send_sap_msg(mei->cldev,
+                                    SAP_MSG_NOTIF_WIFIDR_UP);
+               iwl_mei_cache.ops->sap_connected(iwl_mei_cache.priv);
+       }
+
        iwl_mei_send_sap_msg(mei->cldev, SAP_MSG_NOTIF_WHO_OWNS_NIC);
 
        if (iwl_mei_cache.conn_info) {
 
        mei = mei_cldev_get_drvdata(iwl_mei_global_cldev);
 
-       if (!mei)
-               goto out;
-
-       if (!mei->amt_enabled)
+       if (!mei && !mei->amt_enabled)
                goto out;
 
        iwl_mei_send_sap_msg_payload(mei->cldev, &msg.hdr);
 
        mei = mei_cldev_get_drvdata(iwl_mei_global_cldev);
 
-       if (!mei)
+       if (!mei && !mei->amt_enabled)
                goto out;
 
        iwl_mei_send_sap_msg_payload(mei->cldev, &msg.hdr);
 
        mei = mei_cldev_get_drvdata(iwl_mei_global_cldev);
 
-       if (!mei)
+       if (!mei && !mei->amt_enabled)
                goto out;
 
        iwl_mei_send_sap_msg_payload(mei->cldev, &msg.hdr);
 
        mei = mei_cldev_get_drvdata(iwl_mei_global_cldev);
 
-       if (!mei)
+       if (!mei && !mei->amt_enabled)
                goto out;
 
        iwl_mei_send_sap_msg_payload(mei->cldev, &msg.hdr);
 
        mei = mei_cldev_get_drvdata(iwl_mei_global_cldev);
 
-       if (!mei)
+       if (!mei && !mei->amt_enabled)
                goto out;
 
        iwl_mei_send_sap_msg_payload(mei->cldev, &msg.hdr);
 
        mei = mei_cldev_get_drvdata(iwl_mei_global_cldev);
 
-       if (!mei)
+       if (!mei && !mei->amt_enabled)
                goto out;
 
        memcpy(msg.sar_chain_info_table, power_limit, sizeof(msg.sar_chain_info_table));
 
                /* we have already a SAP connection */
                if (iwl_mei_is_connected()) {
-                       iwl_mei_send_sap_msg(mei->cldev,
-                                            SAP_MSG_NOTIF_WIFIDR_UP);
-                       ops->rfkill(priv, mei->link_prot_state);
+                       if (mei->amt_enabled)
+                               iwl_mei_send_sap_msg(mei->cldev,
+                                                    SAP_MSG_NOTIF_WIFIDR_UP);
+                       ops->rfkill(priv, mei->link_prot_state, false);
                }
        }
        ret = 0;
 
        mutex_lock(&iwl_mei_mutex);
 
-       /*
-        * Tell CSME that we are going down so that it won't access the
-        * memory anymore, make sure this message goes through immediately.
-        */
-       mei->csa_throttled = false;
-       iwl_mei_send_sap_msg(mei->cldev,
-                            SAP_MSG_NOTIF_HOST_GOES_DOWN);
+       if (mei->amt_enabled) {
+               /*
+                * Tell CSME that we are going down so that it won't access the
+                * memory anymore, make sure this message goes through immediately.
+                */
+               mei->csa_throttled = false;
+               iwl_mei_send_sap_msg(mei->cldev,
+                                    SAP_MSG_NOTIF_HOST_GOES_DOWN);
 
-       for (i = 0; i < SEND_SAP_MAX_WAIT_ITERATION; i++) {
-               if (!iwl_mei_host_to_me_data_pending(mei))
-                       break;
+               for (i = 0; i < SEND_SAP_MAX_WAIT_ITERATION; i++) {
+                       if (!iwl_mei_host_to_me_data_pending(mei))
+                               break;
 
-               msleep(5);
-       }
+                       msleep(20);
+               }
 
-       /*
-        * If we couldn't make sure that CSME saw the HOST_GOES_DOWN message,
-        * it means that it will probably keep reading memory that we are going
-        * to unmap and free, expect IOMMU error messages.
-        */
-       if (i == SEND_SAP_MAX_WAIT_ITERATION)
-               dev_err(&mei->cldev->dev,
-                       "Couldn't get ACK from CSME on HOST_GOES_DOWN message\n");
+               /*
+                * If we couldn't make sure that CSME saw the HOST_GOES_DOWN
+                * message, it means that it will probably keep reading memory
+                * that we are going to unmap and free, expect IOMMU error
+                * messages.
+                */
+               if (i == SEND_SAP_MAX_WAIT_ITERATION)
+                       dev_err(&mei->cldev->dev,
+                               "Couldn't get ACK from CSME on HOST_GOES_DOWN message\n");
+       }
 
        mutex_unlock(&iwl_mei_mutex);