Commit a78be210 authored by Johannes Berg's avatar Johannes Berg Committed by Wey-Yi Guy

iwlwifi: move uCode flags handling to op_mode

The uCode flags modification is op_mode dependent
since the P2P config is an op-mode config.

This also fixes P2P enabling: due to the uCode
loading code shuffle moving the SKU check before
the EEPROM was read it was always false and would
always disable PAN/P2P.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent e211b242
...@@ -1151,6 +1151,7 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, ...@@ -1151,6 +1151,7 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus,
struct iwl_priv *priv; struct iwl_priv *priv;
struct ieee80211_hw *hw; struct ieee80211_hw *hw;
u16 num_mac; u16 num_mac;
u32 ucode_flags;
/************************ /************************
* 1. Allocating HW data * 1. Allocating HW data
...@@ -1242,6 +1243,22 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, ...@@ -1242,6 +1243,22 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus,
************************/ ************************/
iwl_set_hw_params(priv); iwl_set_hw_params(priv);
ucode_flags = fw->ucode_capa.flags;
#ifndef CONFIG_IWLWIFI_P2P
ucode_flags &= ~IWL_UCODE_TLV_FLAGS_PAN;
#endif
if (!(hw_params(priv).sku & EEPROM_SKU_CAP_IPAN_ENABLE))
ucode_flags &= ~IWL_UCODE_TLV_FLAGS_PAN;
/*
* if not PAN, then don't support P2P -- might be a uCode
* packaging bug or due to the eeprom check above
*/
if (!(ucode_flags & IWL_UCODE_TLV_FLAGS_PAN))
ucode_flags &= ~IWL_UCODE_TLV_FLAGS_P2P;
/******************* /*******************
* 6. Setup priv * 6. Setup priv
*******************/ *******************/
...@@ -1266,9 +1283,9 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, ...@@ -1266,9 +1283,9 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus,
"%s", fw->fw_version); "%s", fw->fw_version);
priv->new_scan_threshold_behaviour = priv->new_scan_threshold_behaviour =
!!(fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWSCAN); !!(ucode_flags & IWL_UCODE_TLV_FLAGS_NEWSCAN);
if (fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN) { if (ucode_flags & IWL_UCODE_TLV_FLAGS_PAN) {
priv->sta_key_max_num = STA_KEY_MAX_NUM_PAN; priv->sta_key_max_num = STA_KEY_MAX_NUM_PAN;
priv->shrd->cmd_queue = IWL_IPAN_CMD_QUEUE_NUM; priv->shrd->cmd_queue = IWL_IPAN_CMD_QUEUE_NUM;
} else { } else {
...@@ -1282,7 +1299,7 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, ...@@ -1282,7 +1299,7 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus,
fw->ucode_capa.standard_phy_calibration_size + 1; fw->ucode_capa.standard_phy_calibration_size + 1;
/* initialize all valid contexts */ /* initialize all valid contexts */
iwl_init_context(priv, fw->ucode_capa.flags); iwl_init_context(priv, ucode_flags);
/************************************************** /**************************************************
* This is still part of probe() in a sense... * This is still part of probe() in a sense...
......
...@@ -1226,9 +1226,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1226,9 +1226,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
nic->inst_evtlog_size = nic->inst_evtlog_size =
cfg->base_params->max_event_log_size; cfg->base_params->max_event_log_size;
nic->inst_errlog_ptr = pieces.inst_errlog_ptr; nic->inst_errlog_ptr = pieces.inst_errlog_ptr;
#ifndef CONFIG_IWLWIFI_P2P
fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN;
#endif
/* /*
* figure out the offset of chain noise reset and gain commands * figure out the offset of chain noise reset and gain commands
* base on the size of standard phy calibration commands table size * base on the size of standard phy calibration commands table size
...@@ -1238,16 +1236,6 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1238,16 +1236,6 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
fw->ucode_capa.standard_phy_calibration_size = fw->ucode_capa.standard_phy_calibration_size =
IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE; IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE;
if (!(cfg->sku & EEPROM_SKU_CAP_IPAN_ENABLE))
fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN;
/*
* if not PAN, then don't support P2P -- might be a uCode
* packaging bug or due to the eeprom check above
*/
if (!(fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN))
fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_P2P;
/* We have our copies now, allow OS release its copies */ /* We have our copies now, allow OS release its copies */
release_firmware(ucode_raw); release_firmware(ucode_raw);
complete(&nic->request_firmware_complete); complete(&nic->request_firmware_complete);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment