--- /dev/null
+From 0229cdafb6f67064a217591d48b0f6abf14e8385 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Wed, 19 Mar 2014 18:36:39 +0100
+Subject: iwlwifi: mvm: delay enabling smart FIFO until after beacon RX
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit 0229cdafb6f67064a217591d48b0f6abf14e8385 upstream.
+
+If we have no beacon data before association, delay smart FIFO
+enablement until after we have this data.
+
+Not doing so can cause association failures in extremely silent
+environments (usually only a shielded box/room) as beacon RX is
+not sent to the host immediately, and then the association time
+event ends without the host receiving any beacon even though it
+was on the air - it's just stuck on the FIFO.
+
+Fixes: 1f3b0ff8ecce ("iwlwifi: mvm: Add Smart FIFO support")
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ drivers/net/wireless/iwlwifi/mvm/mac80211.c | 1 +
+ drivers/net/wireless/iwlwifi/mvm/sf.c | 3 ++-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
++++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+@@ -971,6 +971,7 @@ static void iwl_mvm_bss_info_changed_sta
+ */
+ iwl_mvm_remove_time_event(mvm, mvmvif,
+ &mvmvif->time_event_data);
++ iwl_mvm_sf_update(mvm, vif, false);
+ } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
+ BSS_CHANGED_QOS)) {
+ ret = iwl_mvm_power_update_mode(mvm, vif);
+--- a/drivers/net/wireless/iwlwifi/mvm/sf.c
++++ b/drivers/net/wireless/iwlwifi/mvm/sf.c
+@@ -274,7 +274,8 @@ int iwl_mvm_sf_update(struct iwl_mvm *mv
+ return -EINVAL;
+ if (changed_vif->type != NL80211_IFTYPE_STATION) {
+ new_state = SF_UNINIT;
+- } else if (changed_vif->bss_conf.assoc) {
++ } else if (changed_vif->bss_conf.assoc &&
++ changed_vif->bss_conf.dtim_period) {
+ mvmvif = iwl_mvm_vif_from_mac80211(changed_vif);
+ sta_id = mvmvif->ap_sta_id;
+ new_state = SF_FULL_ON;