summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/dvm/main.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-06-17 15:42:37 +0300
committerJohannes Berg <johannes.berg@intel.com>2012-06-18 13:47:06 +0200
commitdada03ca73b699337781ae36e1ce4c8fec2da40a (patch)
tree80874968fc76005dc9faf3cced8b178970f70c27 /drivers/net/wireless/iwlwifi/dvm/main.c
parenteb6476441bc2fecf6232a87d0313a85f8e3da7f4 (diff)
downloadlinux-dada03ca73b699337781ae36e1ce4c8fec2da40a.tar.gz
linux-dada03ca73b699337781ae36e1ce4c8fec2da40a.tar.bz2
linux-dada03ca73b699337781ae36e1ce4c8fec2da40a.zip
iwlwifi: disable early power Off reset for all NICs
This feature needs to be disabled for all NICs. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/dvm/main.c')
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/main.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/dvm/main.c b/drivers/net/wireless/iwlwifi/dvm/main.c
index bba3edfb3488..c642c217e29f 100644
--- a/drivers/net/wireless/iwlwifi/dvm/main.c
+++ b/drivers/net/wireless/iwlwifi/dvm/main.c
@@ -51,11 +51,13 @@
#include "iwl-op-mode.h"
#include "iwl-drv.h"
#include "iwl-modparams.h"
+#include "iwl-prph.h"
#include "dev.h"
#include "calib.h"
#include "agn.h"
+
/******************************************************************************
*
* module boiler plate
@@ -2076,7 +2078,16 @@ static void iwl_nic_config(struct iwl_op_mode *op_mode)
CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
CSR_HW_IF_CONFIG_REG_BIT_MAC_SI);
- priv->lib->nic_config(priv);
+ /* W/A : NIC is stuck in a reset state after Early PCIe power off
+ * (PCIe power is lost before PERST# is asserted),
+ * causing ME FW to lose ownership and not being able to obtain it back.
+ */
+ iwl_set_bits_mask_prph(priv->trans, APMG_PS_CTRL_REG,
+ APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS,
+ ~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS);
+
+ if (priv->lib->nic_config)
+ priv->lib->nic_config(priv);
}
static void iwl_wimax_active(struct iwl_op_mode *op_mode)