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