diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/net/wireless/intel/iwlwifi/fw/dbg.c | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/fw/dbg.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/dbg.c | 61 | 
1 files changed, 48 insertions, 13 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c index abf49022edbe..55219974b92b 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c @@ -1038,7 +1038,7 @@ iwl_dump_ini_prph_mac_iter(struct iwl_fw_runtime *fwrt,  	range->range_data_size = reg->dev_addr.size;  	for (i = 0; i < le32_to_cpu(reg->dev_addr.size); i += 4) {  		prph_val = iwl_read_prph(fwrt->trans, addr + i); -		if (prph_val == 0x5a5a5a5a) +		if ((prph_val & ~0xf) == 0xa5a5a5a0)  			return -EBUSY;  		*val++ = cpu_to_le32(prph_val);  	} @@ -1388,13 +1388,13 @@ static void iwl_ini_get_rxf_data(struct iwl_fw_runtime *fwrt,  	if (!data)  		return; +	memset(data, 0, sizeof(*data)); +  	/* make sure only one bit is set in only one fid */  	if (WARN_ONCE(hweight_long(fid1) + hweight_long(fid2) != 1,  		      "fid1=%x, fid2=%x\n", fid1, fid2))  		return; -	memset(data, 0, sizeof(*data)); -  	if (fid1) {  		fifo_idx = ffs(fid1) - 1;  		if (WARN_ONCE(fifo_idx >= MAX_NUM_LMAC, "fifo_idx=%d\n", @@ -1562,7 +1562,7 @@ iwl_dump_ini_dbgi_sram_iter(struct iwl_fw_runtime *fwrt,  		prph_data = iwl_read_prph_no_grab(fwrt->trans, (i % 2) ?  					  DBGI_SRAM_TARGET_ACCESS_RDATA_MSB :  					  DBGI_SRAM_TARGET_ACCESS_RDATA_LSB); -		if (prph_data == 0x5a5a5a5a) { +		if ((prph_data & ~0xf) == 0xa5a5a5a0) {  			iwl_trans_release_nic_access(fwrt->trans);  			return -EBUSY;  		} @@ -1664,14 +1664,10 @@ static __le32 iwl_get_mon_reg(struct iwl_fw_runtime *fwrt, u32 alloc_id,  }  static void * -iwl_dump_ini_mon_fill_header(struct iwl_fw_runtime *fwrt, -			     struct iwl_dump_ini_region_data *reg_data, +iwl_dump_ini_mon_fill_header(struct iwl_fw_runtime *fwrt, u32 alloc_id,  			     struct iwl_fw_ini_monitor_dump *data,  			     const struct iwl_fw_mon_regs *addrs)  { -	struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data; -	u32 alloc_id = le32_to_cpu(reg->dram_alloc_id); -  	if (!iwl_trans_grab_nic_access(fwrt->trans)) {  		IWL_ERR(fwrt, "Failed to get monitor header\n");  		return NULL; @@ -1702,8 +1698,10 @@ iwl_dump_ini_mon_dram_fill_header(struct iwl_fw_runtime *fwrt,  				  void *data, u32 data_len)  {  	struct iwl_fw_ini_monitor_dump *mon_dump = (void *)data; +	struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data; +	u32 alloc_id = le32_to_cpu(reg->dram_alloc_id); -	return iwl_dump_ini_mon_fill_header(fwrt, reg_data, mon_dump, +	return iwl_dump_ini_mon_fill_header(fwrt, alloc_id, mon_dump,  					    &fwrt->trans->cfg->mon_dram_regs);  } @@ -1713,8 +1711,10 @@ iwl_dump_ini_mon_smem_fill_header(struct iwl_fw_runtime *fwrt,  				  void *data, u32 data_len)  {  	struct iwl_fw_ini_monitor_dump *mon_dump = (void *)data; +	struct iwl_fw_ini_region_tlv *reg = (void *)reg_data->reg_tlv->data; +	u32 alloc_id = le32_to_cpu(reg->internal_buffer.alloc_id); -	return iwl_dump_ini_mon_fill_header(fwrt, reg_data, mon_dump, +	return iwl_dump_ini_mon_fill_header(fwrt, alloc_id, mon_dump,  					    &fwrt->trans->cfg->mon_smem_regs);  } @@ -1725,7 +1725,10 @@ iwl_dump_ini_mon_dbgi_fill_header(struct iwl_fw_runtime *fwrt,  {  	struct iwl_fw_ini_monitor_dump *mon_dump = (void *)data; -	return iwl_dump_ini_mon_fill_header(fwrt, reg_data, mon_dump, +	return iwl_dump_ini_mon_fill_header(fwrt, +					    /* no offset calculation later */ +					    IWL_FW_INI_ALLOCATION_ID_DBGC1, +					    mon_dump,  					    &fwrt->trans->cfg->mon_dbgi_regs);  } @@ -2320,6 +2323,36 @@ static u32 iwl_dump_ini_info(struct iwl_fw_runtime *fwrt,  	return entry->size;  } +static u32 iwl_dump_ini_file_name_info(struct iwl_fw_runtime *fwrt, +				       struct list_head *list) +{ +	struct iwl_fw_ini_dump_entry *entry; +	struct iwl_dump_file_name_info *tlv; +	u32 len = strnlen(fwrt->trans->dbg.dump_file_name_ext, +			  IWL_FW_INI_MAX_NAME); + +	if (!fwrt->trans->dbg.dump_file_name_ext_valid) +		return 0; + +	entry = vzalloc(sizeof(*entry) + sizeof(*tlv) + len); +	if (!entry) +		return 0; + +	entry->size = sizeof(*tlv) + len; + +	tlv = (void *)entry->data; +	tlv->type = cpu_to_le32(IWL_INI_DUMP_NAME_TYPE); +	tlv->len = cpu_to_le32(len); +	memcpy(tlv->data, fwrt->trans->dbg.dump_file_name_ext, len); + +	/* add the dump file name extension tlv to the list */ +	list_add_tail(&entry->list, list); + +	fwrt->trans->dbg.dump_file_name_ext_valid = false; + +	return entry->size; +} +  static const struct iwl_dump_ini_mem_ops iwl_dump_ini_region_ops[] = {  	[IWL_FW_INI_REGION_INVALID] = {},  	[IWL_FW_INI_REGION_INTERNAL_BUFFER] = { @@ -2495,8 +2528,10 @@ static u32 iwl_dump_ini_trigger(struct iwl_fw_runtime *fwrt,  		size += iwl_dump_ini_mem(fwrt, list, ®_data,  					 &iwl_dump_ini_region_ops[IWL_FW_INI_REGION_DRAM_IMR]); -	if (size) +	if (size) { +		size += iwl_dump_ini_file_name_info(fwrt, list);  		size += iwl_dump_ini_info(fwrt, trigger, list); +	}  	return size;  }  |