Skip to content

Commit e8f3323

Browse files
committed
Merge tag 'wireless-next-2024-12-19' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next
Kalle Valo says: ==================== wireless-next patches for v6.14 Multi-Link Operation implementation continues, both in stack and in drivers. Otherwise it has been relatively quiet. Major changes: cfg80211/mac80211 - define wiphy guard - get TX power per link - EHT 320 MHz channel support for mesh ath11k - QCA6698AQ support ath9k - RX inactivity detection rtl8xxxu - add more USB device IDs rtw88 - add more USB device IDs - enable USB RX aggregation and USB 3 to improve performance rtw89 - PowerSave flow for Multi-Link Operation * tag 'wireless-next-2024-12-19' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next: (121 commits) wifi: wlcore: sysfs: constify 'struct bin_attribute' wifi: brcmfmac: clarify unmodifiable headroom log message wifi: brcmfmac: add missing header include for brcmf_dbg wifi: brcmsmac: add gain range check to wlc_phy_iqcal_gainparams_nphy() wifi: qtnfmac: fix spelling error in core.h wifi: rtw89: phy: add dummy C2H event handler for report of TAS power wifi: rtw89: 8851b: rfk: remove unnecessary assignment of return value of _dpk_dgain_read() wifi: rtw89: 8852c: rfk: refine target channel calculation in _rx_dck_channel_calc() wifi: rtlwifi: pci: wait for firmware loading before releasing memory wifi: rtlwifi: fix memory leaks and invalid access at probe error path wifi: rtlwifi: destroy workqueue at rtl_deinit_core wifi: rtlwifi: remove unused check_buddy_priv wifi: rtw89: 8922a: update format of RFK pre-notify H2C command v2 wifi: rtw89: regd: update regulatory map to R68-R51 wifi: rtw89: 8852c: disable ER SU when 4x HE-LTF and 0.8 GI capability differ wifi: rtw89: disable firmware training HE GI and LTF wifi: rtw89: ps: update data for firmware and settings for hardware before/after PS wifi: rtw89: ps: refactor channel info to firmware before entering PS wifi: rtw89: ps: refactor PS flow to support MLO wifi: mwifiex: decrease timeout waiting for host sleep from 10s to 5s ... ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 75e2c86 + 8ab3bf4 commit e8f3323

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+6348
-1646
lines changed

