Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a951267 authored by Liad Kaufman's avatar Liad Kaufman Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: send dbg config hcmds to fw if set in tlv



Send all debug-configuration HCMDs that are set in the TLVs
to the FW. This may include HCMDs to configure the FW
monitor and FW log level, for example.

Signed-off-by: default avatarLiad Kaufman <liad.kaufman@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 490fefeb
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -394,6 +394,42 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm)
	return ret;
}

static int iwl_mvm_start_fw_dbg_conf(struct iwl_mvm *mvm,
				     enum iwl_fw_dbg_conf conf_id)
{
	u8 *ptr;
	int ret;
	int i;

	if (WARN_ONCE(conf_id >= ARRAY_SIZE(mvm->fw->dbg_conf_tlv),
		      "Invalid configuration %d\n", conf_id))
		return -EINVAL;

	if (!mvm->fw->dbg_conf_tlv[conf_id])
		return -EINVAL;

	if (mvm->fw_dbg_conf != FW_DBG_INVALID)
		IWL_WARN(mvm, "FW already configured (%d) - re-configuring\n",
			 mvm->fw_dbg_conf);

	/* Send all HCMDs for configuring the FW debug */
	ptr = (void *)&mvm->fw->dbg_conf_tlv[conf_id]->hcmd;
	for (i = 0; i < mvm->fw->dbg_conf_tlv[conf_id]->num_of_hcmds; i++) {
		struct iwl_fw_dbg_conf_hcmd *cmd = (void *)ptr;

		ret = iwl_mvm_send_cmd_pdu(mvm, cmd->id, 0,
					   le16_to_cpu(cmd->len), cmd->data);
		if (ret)
			return ret;

		ptr += sizeof(*cmd);
		ptr += le16_to_cpu(cmd->len);
	}

	mvm->fw_dbg_conf = conf_id;
	return ret;
}

int iwl_mvm_up(struct iwl_mvm *mvm)
{
	int ret, i;
@@ -445,6 +481,9 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
	if (ret)
		IWL_ERR(mvm, "Failed to initialize Smart Fifo\n");

	mvm->fw_dbg_conf = FW_DBG_INVALID;
	iwl_mvm_start_fw_dbg_conf(mvm, FW_DBG_CUSTOM);

	ret = iwl_send_tx_ant_cfg(mvm, mvm->fw->valid_tx_ant);
	if (ret)
		goto error;
+1 −0
Original line number Diff line number Diff line
@@ -670,6 +670,7 @@ struct iwl_mvm {
	/* -1 for always, 0 for never, >0 for that many times */
	s8 restart_fw;
	struct work_struct fw_error_dump_wk;
	enum iwl_fw_dbg_conf fw_dbg_conf;

#ifdef CONFIG_IWLWIFI_LEDS
	struct led_classdev led;