From nobody Wed Apr 8 04:41:22 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F4932C1586 for ; Tue, 10 Mar 2026 15:16:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773155780; cv=none; b=cmqDRU/+FVin+iL3wGez5AlKa9xBiRO0g3Lk6TNYX06uL6Br+PCUXwTMgId4dUs8Sg94FP2TFW5s4oNTdQddAbM1XKs7pKGoxk4ULxirXiqJC4WB0f0Cq18ItehrPhMreOSDlwTO3+zT4Wu/hX4rjS+MZ0n0tPhWAeGySudspfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773155780; c=relaxed/simple; bh=K+rufhdMHIpMLFzgsA1/xrZ0aq1658PLWs+Cw7fghJc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AX70EKEaS8vr7e8jJUfYa+goOUtz+5OpqRINDRuhEzZ3/i8L5t7k4BeHO4ycqPyMnORxg12kwSaKBSSqitZg3gPd8mDttGuGNC0FVcISsq0bMMlKb5dh/DDN0V5OnJpQRLtkmQ86TAL+YpEc0AXvUQcPqkPGeJK780F7dxCHEXE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=oYalrSCp; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=K4Suhrcm; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="oYalrSCp"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="K4Suhrcm" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62ACaSDv3295304 for ; Tue, 10 Mar 2026 15:16:18 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 7QRtgjL6YhmblrErajJMNeEeuRhcl0G8eAa6X9zELIE=; b=oYalrSCp9EC2AEJL BYOrejBHy1pEcinZHGReifgf4OrwtOeh6YP63vKbwTWK/rAdd7jaOI/3jTOZVIZg mh+dxABpo3pLa1SJ1g3yDSk33eaDg0wBP/19i9IitRANzT47YWhdEs6FgYL0UOAa q0Ndwe8g7AWE/Qv92kpSeHp6ZrMTZJUWGYe1X9J5RuwZSElNMvL4gauZxoS3fO7W GMSiv2IJxAWIjhQDU5ubYRFh6RvaWTzkawKC/zxre8lS7Q9mUM7OzvwOU4A2aIlj BV93BL/pI7/3DPUc+PdUXlbXm96UH5FD00RTwk6MT9RV/Xtqpk7pmW7scILjG03Y kb+Zdg== Received: from mail-oa1-f71.google.com (mail-oa1-f71.google.com [209.85.160.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ctg1msfek-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 10 Mar 2026 15:16:18 +0000 (GMT) Received: by mail-oa1-f71.google.com with SMTP id 586e51a60fabf-415e1ea16b4so79981347fac.1 for ; Tue, 10 Mar 2026 08:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773155777; x=1773760577; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=7QRtgjL6YhmblrErajJMNeEeuRhcl0G8eAa6X9zELIE=; b=K4SuhrcmrOZEQXFotLXj3myWzlymVFGQgSUXlhfm/M1zQGXorOiC62oyzrSZsI4w72 SCNJrv110ORmcMTr0QtJOqGK4MIczGWnYnzWm4BN3K+26eTFfdnN4BimMYRIKczeA+Dt OSJ+N1SPgbTuZwe50JpYzujUpOuVSpnsXuy+Pk+wTWGeprh5CbZZZZgUXY5LXwdkzLAa F/hgHfFSidZBXgyToH/VyqmtdZ6lst38yAAqg7IJgdQg1NqTgWcygoeHcIdfvQ1DcjdK 9rsphgxyNbAnOLvkXhjR3FLLsKdvu7ndgmf6lMjCS85DTo01m6gd0XdMCL+u9jXoTNuL n09A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773155777; x=1773760577; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=7QRtgjL6YhmblrErajJMNeEeuRhcl0G8eAa6X9zELIE=; b=KD0cfdrXinmF9FpfA8SCngp2y4nuWULRWnFdN1bMiq1ljZaB5jaORQ2K/2sWfV7qPb h4Y9aXbO5FSpsWr97vJL94V4HoqHCu7Q5uCbMaED/GEwcdPtqaTy9D5fqHriQW3UP+s+ rFS81aASP6MUi/Zh83HtBQlv06vfUw4Ea0aBOs9pvrKqM7CgcjZZ0lq/La1bMokLS1r7 FjiOehOR0XrR3dMFAjhdnekhAJwOObNWS18T0ZBCsO+d6ljCDEOtdD5tLJFMqIKBlQjI JCCbaBQd+j/6C4muXEyjLEacZT5Yx6lpDaxJLANraVTTU7eIipmGAKCI2tqJK/PiFINC KUbA== X-Forwarded-Encrypted: i=1; AJvYcCXp8KS0ZBoKNDCu3bszHM4MfDzd2iFJ/mLWzhu1IWVDG25eP109EoBTik7PuKkpMlVhmllDqdp5pwzm+fM=@vger.kernel.org X-Gm-Message-State: AOJu0YzuPtWmHSGGm9SFSDV/3xw4rntzmQJoV0Sk5iNCvd/rU6/x8GB1 v6SGcRw/Bc13mssqsRBYKWqCJTOQ8SOviIXVE49PkPunCTBXpJuV9npkpV8/52Y5LC71ncOaXJF swr2axpDzJEohxhG4mjqQu+uRNvr7qvzh951VMJU4boFrfi2oXyWJ5EusSXnJRHleGxw= X-Gm-Gg: ATEYQzw6f92TR0m/yNGIJHMffiOEyynYDNI4hLL+ZwaBKISXdH111BlT0x5JktnI215 KUnMV6Z5UyHCq1wbCa1Ro3Y3f8KbnDgXPs9YA9YT5yJPDWRFMK2AiAEX65PViX8zJS0cYLt90r4 BPkiJzPpR6x6UaGumBdrQAF0223Hg2067ipV9yzmBKr011tqbtBfnMGBCueZ70cGJ0Mt7Tsckx3 LG67SRqA/O7d59ref5+bDlDLpzEzeDMMC/sF1YbWnwXzQxpS1WvOP9L6TPbne4vrVu1oWKOJbDn RV8sEGEsZDVaP6G9cXvevj+YkzZRQD+1++xHYV2r7+iluA1Zmej6YuWDS6BDqblNKg4cM2fzD5j SLlJAq1byKRlnsn/QSc9m4sjedyjjIw6Q4KKCTunzmOfKocvyIrEv8MH5+Hk6jjxoGma0f2KaCH S4 X-Received: by 2002:a05:6870:34f:b0:3ec:5267:cb6e with SMTP id 586e51a60fabf-416e3ff5d5bmr8759326fac.23.1773155777270; Tue, 10 Mar 2026 08:16:17 -0700 (PDT) X-Received: by 2002:a05:6870:34f:b0:3ec:5267:cb6e with SMTP id 586e51a60fabf-416e3ff5d5bmr8759310fac.23.1773155776796; Tue, 10 Mar 2026 08:16:16 -0700 (PDT) Received: from hu-jjohnson-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-41756dbc7afsm2714603fac.14.2026.03.10.08.16.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 08:16:16 -0700 (PDT) From: Jeff Johnson Date: Tue, 10 Mar 2026 08:16:12 -0700 Subject: [PATCH ath-next 1/2] wifi: ath12k: Clean up the WMI Unit Test command interface Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260310-ath12k-unit-test-cleanup-v1-1-03e3df56f903@oss.qualcomm.com> References: <20260310-ath12k-unit-test-cleanup-v1-0-03e3df56f903@oss.qualcomm.com> In-Reply-To: <20260310-ath12k-unit-test-cleanup-v1-0-03e3df56f903@oss.qualcomm.com> To: Jeff Johnson Cc: linux-wireless@vger.kernel.org, ath12k@lists.infradead.org, linux-kernel@vger.kernel.org, Jeff Johnson X-Mailer: b4 0.14.3 X-Authority-Analysis: v=2.4 cv=YOeSCBGx c=1 sm=1 tr=0 ts=69b035c2 cx=c_pps a=CWtnpBpaoqyeOyNyJ5EW7Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=zm9tmq2CayTrKmE_1UcA:9 a=QEXdDO2ut3YA:10 a=vh23qwtRXIYOdz9xvnmn:22 X-Proofpoint-ORIG-GUID: dAjiZ3No1H6SY86h-7eBKrzQJQty3uCd X-Proofpoint-GUID: dAjiZ3No1H6SY86h-7eBKrzQJQty3uCd X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDEzMiBTYWx0ZWRfX7drNjVN0d+E+ 9BUdysg64uYVdeDS6N/GZyEVf8z7X/qDyFZ+FRxlr2pudQhfjTMWXKv8SoEPhUdguM0gwex7hwU haB595xAlqYp79cGw00A84qQPT/KqMz+4+k4NB+g1fEkJoEGa/mtmst1DVyc4huTg7Hy2GaH36A TSXybh4EmzeiQTXkFqEXj/WdWRKYpALryS+WznMdaf/7dAXbb1HPy/mRAzF5VCID2KyImuK9tiG tBjOUT+vl+lAppxNvXS8UmcpJWh0IxKI3HGupbcojF4JJ3go8OosdhTdXgakfeFF6SNgrIf7QRO ovOQye+8JXogz2SxEdlO6lF4Np2oO9TDh6aLchFmTRjY6T2PZyuXjHAOaub9CxAIRRnB94fFSxN A/SYBEq9oA28iXz2RbIVUwE5RyP/a734l2hhFH1UySl+N7VBdeg9XtXDcP3u54/Kp0D4ui61f7H qY26r6+ZigOCkiLcAow== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-10_03,2026-03-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 clxscore=1015 spamscore=0 bulkscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603100132 Currently, ath12k_wmi_send_unit_test_cmd() provides the interface to send a Unit Test command to firmware. The payload for the command is passed in two separate parameters, struct wmi_unit_test_cmd ut_cmd and u32 *test_args. This interface is strange in that it passes the ut_cmd structure by value instead of by reference. But even worse, this presents an interface that is not endian clean since the ut_cmd structure is defined in little endian format while the test_args array is defined to be in cpu endian format. Furthermore, the implementation of this function passes the test_args directly to the firmware, without performing cpu_to_le32() conversion, and hence this functionality will not work correctly on big endian platforms. In order to fix these issues, introduce a new wmi_unit_test_arg structure which defines all of the parameters needed by the Unit Test command in a single structure using cpu endian. Update ath12k_wmi_send_unit_test_cmd() to take a pointer to this structure and perform all cpu_to_le32() conversions needed while forming the firmware command. Update the only existing Unit Test function, ath12k_wmi_simulate_radar(), to properly fill and pass this new structure to ath12k_wmi_send_unit_test_cmd(). Compile tested only. Signed-off-by: Jeff Johnson --- drivers/net/wireless/ath/ath12k/wmi.c | 58 ++++++++++++++++---------------= ---- drivers/net/wireless/ath/ath12k/wmi.h | 11 +++++++ 2 files changed, 38 insertions(+), 31 deletions(-) diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/a= th/ath12k/wmi.c index b93e33edf369..65a05a9520ff 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.c +++ b/drivers/net/wireless/ath/ath12k/wmi.c @@ -10017,50 +10017,46 @@ static int ath12k_connect_pdev_htc_service(struct= ath12k_base *ab, =20 static int ath12k_wmi_send_unit_test_cmd(struct ath12k *ar, - struct wmi_unit_test_cmd ut_cmd, - u32 *test_args) + const struct wmi_unit_test_arg *ut) { struct ath12k_wmi_pdev *wmi =3D ar->wmi; struct wmi_unit_test_cmd *cmd; + int buf_len, arg_len; struct sk_buff *skb; struct wmi_tlv *tlv; + __le32 *ut_cmd_args; void *ptr; - u32 *ut_cmd_args; - int buf_len, arg_len; int ret; int i; =20 - arg_len =3D sizeof(u32) * le32_to_cpu(ut_cmd.num_args); - buf_len =3D sizeof(ut_cmd) + arg_len + TLV_HDR_SIZE; + arg_len =3D sizeof(*ut_cmd_args) * ut->num_args; + buf_len =3D sizeof(*cmd) + arg_len + TLV_HDR_SIZE; =20 skb =3D ath12k_wmi_alloc_skb(wmi->wmi_ab, buf_len); if (!skb) return -ENOMEM; =20 - cmd =3D (struct wmi_unit_test_cmd *)skb->data; + ptr =3D skb->data; + cmd =3D ptr; cmd->tlv_header =3D ath12k_wmi_tlv_cmd_hdr(WMI_TAG_UNIT_TEST_CMD, - sizeof(ut_cmd)); - - cmd->vdev_id =3D ut_cmd.vdev_id; - cmd->module_id =3D ut_cmd.module_id; - cmd->num_args =3D ut_cmd.num_args; - cmd->diag_token =3D ut_cmd.diag_token; - - ptr =3D skb->data + sizeof(ut_cmd); + sizeof(*cmd)); + cmd->vdev_id =3D cpu_to_le32(ut->vdev_id); + cmd->module_id =3D cpu_to_le32(ut->module_id); + cmd->num_args =3D cpu_to_le32(ut->num_args); + cmd->diag_token =3D cpu_to_le32(ut->diag_token); =20 + ptr +=3D sizeof(*cmd); tlv =3D ptr; tlv->header =3D ath12k_wmi_tlv_hdr(WMI_TAG_ARRAY_UINT32, arg_len); =20 ptr +=3D TLV_HDR_SIZE; - ut_cmd_args =3D ptr; - for (i =3D 0; i < le32_to_cpu(ut_cmd.num_args); i++) - ut_cmd_args[i] =3D test_args[i]; + for (i =3D 0; i < ut->num_args; i++) + ut_cmd_args[i] =3D cpu_to_le32(ut->args[i]); =20 ath12k_dbg(ar->ab, ATH12K_DBG_WMI, "WMI unit test : module %d vdev %d n_args %d token %d\n", - cmd->module_id, cmd->vdev_id, cmd->num_args, - cmd->diag_token); + ut->module_id, ut->vdev_id, ut->num_args, ut->diag_token); =20 ret =3D ath12k_wmi_cmd_send(wmi, skb, WMI_UNIT_TEST_CMDID); =20 @@ -10076,8 +10072,7 @@ ath12k_wmi_send_unit_test_cmd(struct ath12k *ar, int ath12k_wmi_simulate_radar(struct ath12k *ar) { struct ath12k_link_vif *arvif; - u32 dfs_args[DFS_MAX_TEST_ARGS]; - struct wmi_unit_test_cmd wmi_ut; + struct wmi_unit_test_arg wmi_ut =3D {}; bool arvif_found =3D false; =20 list_for_each_entry(arvif, &ar->arvifs, list) { @@ -10090,22 +10085,23 @@ int ath12k_wmi_simulate_radar(struct ath12k *ar) if (!arvif_found) return -EINVAL; =20 - dfs_args[DFS_TEST_CMDID] =3D 0; - dfs_args[DFS_TEST_PDEV_ID] =3D ar->pdev->pdev_id; - /* Currently we could pass segment_id(b0 - b1), chirp(b2) + wmi_ut.args[DFS_TEST_CMDID] =3D 0; + wmi_ut.args[DFS_TEST_PDEV_ID] =3D ar->pdev->pdev_id; + /* + * Currently we could pass segment_id(b0 - b1), chirp(b2) * freq offset (b3 - b10) to unit test. For simulation * purpose this can be set to 0 which is valid. */ - dfs_args[DFS_TEST_RADAR_PARAM] =3D 0; + wmi_ut.args[DFS_TEST_RADAR_PARAM] =3D 0; =20 - wmi_ut.vdev_id =3D cpu_to_le32(arvif->vdev_id); - wmi_ut.module_id =3D cpu_to_le32(DFS_UNIT_TEST_MODULE); - wmi_ut.num_args =3D cpu_to_le32(DFS_MAX_TEST_ARGS); - wmi_ut.diag_token =3D cpu_to_le32(DFS_UNIT_TEST_TOKEN); + wmi_ut.vdev_id =3D arvif->vdev_id; + wmi_ut.module_id =3D DFS_UNIT_TEST_MODULE; + wmi_ut.num_args =3D DFS_MAX_TEST_ARGS; + wmi_ut.diag_token =3D DFS_UNIT_TEST_TOKEN; =20 ath12k_dbg(ar->ab, ATH12K_DBG_REG, "Triggering Radar Simulation\n"); =20 - return ath12k_wmi_send_unit_test_cmd(ar, wmi_ut, dfs_args); + return ath12k_wmi_send_unit_test_cmd(ar, &wmi_ut); } =20 int ath12k_wmi_send_tpc_stats_request(struct ath12k *ar, diff --git a/drivers/net/wireless/ath/ath12k/wmi.h b/drivers/net/wireless/a= th/ath12k/wmi.h index 0bf0a7941cd3..8d766dd5b304 100644 --- a/drivers/net/wireless/ath/ath12k/wmi.h +++ b/drivers/net/wireless/ath/ath12k/wmi.h @@ -4210,6 +4210,17 @@ struct wmi_dfs_unit_test_arg { u32 radar_param; }; =20 +/* update if another test command requires more */ +#define WMI_UNIT_TEST_ARGS_MAX DFS_MAX_TEST_ARGS + +struct wmi_unit_test_arg { + u32 vdev_id; + u32 module_id; + u32 diag_token; + u32 num_args; + u32 args[WMI_UNIT_TEST_ARGS_MAX]; +}; + struct wmi_unit_test_cmd { __le32 tlv_header; __le32 vdev_id; --=20 2.43.0