diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-05-17 06:01:26 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-05-27 05:39:30 -0400 |
commit | 8ade62857ef77bdf639185410fbcd811aa700cb2 (patch) | |
tree | 5b42cce7cf802a11fe12514e02d29cffce16d554 /drivers/net/wireless/iwlwifi | |
parent | dfcb4c3aacedee6838e436fb575b31e138505203 (diff) |
iwlwifi: move D3_CFG_COMPLETE handling into DVM
The MVM firmware doesn't communicate this way, it instead
assumes D3 configuration is complete after a specific host
command (which must be last) has been sent. Handling this
bit thus belongs into the firmware API code, i.e. DVM.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/mac80211.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/trans.c | 7 |
2 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/iwlwifi/dvm/mac80211.c index cab23af0be9e..700215324af8 100644 --- a/drivers/net/wireless/iwlwifi/dvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/dvm/mac80211.c | |||
@@ -426,6 +426,10 @@ static int iwlagn_mac_suspend(struct ieee80211_hw *hw, | |||
426 | if (ret) | 426 | if (ret) |
427 | goto error; | 427 | goto error; |
428 | 428 | ||
429 | /* let the ucode operate on its own */ | ||
430 | iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_SET, | ||
431 | CSR_UCODE_DRV_GP1_BIT_D3_CFG_COMPLETE); | ||
432 | |||
429 | iwl_trans_d3_suspend(priv->trans); | 433 | iwl_trans_d3_suspend(priv->trans); |
430 | 434 | ||
431 | goto out; | 435 | goto out; |
@@ -509,6 +513,10 @@ static int iwlagn_mac_resume(struct ieee80211_hw *hw) | |||
509 | goto out_unlock; | 513 | goto out_unlock; |
510 | } | 514 | } |
511 | 515 | ||
516 | /* uCode is no longer operating by itself */ | ||
517 | iwl_write32(priv->trans, CSR_UCODE_DRV_GP1_CLR, | ||
518 | CSR_UCODE_DRV_GP1_BIT_D3_CFG_COMPLETE); | ||
519 | |||
512 | base = priv->device_pointers.error_event_table; | 520 | base = priv->device_pointers.error_event_table; |
513 | if (!iwlagn_hw_valid_rtc_data_addr(base)) { | 521 | if (!iwlagn_hw_valid_rtc_data_addr(base)) { |
514 | IWL_WARN(priv, "Invalid error table during resume!\n"); | 522 | IWL_WARN(priv, "Invalid error table during resume!\n"); |
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c index a785f49df9b1..0b021305eedf 100644 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c | |||
@@ -580,10 +580,6 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans) | |||
580 | 580 | ||
581 | static void iwl_trans_pcie_d3_suspend(struct iwl_trans *trans) | 581 | static void iwl_trans_pcie_d3_suspend(struct iwl_trans *trans) |
582 | { | 582 | { |
583 | /* let the ucode operate on its own */ | ||
584 | iwl_write32(trans, CSR_UCODE_DRV_GP1_SET, | ||
585 | CSR_UCODE_DRV_GP1_BIT_D3_CFG_COMPLETE); | ||
586 | |||
587 | iwl_disable_interrupts(trans); | 583 | iwl_disable_interrupts(trans); |
588 | iwl_pcie_disable_ict(trans); | 584 | iwl_pcie_disable_ict(trans); |
589 | 585 | ||
@@ -643,9 +639,6 @@ static int iwl_trans_pcie_d3_resume(struct iwl_trans *trans, | |||
643 | return ret; | 639 | return ret; |
644 | } | 640 | } |
645 | 641 | ||
646 | iwl_write32(trans, CSR_UCODE_DRV_GP1_CLR, | ||
647 | CSR_UCODE_DRV_GP1_BIT_D3_CFG_COMPLETE); | ||
648 | |||
649 | *status = IWL_D3_STATUS_ALIVE; | 642 | *status = IWL_D3_STATUS_ALIVE; |
650 | return 0; | 643 | return 0; |
651 | } | 644 | } |