[PATCH v4 2/3] wifi: ath11k: qmi: refactor ath11k_qmi_m3_load()

Jeff Johnson quic_jjohnson at quicinc.com
Thu Jul 27 09:47:21 PDT 2023


On 7/27/2023 3:04 AM, Kalle Valo wrote:
> From: Kalle Valo <quic_kvalo at quicinc.com>
> 
> Simple refactoring to make it easier to add firmware-2.bin support in the
> following patch.
> 
> Earlier ath11k_qmi_m3_load() supported changing m3.bin contents while ath11k is
> running. But that's not going to actually work, m3.bin is supposed to the be

nit: s/to the be/to be the/

> same during the lifetime of ath11k, for example we don't support changing the
> firmware capabilities on the fly. Due to this ath11k requests m3.bin firmware
> file first and only then checks m3_mem->vaddr, so we are basically requesting
> the firmware file even if it's not needed. Reverse the code so that m3_mem
> buffer is checked first, and only if it doesn't exist, then m3.bin is requested
> from user space.
> 
> Checking for m3_mem->size is redundant when m3_mem->vaddr is NULL, we would
> not be able to use the buffer in that case. So remove the check for size.
> 
> Simplify the exit handling and use 'goto out'.
> 
> Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.9
> 
> Signed-off-by: Kalle Valo <quic_kvalo at quicinc.com>

Reviewed-by: Jeff Johnson <quic_jjohnson at quicinc.com>

> ---
>   drivers/net/wireless/ath/ath11k/qmi.c | 18 +++++++++++-------
>   1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c
> index d4eaf7d2ba84..9b13628fa3c7 100644
> --- a/drivers/net/wireless/ath/ath11k/qmi.c
> +++ b/drivers/net/wireless/ath/ath11k/qmi.c
> @@ -2506,6 +2506,10 @@ static int ath11k_qmi_m3_load(struct ath11k_base *ab)
>   	char path[100];
>   	int ret;
>   
> +	if (m3_mem->vaddr)
> +		/* m3 firmware buffer is already available in the DMA buffer */
> +		return 0;
> +
>   	fw = ath11k_core_firmware_request(ab, ATH11K_M3_FILE);
>   	if (IS_ERR(fw)) {
>   		ret = PTR_ERR(fw);
> @@ -2515,25 +2519,25 @@ static int ath11k_qmi_m3_load(struct ath11k_base *ab)
>   		return ret;
>   	}
>   
> -	if (m3_mem->vaddr || m3_mem->size)
> -		goto skip_m3_alloc;
> -
>   	m3_mem->vaddr = dma_alloc_coherent(ab->dev,
>   					   fw->size, &m3_mem->paddr,
>   					   GFP_KERNEL);
>   	if (!m3_mem->vaddr) {
>   		ath11k_err(ab, "failed to allocate memory for M3 with size %zu\n",
>   			   fw->size);
> -		release_firmware(fw);
> -		return -ENOMEM;
> +		ret = -ENOMEM;
> +		goto out;
>   	}
>   
> -skip_m3_alloc:
>   	memcpy(m3_mem->vaddr, fw->data, fw->size);
>   	m3_mem->size = fw->size;
> +
> +	ret = 0;
> +
> +out:
>   	release_firmware(fw);
>   
> -	return 0;
> +	return ret;
>   }
>   
>   static void ath11k_qmi_m3_free(struct ath11k_base *ab)




More information about the ath11k mailing list