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 0bdd2bb0bbd315337ed887b8b7078c48e26bab30..24dabcd2a36c6af8e4bb29f88ee395e5ebd94445 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);