drivers/net/wireless/ath/ath11k/core.c

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
123123
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
124124
.smp2p_wow_exit = false,
125125
.support_dual_stations = false,
126+
.pdev_suspend = false,
126127
},
127128
{
128129
.hw_rev = ATH11K_HW_IPQ6018_HW10,
@@ -207,6 +208,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
207208
.smp2p_wow_exit = false,
208209
.support_fw_mac_sequence = false,
209210
.support_dual_stations = false,
211+
.pdev_suspend = false,
210212
},
211213
{
212214
.name = "qca6390 hw2.0",
@@ -296,6 +298,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
296298
.smp2p_wow_exit = false,
297299
.support_fw_mac_sequence = true,
298300
.support_dual_stations = true,
301+
.pdev_suspend = false,
299302
},
300303
{
301304
.name = "qcn9074 hw1.0",
@@ -379,6 +382,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
379382
.smp2p_wow_exit = false,
380383
.support_fw_mac_sequence = false,
381384
.support_dual_stations = false,
385+
.pdev_suspend = false,
382386
},
383387
{
384388
.name = "wcn6855 hw2.0",
@@ -468,6 +472,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
468472
.smp2p_wow_exit = false,
469473
.support_fw_mac_sequence = true,
470474
.support_dual_stations = true,
475+
.pdev_suspend = false,
471476
},
472477
{
473478
.name = "wcn6855 hw2.1",
@@ -555,6 +560,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
555560
.smp2p_wow_exit = false,
556561
.support_fw_mac_sequence = true,
557562
.support_dual_stations = true,
563+
.pdev_suspend = false,
558564
},
559565
{
560566
.name = "wcn6750 hw1.0",
@@ -637,6 +643,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
637643
.smp2p_wow_exit = true,
638644
.support_fw_mac_sequence = true,
639645
.support_dual_stations = false,
646+
.pdev_suspend = true,
640647
},
641648
{
642649
.hw_rev = ATH11K_HW_IPQ5018_HW10,
@@ -719,6 +726,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
719726
.smp2p_wow_exit = false,
720727
.support_fw_mac_sequence = false,
721728
.support_dual_stations = false,
729+
.pdev_suspend = false,
722730
},
723731
{
724732
.name = "qca2066 hw2.1",
@@ -809,6 +817,94 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
809817
.support_fw_mac_sequence = true,
810818
.support_dual_stations = true,
811819
},
820+
{
821+
.name = "qca6698aq hw2.1",
822+
.hw_rev = ATH11K_HW_QCA6698AQ_HW21,
823+
.fw = {
824+
.dir = "QCA6698AQ/hw2.1",
825+
.board_size = 256 * 1024,
826+
.cal_offset = 128 * 1024,
827+
},
828+
.max_radios = 3,
829+
.bdf_addr = 0x4B0C0000,
830+
.hw_ops = &wcn6855_ops,
831+
.ring_mask = &ath11k_hw_ring_mask_qca6390,
832+
.internal_sleep_clock = true,
833+
.regs = &wcn6855_regs,
834+
.qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCA6390,
835+
.host_ce_config = ath11k_host_ce_config_qca6390,
836+
.ce_count = 9,
837+
.target_ce_config = ath11k_target_ce_config_wlan_qca6390,
838+
.target_ce_count = 9,
839+
.svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qca6390,
840+
.svc_to_ce_map_len = 14,
841+
.single_pdev_only = true,
842+
.rxdma1_enable = false,
843+
.num_rxdma_per_pdev = 2,
844+
.rx_mac_buf_ring = true,
845+
.vdev_start_delay = true,
846+
.htt_peer_map_v2 = false,
847+
848+
.spectral = {
849+
.fft_sz = 0,
850+
.fft_pad_sz = 0,
851+
.summary_pad_sz = 0,
852+
.fft_hdr_len = 0,
853+
.max_fft_bins = 0,
854+
.fragment_160mhz = false,
855+
},
856+
857+
.interface_modes = BIT(NL80211_IFTYPE_STATION) |
858+
BIT(NL80211_IFTYPE_AP) |
859+
BIT(NL80211_IFTYPE_P2P_DEVICE) |
860+
BIT(NL80211_IFTYPE_P2P_CLIENT) |
861+
BIT(NL80211_IFTYPE_P2P_GO),
862+
.supports_monitor = false,
863+
.supports_shadow_regs = true,
864+
.idle_ps = true,
865+
.supports_sta_ps = true,
866+
.coldboot_cal_mm = false,
867+
.coldboot_cal_ftm = false,
868+
.cbcal_restart_fw = false,
869+
.fw_mem_mode = 0,
870+
.num_vdevs = 2 + 1,
871+
.num_peers = 512,
872+
.supports_suspend = true,
873+
.hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
874+
.supports_regdb = true,
875+
.fix_l1ss = false,
876+
.credit_flow = true,
877+
.max_tx_ring = DP_TCL_NUM_RING_MAX_QCA6390,
878+
.hal_params = &ath11k_hw_hal_params_qca6390,
879+
.supports_dynamic_smps_6ghz = false,
880+
.alloc_cacheable_memory = false,
881+
.supports_rssi_stats = true,
882+
.fw_wmi_diag_event = true,
883+
.current_cc_support = true,
884+
.dbr_debug_support = false,
885+
.global_reset = true,
886+
.bios_sar_capa = &ath11k_hw_sar_capa_wcn6855,
887+
.m3_fw_support = true,
888+
.fixed_bdf_addr = false,
889+
.fixed_mem_region = false,
890+
.static_window_map = false,
891+
.hybrid_bus_type = false,
892+
.fixed_fw_mem = false,
893+
.support_off_channel_tx = true,
894+
.supports_multi_bssid = true,
895+
896+
.sram_dump = {
897+
.start = 0x01400000,
898+
.end = 0x0177ffff,
899+
},
900+
901+
.tcl_ring_retry = true,
902+
.tx_ring_size = DP_TCL_DATA_RING_SIZE,
903+
.smp2p_wow_exit = false,
904+
.support_fw_mac_sequence = true,
905+
.support_dual_stations = true,
906+
.pdev_suspend = false,
907+
},
812908
};
813909

