Search Linux Wireless

Re: [PATCH 1/2] wifi: ath11k: factory test mode support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/13/2023 5:47 PM, Kalle Valo wrote:
> Raj Kumar Bhagat <quic_rajkbhag@xxxxxxxxxxx> writes:
> 
>> From: Govindaraj Saminathan <quic_gsaminat@xxxxxxxxxxx>
>>
>> Add support to process factory test mode commands(FTM) for calibration.
>> By default firmware start with NORMAL mode and to process the FTM commands
>> firmware needs to be restarted in FTM mode using module parameter ftm_mode.
>> The pre-request is all the radios should be down before starting the test.
>>
>> When start command ATH11K_TM_CMD_TESTMODE_START is received, ar state
>> is set to Test Mode. If the FTM command or event length is greater
>> than 256 bytes, it will be broken down into multiple segments and
>> encoded with TLV header if it is segmented commands, else it is sent
>> to firmware as it is.
>>
>> On receiving UTF event from firmware, if it is segmented event, the driver
>> will wait until it receives all the segments and notify the complete
>> data to user application. In case the segmented sequence are missed or
>> lost from the firmware, driver will skip the already received partial data.
>>
>> In case of unsegmented UTF event from firmware, driver notifies the
>> data to the user application as it comes. Applications handles
>> the data further.
>>
>> Command to boot in ftm mode
>> insmod ath11k ftm_mode=1
>>
>> Tested-on : IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
>>
>> Signed-off-by: Govindaraj Saminathan <quic_gsaminat@xxxxxxxxxxx>
>> Co-developed-by: Sowmiya Sree Elavalagan <quic_ssreeela@xxxxxxxxxxx>
>> Signed-off-by: Sowmiya Sree Elavalagan <quic_ssreeela@xxxxxxxxxxx>
>> Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@xxxxxxxxxxx>
> 
> [...]
> 
>> -bool ath11k_tm_event_wmi(struct ath11k *ar, u32 cmd_id, struct sk_buff *skb)
> 
> Please do removal of this ath11k_tm_event_wmi() in a separate patch,
> then it's easier to read this patch.

Will address this in next version.

> 
>>  static int ath11k_tm_cmd_get_version(struct ath11k *ar, struct nlattr *tb[])
>>  {
>>  	struct sk_buff *skb;
>> -	int ret;
>>  
>>  	ath11k_dbg(ar->ab, ATH11K_DBG_TESTMODE,
>>  		   "testmode cmd get version_major %d version_minor %d\n",
>> @@ -98,21 +205,50 @@ static int ath11k_tm_cmd_get_version(struct ath11k *ar, struct nlattr *tb[])
>>  	if (!skb)
>>  		return -ENOMEM;
>>  
>> -	ret = nla_put_u32(skb, ATH11K_TM_ATTR_VERSION_MAJOR,
>> -			  ATH11K_TESTMODE_VERSION_MAJOR);
>> -	if (ret) {
>> +	if (nla_put_u32(skb, ATH11K_TM_ATTR_VERSION_MAJOR,
>> +			ATH11K_TESTMODE_VERSION_MAJOR) ||
>> +	    nla_put_u32(skb, ATH11K_TM_ATTR_VERSION_MINOR,
>> +			ATH11K_TESTMODE_VERSION_MINOR)) {
>>  		kfree_skb(skb);
>> -		return ret;
>> +		return -ENOBUFS;
>>  	}
>>  
>> -	ret = nla_put_u32(skb, ATH11K_TM_ATTR_VERSION_MINOR,
>> -			  ATH11K_TESTMODE_VERSION_MINOR);
>> -	if (ret) {
>> -		kfree_skb(skb);
>> -		return ret;
>> +	return cfg80211_testmode_reply(skb);
>> +}
> 
> Please also do the changes in ath11k_tm_cmd_get_version() in a separate
> patch.

will address this in next version.

> 
>> @@ -47,4 +49,21 @@ enum ath11k_tm_cmd {
>>  	 * ATH11K_TM_ATTR_DATA.
>>  	 */
>>  	ATH11K_TM_CMD_WMI = 1,
>> +
>> +	/* Boots the UTF firmware, the netdev interface must be down at the
>> +	 * time.
>> +	 */
>> +	ATH11K_TM_CMD_TESTMODE_START = 2,
>> +
>> +	/* Shuts down the UTF firmware and puts the driver back into OFF
>> +	 * state.
>> +	 */
>> +	ATH11K_TM_CMD_TESTMODE_STOP = 3,
> 
> The documentation for for the STOP command is misleading, now ath11k
> just ignores that command. So is there any point even to have the
> command if it doesn't do anything?

Will remove ATH11K_TM_CMD_TESTMODE_STOP as it is not used and send the
next version.

> 
>> @@ -8096,6 +8128,12 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
>>  	case WMI_PDEV_CSA_SWITCH_COUNT_STATUS_EVENTID:
>>  		ath11k_wmi_pdev_csa_switch_count_status_event(ab, skb);
>>  		break;
>> +	case WMI_PDEV_UTF_EVENTID:
>> +		if (test_bit(ATH11K_FLAG_FTM_SEGMENTED, &ab->dev_flags))
>> +			ath11k_wmi_tm_event_segmented(ab, id, skb);
>> +		else
>> +			ath11k_tm_wmi_event_unsegmented(ab, id, skb);
>> +		break;
> 
> I didn't investigate this in detail, but I find the flag a bit
> problematic as it alters the behaviour ATH11K_FLAG_FTM_SEGMENTED and the
> behaviour difference it's not documented at all in enum ath11k_tm_cmd.
> 
Will document the behavior difference in enum ath11k_tm_cmd, in next version.

Thanks
Raj



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux