diff options
Diffstat (limited to 'sys/contrib/dev/iwlwifi/fw/dump.c')
| -rw-r--r-- | sys/contrib/dev/iwlwifi/fw/dump.c | 44 | 
1 files changed, 36 insertions, 8 deletions
| diff --git a/sys/contrib/dev/iwlwifi/fw/dump.c b/sys/contrib/dev/iwlwifi/fw/dump.c index 8f107ceec407..f633124979ab 100644 --- a/sys/contrib/dev/iwlwifi/fw/dump.c +++ b/sys/contrib/dev/iwlwifi/fw/dump.c @@ -1,6 +1,6 @@  // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause  /* - * Copyright (C) 2012-2014, 2018-2023 Intel Corporation + * Copyright (C) 2012-2014, 2018-2025 Intel Corporation   * Copyright (C) 2013-2014 Intel Mobile Communications GmbH   * Copyright (C) 2015-2017 Intel Deutschland GmbH   */ @@ -199,7 +199,7 @@ static void iwl_fwrt_dump_lmac_error_log(struct iwl_fw_runtime *fwrt, u8 lmac_nu  		IWL_ERR(trans, "HW error, resetting before reading\n");  		/* reset the device */ -		err = iwl_trans_sw_reset(trans, true); +		err = iwl_trans_sw_reset(trans);  		if (err)  			return; @@ -417,10 +417,10 @@ static void iwl_fwrt_dump_iml_error_log(struct iwl_fw_runtime *fwrt)  	struct iwl_trans *trans = fwrt->trans;  	u32 error, data1; -	if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) { +	if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_22000) {  		error = UMAG_SB_CPU_2_STATUS;  		data1 = UMAG_SB_CPU_1_STATUS; -	} else if (fwrt->trans->trans_cfg->device_family >= +	} else if (fwrt->trans->mac_cfg->device_family >=  		   IWL_DEVICE_FAMILY_8000) {  		error = SB_CPU_2_STATUS;  		data1 = SB_CPU_1_STATUS; @@ -439,7 +439,7 @@ static void iwl_fwrt_dump_iml_error_log(struct iwl_fw_runtime *fwrt)  	IWL_ERR(fwrt, "0x%08X | IML/ROM data1\n",  		iwl_read_umac_prph(trans, data1)); -	if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) +	if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_22000)  		IWL_ERR(fwrt, "0x%08X | IML/ROM WFPM_AUTH_KEY_0\n",  			iwl_read_umac_prph(trans, SB_MODIFY_CFG_FLAG));  } @@ -490,7 +490,7 @@ void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt)  	struct iwl_pc_data *pc_data;  	u8 count; -	if (!test_bit(STATUS_DEVICE_ENABLED, &fwrt->trans->status)) { +	if (!iwl_trans_device_enabled(fwrt->trans)) {  		IWL_ERR(fwrt,  			"DEVICE_ENABLED bit is not set. Aborting dump.\n");  		return; @@ -508,7 +508,7 @@ void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt)  		iwl_fwrt_dump_rcm_error_log(fwrt, 1);  	iwl_fwrt_dump_iml_error_log(fwrt);  	iwl_fwrt_dump_fseq_regs(fwrt); -	if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22000) { +	if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_22000) {  		pc_data = fwrt->trans->dbg.pc_data;  		if (!iwl_trans_grab_nic_access(fwrt->trans)) @@ -522,7 +522,7 @@ void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt)  		iwl_trans_release_nic_access(fwrt->trans);  	} -	if (fwrt->trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) { +	if (fwrt->trans->mac_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {  		u32 scratch = iwl_read32(fwrt->trans, CSR_FUNC_SCRATCH);  		IWL_ERR(fwrt, "Function Scratch status:\n"); @@ -530,3 +530,31 @@ void iwl_fwrt_dump_error_logs(struct iwl_fw_runtime *fwrt)  	}  }  IWL_EXPORT_SYMBOL(iwl_fwrt_dump_error_logs); + +bool iwl_fwrt_read_err_table(struct iwl_trans *trans, u32 base, u32 *err_id) +{ +	struct error_table_start { +		/* cf. struct iwl_error_event_table */ +		u32 valid; +		__le32 err_id; +	} err_info = {}; +	int ret; + +	if (err_id) +		*err_id = 0; + +	if (!base) +		return false; + +	ret = iwl_trans_read_mem_bytes(trans, base, +				       &err_info, sizeof(err_info)); + +	if (ret) +		return true; + +	if (err_info.valid && err_id) +		*err_id = le32_to_cpu(err_info.err_id); + +	return !!err_info.valid; +} +IWL_EXPORT_SYMBOL(iwl_fwrt_read_err_table); | 
