Commit 95411d04 authored by Avri Altman's avatar Avri Altman Committed by Emmanuel Grumbach
Browse files

iwlwifi: pcie: Control access to the NIC's PM registers via iwl_cfg



Allow a cleaner way to access those hw-dependent registers,
instead of using the product family type etc.

Signed-off-by: default avatarAvri Altman <avri.altman@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 6a8ac59c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -163,7 +163,8 @@ static const struct iwl_tt_params iwl8000_tt_params = {
	.smem_len = IWL8260_SMEM_LEN,					\
	.default_nvm_file_B_step = DEFAULT_NVM_FILE_FAMILY_8000B,	\
	.default_nvm_file_C_step = DEFAULT_NVM_FILE_FAMILY_8000C,	\
	.thermal_params = &iwl8000_tt_params
	.thermal_params = &iwl8000_tt_params,				\
	.apmg_not_supported = true

const struct iwl_cfg iwl8260_2n_cfg = {
	.name = "Intel(R) Dual Band Wireless N 8260",
+1 −0
Original line number Diff line number Diff line
@@ -360,6 +360,7 @@ struct iwl_cfg {
	const u32 smem_offset;
	const u32 smem_len;
	const struct iwl_tt_params *thermal_params;
	bool apmg_not_supported;
};

/*
+1 −1
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ static void iwl_mvm_nic_config(struct iwl_op_mode *op_mode)
	 * (PCIe power is lost before PERST# is asserted), causing ME FW
	 * to lose ownership and not being able to obtain it back.
	 */
	if (mvm->trans->cfg->device_family != IWL_DEVICE_FAMILY_8000)
	if (!mvm->trans->cfg->apmg_not_supported)
		iwl_set_bits_mask_prph(mvm->trans, APMG_PS_CTRL_REG,
				       APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS,
				       ~APMG_PS_CTRL_EARLY_PWR_OFF_RESET_DIS);
+1 −0
Original line number Diff line number Diff line
@@ -775,6 +775,7 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)

	/* W/A for WiFi/WiMAX coex and WiMAX own the RF */
	if (trans->cfg->internal_wimax_coex &&
	    !trans->cfg->apmg_not_supported &&
	    (!(iwl_read_prph(trans, APMG_CLK_CTRL_REG) &
			     APMS_CLK_VAL_MRB_FUNC_MODE) ||
	     (iwl_read_prph(trans, APMG_PS_CTRL_REG) &
+8 −8
Original line number Diff line number Diff line
@@ -182,6 +182,9 @@ static void iwl_trans_pcie_write_shr(struct iwl_trans *trans, u32 reg, u32 val)

static void iwl_pcie_set_pwr(struct iwl_trans *trans, bool vaux)
{
	if (!trans->cfg->apmg_not_supported)
		return;

	if (vaux && pci_pme_capable(to_pci_dev(trans->dev), PCI_D3cold))
		iwl_set_bits_mask_prph(trans, APMG_PS_CTRL_REG,
				       APMG_PS_CTRL_VAL_PWR_SRC_VAUX,
@@ -315,7 +318,7 @@ static int iwl_pcie_apm_init(struct iwl_trans *trans)
	 * bits do not disable clocks.  This preserves any hardware
	 * bits already set by default in "CLK_CTRL_REG" after reset.
	 */
	if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) {
	if (!trans->cfg->apmg_not_supported) {
		iwl_write_prph(trans, APMG_CLK_EN_REG,
			       APMG_CLK_VAL_DMA_CLK_RQT);
		udelay(20);
@@ -515,7 +518,6 @@ static int iwl_pcie_nic_init(struct iwl_trans *trans)

	spin_unlock(&trans_pcie->irq_lock);

	if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000)
	iwl_pcie_set_pwr(trans, false);

	iwl_op_mode_nic_config(trans->op_mode);
@@ -1063,7 +1065,7 @@ static void iwl_trans_pcie_stop_device(struct iwl_trans *trans, bool low_power)
		iwl_pcie_rx_stop(trans);

		/* Power-down device's busmaster DMA clocks */
		if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) {
		if (!trans->cfg->apmg_not_supported) {
			iwl_write_prph(trans, APMG_CLK_DIS_REG,
				       APMG_CLK_VAL_DMA_CLK_RQT);
			udelay(5);
@@ -1160,7 +1162,6 @@ static void iwl_trans_pcie_d3_suspend(struct iwl_trans *trans, bool test)
	 */
	iwl_trans_pcie_tx_reset(trans);

	if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000)
	iwl_pcie_set_pwr(trans, true);
}

@@ -1199,7 +1200,6 @@ static int iwl_trans_pcie_d3_resume(struct iwl_trans *trans,
		return ret;
	}

	if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000)
	iwl_pcie_set_pwr(trans, false);

	iwl_trans_pcie_tx_reset(trans);