814910
static inline struct ath11k_pdev *ath11k_core_get_single_pdev(struct ath11k_base *ab)
@@ -1669,11 +1765,47 @@ static int ath11k_core_pdev_create(struct ath11k_base *ab)
16691765
return ret;
16701766
}
16711767

1768+
static void ath11k_core_pdev_suspend_target(struct ath11k_base *ab)
1769+
{
1770+
struct ath11k *ar;
1771+
struct ath11k_pdev *pdev;
1772+
unsigned long time_left;
1773+
int ret;
1774+
int i;
1775+
1776+
if (!ab->hw_params.pdev_suspend)
1777+
return;
1778+
1779+
for (i = 0; i < ab->num_radios; i++) {
1780+
pdev = &ab->pdevs[i];
1781+
ar = pdev->ar;
1782+
1783+
reinit_completion(&ab->htc_suspend);
1784+
1785+
ret = ath11k_wmi_pdev_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR,
1786+
pdev->pdev_id);
1787+
if (ret) {
1788+
ath11k_warn(ab, "could not suspend target :%d\n", ret);
1789+
/* pointless to try other pdevs */
1790+
return;
1791+
}
1792+
1793+
time_left = wait_for_completion_timeout(&ab->htc_suspend, 3 * HZ);
1794+
1795+
if (!time_left) {
1796+
ath11k_warn(ab, "suspend timed out - target pause event never came\n");
1797+
/* pointless to try other pdevs */
1798+
return;
1799+
}
1800+
}
1801+
}
1802+
16721803
static void ath11k_core_pdev_destroy(struct ath11k_base *ab)
16731804
{
16741805
ath11k_spectral_deinit(ab);
16751806
ath11k_thermal_unregister(ab);
16761807
ath11k_mac_unregister(ab);
1808+
ath11k_core_pdev_suspend_target(ab);
16771809
ath11k_hif_irq_disable(ab);
16781810
ath11k_dp_pdev_free(ab);
16791811
ath11k_debugfs_pdev_destroy(ab);

drivers/net/wireless/ath/ath11k/core.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ enum ath11k_hw_rev {
148148
ATH11K_HW_WCN6750_HW10,
149149
ATH11K_HW_IPQ5018_HW10,
150150
ATH11K_HW_QCA2066_HW21,
151+
ATH11K_HW_QCA6698AQ_HW21,
151152
};
152153

153154
enum ath11k_firmware_mode {
@@ -340,7 +341,6 @@ struct ath11k_chan_power_info {
340341
* @ap_power_type: type of power (SP/LPI/VLP)
341342
* @num_pwr_levels: number of power levels
342343
* @reg_max: Array of maximum TX power (dBm) per PSD value
343-
* @ap_constraint_power: AP constraint power (dBm)
344344
* @tpe: TPE values processed from TPE IE
345345
* @chan_power_info: power info to send to firmware
346346
*/
@@ -350,7 +350,6 @@ struct ath11k_reg_tpc_power_info {
350350
enum wmi_reg_6ghz_ap_type ap_power_type;
351351
u8 num_pwr_levels;
352352
u8 reg_max[ATH11K_NUM_PWR_LEVELS];
353-
u8 ap_constraint_power;
354353
s8 tpe[ATH11K_NUM_PWR_LEVELS];
355354
struct ath11k_chan_power_info chan_power_info[ATH11K_NUM_PWR_LEVELS];
356355
};
@@ -370,7 +369,6 @@ struct ath11k_vif {
370369
struct ath11k *ar;
371370
struct ieee80211_vif *vif;
372371

373-
u16 tx_seq_no;
374372
struct wmi_wmm_params_all_arg wmm_params;
375373
struct list_head list;
376374
union {

drivers/net/wireless/ath/ath11k/dp.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ struct ath11k_mon_data {
165165
struct ath11k_pdev_mon_stats rx_mon_stats;
166166
/* lock for monitor data */
167167
spinlock_t mon_lock;
168-
struct sk_buff_head rx_status_q;
169168
};
170169

171170
struct ath11k_pdev_dp {

drivers/net/wireless/ath/ath11k/dp_rx.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3872,6 +3872,7 @@ int ath11k_dp_process_rx_err(struct ath11k_base *ab, struct napi_struct *napi,
38723872
ath11k_hal_rx_msdu_link_info_get(link_desc_va, &num_msdus, msdu_cookies,
38733873
&rbm);
38743874
if (rbm != HAL_RX_BUF_RBM_WBM_IDLE_DESC_LIST &&
3875+
rbm != HAL_RX_BUF_RBM_SW1_BM &&
38753876
rbm != HAL_RX_BUF_RBM_SW3_BM) {
38763877
ab->soc_stats.invalid_rbm++;
38773878
ath11k_warn(ab, "invalid return buffer manager %d\n", rbm);
@@ -4690,11 +4691,12 @@ static void ath11k_dp_mon_get_buf_len(struct hal_rx_msdu_desc_info *info,
46904691
}
46914692
}
46924693

4693-
static u32
4694-
ath11k_dp_rx_mon_mpdu_pop(struct ath11k *ar, int mac_id,
4695-
void *ring_entry, struct sk_buff **head_msdu,
4696-
struct sk_buff **tail_msdu, u32 *npackets,
4697-
u32 *ppdu_id)
4694+
/* clang stack usage explodes if this is inlined */
4695+
static noinline_for_stack
4696+
u32 ath11k_dp_rx_mon_mpdu_pop(struct ath11k *ar, int mac_id,
4697+
void *ring_entry, struct sk_buff **head_msdu,
4698+
struct sk_buff **tail_msdu, u32 *npackets,
4699+
u32 *ppdu_id)
46984700
{
46994701
struct ath11k_pdev_dp *dp = &ar->dp;
47004702
struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&dp->mon_data;
@@ -5705,8 +5707,6 @@ static int ath11k_dp_rx_pdev_mon_status_attach(struct ath11k *ar)
57055707
struct ath11k_pdev_dp *dp = &ar->dp;
57065708
struct ath11k_mon_data *pmon = (struct ath11k_mon_data *)&dp->mon_data;
57075709

5708-
skb_queue_head_init(&pmon->rx_status_q);
5709-
57105710
pmon->mon_ppdu_status = DP_PPDU_STATUS_START;
57115711

57125712
memset(&pmon->rx_mon_stats, 0,

drivers/net/wireless/ath/ath11k/hal.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ enum hal_rx_buf_return_buf_manager {
700700
#define HAL_REO_CMD_FLG_UNBLK_RESOURCE BIT(7)
701701
#define HAL_REO_CMD_FLG_UNBLK_CACHE BIT(8)
702702

703-
/* Should be matching with HAL_REO_UPD_RX_QUEUE_INFO0_UPD_* feilds */
703+
/* Should be matching with HAL_REO_UPD_RX_QUEUE_INFO0_UPD_* fields */
704704
#define HAL_REO_CMD_UPD0_RX_QUEUE_NUM BIT(8)
705705
#define HAL_REO_CMD_UPD0_VLD BIT(9)
706706
#define HAL_REO_CMD_UPD0_ALDC BIT(10)
@@ -725,7 +725,7 @@ enum hal_rx_buf_return_buf_manager {
725725
#define HAL_REO_CMD_UPD0_PN_VALID BIT(29)
726726
#define HAL_REO_CMD_UPD0_PN BIT(30)
727727

728-
/* Should be matching with HAL_REO_UPD_RX_QUEUE_INFO1_* feilds */
728+
/* Should be matching with HAL_REO_UPD_RX_QUEUE_INFO1_* fields */
729729
#define HAL_REO_CMD_UPD1_VLD BIT(16)
730730
#define HAL_REO_CMD_UPD1_ALDC GENMASK(18, 17)
731731
#define HAL_REO_CMD_UPD1_DIS_DUP_DETECTION BIT(19)
@@ -741,7 +741,7 @@ enum hal_rx_buf_return_buf_manager {
741741
#define HAL_REO_CMD_UPD1_PN_HANDLE_ENABLE BIT(30)
742742
#define HAL_REO_CMD_UPD1_IGNORE_AMPDU_FLG BIT(31)
743743

744-
/* Should be matching with HAL_REO_UPD_RX_QUEUE_INFO2_* feilds */
744+
/* Should be matching with HAL_REO_UPD_RX_QUEUE_INFO2_* fields */
745745
#define HAL_REO_CMD_UPD2_SVLD BIT(10)
746746
#define HAL_REO_CMD_UPD2_SSN GENMASK(22, 11)
747747
#define HAL_REO_CMD_UPD2_SEQ_2K_ERR BIT(23)

drivers/net/wireless/ath/ath11k/hal_rx.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,8 @@ int ath11k_hal_wbm_desc_parse_err(struct ath11k_base *ab, void *desc,
372372

373373
ret_buf_mgr = FIELD_GET(BUFFER_ADDR_INFO1_RET_BUF_MGR,
374374
wbm_desc->buf_addr_info.info1);
375-
if (ret_buf_mgr != HAL_RX_BUF_RBM_SW3_BM) {
375+
if (ret_buf_mgr != HAL_RX_BUF_RBM_SW1_BM &&
376+
ret_buf_mgr != HAL_RX_BUF_RBM_SW3_BM) {
376377
ab->soc_stats.invalid_rbm++;
377378
return -EINVAL;
378379
}

drivers/net/wireless/ath/ath11k/hw.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ struct ath11k_hw_params {
227227
bool smp2p_wow_exit;
228228
bool support_fw_mac_sequence;
229229
bool support_dual_stations;
230+
bool pdev_suspend;
230231
};
231232

232233
struct ath11k_hw_ops {

drivers/net/wireless/ath/ath11k/mac.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,8 +1697,6 @@ static void ath11k_control_beaconing(struct ath11k_vif *arvif,
16971697
return;
16981698
}
16991699

1700-
arvif->tx_seq_no = 0x1000;
1701-
17021700
arvif->aid = 0;
17031701

17041702
ether_addr_copy(arvif->bssid, info->bssid);
@@ -2230,7 +2228,7 @@ static void ath11k_peer_assoc_h_vht(struct ath11k *ar,
22302228
__le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask);
22312229

22322230
/* In IPQ8074 platform, VHT mcs rate 10 and 11 is enabled by default.
2233-
* VHT mcs rate 10 and 11 is not suppoerted in 11ac standard.
2231+
* VHT mcs rate 10 and 11 is not supported in 11ac standard.
22342232
* so explicitly disable the VHT MCS rate 10 and 11 in 11ac mode.
22352233
*/
22362234
arg->tx_mcs_set &= ~IEEE80211_VHT_MCS_SUPPORT_0_11_MASK;
@@ -6952,7 +6950,7 @@ static void ath11k_mac_op_remove_interface(struct ieee80211_hw *hw,
69526950
/* Recalc txpower for remaining vdev */
69536951
ath11k_mac_txpower_recalc(ar);
69546952

6955-
/* TODO: recal traffic pause state based on the available vdevs */
6953+
/* TODO: recalc traffic pause state based on the available vdevs */
69566954

69576955
mutex_unlock(&ar->conf_mutex);
69586956
}
@@ -9356,6 +9354,7 @@ static int ath11k_fw_stats_request(struct ath11k *ar,
93569354

93579355
static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
93589356
struct ieee80211_vif *vif,
9357+
unsigned int link_id,
93599358
int *dbm)
93609359
{
93619360
struct ath11k *ar = hw->priv;

drivers/net/wireless/ath/ath11k/mhi.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ int ath11k_mhi_register(struct ath11k_pci *ab_pci)
398398
case ATH11K_HW_WCN6855_HW20:
399399
case ATH11K_HW_WCN6855_HW21:
400400
case ATH11K_HW_QCA2066_HW21:
401+
case ATH11K_HW_QCA6698AQ_HW21:
401402
ath11k_mhi_config = &ath11k_mhi_config_qca6390;
402403
break;
403404
default:

drivers/net/wireless/ath/ath11k/pci.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,9 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
846846
case 0x1019D0E1:
847847
ab->hw_rev = ATH11K_HW_QCA2066_HW21;
848848
break;
849+
case 0x001e60e1:
850+
ab->hw_rev = ATH11K_HW_QCA6698AQ_HW21;
851+
break;
849852
default:
850853
ab->hw_rev = ATH11K_HW_WCN6855_HW21;
851854
}

0 commit comments

Comments
 (0)