Beispiel #1
0
/* initialize to default */
static void iwl_power_init_handle(struct iwl_priv *priv)
{
    struct iwl_power_mgr *pow_data;
    int size = sizeof(struct iwl_power_vec_entry) * IWL_POWER_NUM;
    struct iwl_powertable_cmd *cmd;
    int i;
    u16 lctl;

    IWL_DEBUG_POWER(priv, "Initialize power \n");

    pow_data = &priv->power_data;

    memset(pow_data, 0, sizeof(*pow_data));

    memcpy(&pow_data->pwr_range_0[0], &range_0[0], size);
    memcpy(&pow_data->pwr_range_1[0], &range_1[0], size);
    memcpy(&pow_data->pwr_range_2[0], &range_2[0], size);

    lctl = iwl_pcie_link_ctl(priv);

    IWL_DEBUG_POWER(priv, "adjust power command flags\n");

    for (i = 0; i < IWL_POWER_NUM; i++) {
        cmd = &pow_data->pwr_range_0[i].cmd;

        if (lctl & PCI_CFG_LINK_CTRL_VAL_L0S_EN)
            cmd->flags &= ~IWL_POWER_PCI_PM_MSK;
        else
            cmd->flags |= IWL_POWER_PCI_PM_MSK;
    }
}
Beispiel #2
0
/* initialize to default */
void iwl_power_initialize(struct iwl_priv *priv)
{
	u16 lctl = iwl_pcie_link_ctl(priv);

	priv->power_data.pci_pm = !(lctl & PCI_CFG_LINK_CTRL_VAL_L0S_EN);

	priv->power_data.debug_sleep_level_override = -1;

	iwl_power_cmd_initialize(priv);
}
Beispiel #3
0
static void iwl5000_nic_config(struct iwl_priv *priv)
{
	unsigned long flags;
	u16 radio_cfg;
	u16 lctl;

	spin_lock_irqsave(&priv->lock, flags);

	lctl = iwl_pcie_link_ctl(priv);

	/* HW bug W/A */
	/* L1-ASPM is enabled by BIOS */
	if ((lctl & PCI_CFG_LINK_CTRL_VAL_L1_EN) == PCI_CFG_LINK_CTRL_VAL_L1_EN)
		/* L1-APSM enabled: disable L0S  */
		iwl_set_bit(priv, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED);
	else
		/* L1-ASPM disabled: enable L0S */
		iwl_clear_bit(priv, CSR_GIO_REG, CSR_GIO_REG_VAL_L0S_ENABLED);

	radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG);

	/* write radio config values to register */
	if (EEPROM_RF_CFG_TYPE_MSK(radio_cfg) < EEPROM_5000_RF_CFG_TYPE_MAX)
		iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
			    EEPROM_RF_CFG_TYPE_MSK(radio_cfg) |
			    EEPROM_RF_CFG_STEP_MSK(radio_cfg) |
			    EEPROM_RF_CFG_DASH_MSK(radio_cfg));

	/* set CSR_HW_CONFIG_REG for uCode use */
	iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
		    CSR_HW_IF_CONFIG_REG_BIT_RADIO_SI |
		    CSR_HW_IF_CONFIG_REG_BIT_MAC_SI);

	/* 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, APMG_PS_CTRL_REG,
				APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS,
				~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS);

	spin_unlock_irqrestore(&priv->lock, flags);
}