Search Linux Wireless

Re: [PATCH ath-next V15 5/9] wifi: ath12k: fix TX and RX MCS rate configurations in HE mode

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

 





On 6/30/2025 7:14 PM, Baochen Qiang wrote:


On 7/1/2025 9:04 AM, Pradeep Kumar Chitrapu wrote:
Currently, the TX and RX MCS rate configurations per peer are
reversed when sent to the firmware. As a result, RX MCS rates
are configured for TX, and vice versa. This commit rectifies
the configuration to match what the firmware expects.

Please mention that you are rectifying only for AP mode. For STA, current code is good.
Sure..technically I am changing for all modes except STA mode


Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1

Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
Signed-off-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx>

I don't see the need to add my S-O-B here, better drop it.
Sure thanks

Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@xxxxxxxxxxx>
---
  drivers/net/wireless/ath/ath12k/wmi.c | 19 +++++++++++++++++--
  drivers/net/wireless/ath/ath12k/wmi.h |  2 ++
  2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/ath/ath12k/wmi.c b/drivers/net/wireless/ath/ath12k/wmi.c
index 6c6354b3e18e..cdf3406302ee 100644
--- a/drivers/net/wireless/ath/ath12k/wmi.c
+++ b/drivers/net/wireless/ath/ath12k/wmi.c
@@ -2183,6 +2183,8 @@ int ath12k_wmi_send_peer_assoc_cmd(struct ath12k *ar,
  				   struct ath12k_wmi_peer_assoc_arg *arg)
  {
  	struct ath12k_wmi_pdev *wmi = ar->wmi;
+	struct ath12k_base *ab = ar->ab;
+	struct ath12k_link_vif *arvif;
  	struct wmi_peer_assoc_complete_cmd *cmd;
  	struct ath12k_wmi_vht_rate_set_params *mcs;
  	struct ath12k_wmi_he_rate_set_params *he_mcs;
@@ -2198,6 +2200,13 @@ int ath12k_wmi_send_peer_assoc_cmd(struct ath12k *ar,
  	u16 eml_cap;
  	__le32 v;
+ arvif = ath12k_mac_get_arvif(ar, arg->vdev_id);
+	if (!arvif) {
+		ath12k_warn(ab, "failed to find arvif with vdev id %d\n",
+			    arg->vdev_id);
+		return -EINVAL;
+	}
+
  	peer_legacy_rates_align = roundup(arg->peer_legacy_rates.num_rates,
  					  sizeof(u32));
  	peer_ht_rates_align = roundup(arg->peer_ht_rates.num_rates,
@@ -2333,8 +2342,14 @@ int ath12k_wmi_send_peer_assoc_cmd(struct ath12k *ar,
  		he_mcs->tlv_header = ath12k_wmi_tlv_cmd_hdr(WMI_TAG_HE_RATE_SET,
  							    sizeof(*he_mcs));
- he_mcs->rx_mcs_set = cpu_to_le32(arg->peer_he_rx_mcs_set[i]);
-		he_mcs->tx_mcs_set = cpu_to_le32(arg->peer_he_tx_mcs_set[i]);
+		if (arvif->ahvif->vdev_type == WMI_VDEV_TYPE_STA) {
+			he_mcs->rx_mcs_set = cpu_to_le32(arg->peer_he_rx_mcs_set[i]);
+			he_mcs->tx_mcs_set = cpu_to_le32(arg->peer_he_tx_mcs_set[i]);
+
+		} else {
+			he_mcs->rx_mcs_set = cpu_to_le32(arg->peer_he_tx_mcs_set[i]);
+			he_mcs->tx_mcs_set = cpu_to_le32(arg->peer_he_rx_mcs_set[i]);
+		}
  		ptr += sizeof(*he_mcs);
  	}
diff --git a/drivers/net/wireless/ath/ath12k/wmi.h b/drivers/net/wireless/ath/ath12k/wmi.h
index 0964ca03069a..7ad84624600d 100644
--- a/drivers/net/wireless/ath/ath12k/wmi.h
+++ b/drivers/net/wireless/ath/ath12k/wmi.h
@@ -4162,7 +4162,9 @@ struct ath12k_wmi_vht_rate_set_params {
struct ath12k_wmi_he_rate_set_params {
  	__le32 tlv_header;
+	/* MCS at which the peer can receive */
  	__le32 rx_mcs_set;
+	/* MCS at which the peer can transmit */
  	__le32 tx_mcs_set;
  } __packed;






[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