iwlagn: Enable PCI L1 ACTIVE state after uCode has been loaded
authorGrumbach, Emmanuel <emmanuel.grumbach@intel.com>
Thu, 18 Nov 2010 11:47:38 +0000 (03:47 -0800)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Thu, 2 Dec 2010 16:35:02 +0000 (08:35 -0800)
PCI L1 Active needs to be disabled while loading the uCode so that the bus
doesn't go to sleep. The enablement of L1 Active should be done after
the uCode has sent the ALIVE response. The enablement of L1 Active was
missing.
Enabling L1 Active allows to save power if the BIOS / bus driver allows
it.

I measured the power consumption while not associated and
idle/associated:
L1 Active disabled: 39 mA = 130mW
L1 Active enabled:   6 mA = 20 mW

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-agn-ucode.c

index 0bdd2bb..24dabcd 100644 (file)
@@ -531,6 +531,10 @@ int iwlagn_alive_notify(struct iwl_priv *priv)
 
        spin_unlock_irqrestore(&priv->lock, flags);
 
+       /* Enable L1-Active */
+       iwl_clear_bits_prph(priv, APMG_PCIDEV_STT_REG,
+                         APMG_PCIDEV_STT_VAL_L1_ACT_DIS);
+
        iwlagn_send_wimax_coex(priv);
 
        iwlagn_set_Xtal_calib(priv);