+++ /dev/null
-From 2d93aee152b1758a94a18fe15d72153ba73b5679 Mon Sep 17 00:00:00 2001
-From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-Date: Tue, 24 Dec 2013 14:15:41 +0200
-Subject: iwlwifi: pcie: enable oscillator for L1 exit
-
-From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
-
-commit 2d93aee152b1758a94a18fe15d72153ba73b5679 upstream.
-
-Enabling the oscillator consumes slightly more power (100uA)
-but allows to make sure that we exit from L1 on time.
-
-Not doing so might lead to a PCIe specification violation
-since we might wake up from L1 at the wrong time.
-This issue has been identified on 3160 and 7260 only.
-On older NICs L1 off is not enabled, on newer NICs (7265),
-the issue is fixed.
-
-When the bug occurs the user sees that the NIC has
-disappeared from the PCI bridge, any access to the device
-returns 0xff.
-
-This fixes:
- https://bugzilla.kernel.org/show_bug.cgi?id=64541
-
-and has been extensively discussed here:
- http://markmail.org/thread/mfmpzqt3r333n4bo
-
-Fixes: 99cd47142399 ("iwlwifi: add 7000 series device configuration")
-Reported-and-tested-by: wzyboy <wzyboy@wzyboy.org>
-Reviewed-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/iwl-prph.h | 4 ++++
- drivers/net/wireless/iwlwifi/pcie/trans.c | 22 ++++++++++++++++++++++
- 2 files changed, 26 insertions(+)
-
---- a/drivers/net/wireless/iwlwifi/iwl-prph.h
-+++ b/drivers/net/wireless/iwlwifi/iwl-prph.h
-@@ -260,4 +260,8 @@ static inline unsigned int SCD_QUEUE_STA
-
- /*********************** END TX SCHEDULER *************************************/
-
-+/* Oscillator clock */
-+#define OSC_CLK (0xa04068)
-+#define OSC_CLK_FORCE_CONTROL (0x8)
-+
- #endif /* __iwl_prph_h__ */
---- a/drivers/net/wireless/iwlwifi/pcie/trans.c
-+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
-@@ -206,6 +206,28 @@ static int iwl_pcie_apm_init(struct iwl_
- goto out;
- }
-
-+ if (trans->cfg->host_interrupt_operation_mode) {
-+ /*
-+ * This is a bit of an abuse - This is needed for 7260 / 3160
-+ * only check host_interrupt_operation_mode even if this is
-+ * not related to host_interrupt_operation_mode.
-+ *
-+ * Enable the oscillator to count wake up time for L1 exit. This
-+ * consumes slightly more power (100uA) - but allows to be sure
-+ * that we wake up from L1 on time.
-+ *
-+ * This looks weird: read twice the same register, discard the
-+ * value, set a bit, and yet again, read that same register
-+ * just to discard the value. But that's the way the hardware
-+ * seems to like it.
-+ */
-+ iwl_read_prph(trans, OSC_CLK);
-+ iwl_read_prph(trans, OSC_CLK);
-+ iwl_set_bits_prph(trans, OSC_CLK, OSC_CLK_FORCE_CONTROL);
-+ iwl_read_prph(trans, OSC_CLK);
-+ iwl_read_prph(trans, OSC_CLK);
-+ }
-+
- /*
- * Enable DMA clock and wait for it to stabilize.
- *