Skip to content

Commit c722a94

Browse files
author
CKI KWF Bot
committed
Merge: Wireless core and drivers rebase to v6.17
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-10/-/merge_requests/1617 JIRA: https://issues.redhat.com/browse/RHEL-114889 JIRA: https://issues.redhat.com/browse/RHEL-117582 CVE: CVE-2025-39849 JIRA: https://issues.redhat.com/browse/RHEL-122877 CVE: CVE-2025-39864 JIRA: https://issues.redhat.com/browse/RHEL-123069 CVE: CVE-2025-39918 Tested: basic testing with several supported WiFi cards (Intel, Qualcomm, Mediatek and Realtek). Wireless core and drivers update to v6.17. Upstream status: linux.git Depends: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-10/-/merge_requests/1606 New feature to be enabled in the next rebases: Omitted-fix: 86adc88 Reapply "wifi: iwlwifi: remove support of several iwl_ppag_table_cmd versions" Postponed: Omitted-fix: 9222582 Revert "wifi: ath12k: Fix missing station power save configuration" Omitted-fix: f35a07a wifi: ath10k: move recovery check logic into a new work Omitted-fix: 9065b96 wifi: ath11k: zero init info->status in wmi_process_mgmt_tx_comp() Omitted-fix: 28a4557 wifi: rtw89: usb: use common error path for skbs in rtw89_usb_rx_handler() Omitted-fix: 7543818 wifi: rtw89: usb: fix leak in rtw89_usb_write_port() Omitted-fix: a84b172 wifi: mt76: mt7996: move mt7996_update_beacons under mt76 mutex Omitted-fix: cdb2941 Revert "wifi: mt76: mt792x: improve monitor interface handling" Omitted-fix: 7545551 wifi: mt76: mt7996: Add missing locking in mt7996_mac_sta_rc_work() Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com> Approved-by: Murphy Zhou <xzhou@redhat.com> Approved-by: Michal Schmidt <mschmidt@redhat.com> Approved-by: Davide Caratti <dcaratti@redhat.com> Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com> Merged-by: CKI GitLab Kmaint Pipeline Bot <26919896-cki-kmaint-pipeline-bot@users.noreply.gitlab.com>
2 parents 8940ac7 + 96f3ebb commit c722a94

File tree

464 files changed

+15492
-6967
lines changed

Some content is hidden

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

464 files changed

+15492
-6967
lines changed

Documentation/devicetree/bindings/net/wireless/qca,ath9k.yaml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ maintainers:
1212
description: |
1313
This node provides properties for configuring the ath9k wireless device.
1414
The node is expected to be specified as a child node of the PCI controller
15-
to which the wireless chip is connected.
15+
or AHB bus to which the wireless chip is connected.
1616
1717
allOf:
1818
- $ref: ieee80211.yaml#
@@ -35,6 +35,12 @@ properties:
3535
- pci168c,0034 # AR9462
3636
- pci168c,0036 # AR9565
3737
- pci168c,0037 # AR1111 and AR9485
38+
- qca,ar9130-wifi
39+
- qca,ar9330-wifi
40+
- qca,ar9340-wifi
41+
- qca,qca9530-wifi
42+
- qca,qca9550-wifi
43+
- qca,qca9560-wifi
3844

3945
reg:
4046
maxItems: 1
@@ -88,3 +94,13 @@ examples:
8894
nvmem-cell-names = "mac-address", "calibration";
8995
};
9096
};
97+
- |
98+
ahb {
99+
#address-cells = <1>;
100+
#size-cells = <1>;
101+
wifi@180c0000 {
102+
compatible = "qca,ar9130-wifi";
103+
reg = <0x180c0000 0x230000>;
104+
interrupts = <2>;
105+
};
106+
};

Documentation/devicetree/bindings/net/wireless/qcom,ath11k-pci.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ properties:
3636
string to uniquely identify variant of the calibration data for designs
3737
with colliding bus and device ids
3838
39+
firmware-name:
40+
maxItems: 1
41+
description:
42+
If present, a board or platform specific string used to lookup
43+
usecase-specific firmware files for the device.
44+
3945
vddrfacmn-supply:
4046
description: VDD_RFA_CMN supply regulator handle
4147

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/net/wireless/ralink,rt2880.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Ralink RT2880 wireless device
8+
9+
maintainers:
10+
- Stanislaw Gruszka <stf_xl@wp.pl>
11+
12+
description: |
13+
This node provides properties for configuring RT2880 SOC wifi devices.
14+
The node is expected to be specified as a root node of the device.
15+
16+
allOf:
17+
- $ref: ieee80211.yaml#
18+
19+
properties:
20+
compatible:
21+
enum:
22+
- ralink,rt2880-wifi
23+
24+
reg:
25+
maxItems: 1
26+
27+
clocks:
28+
maxItems: 1
29+
30+
interrupts:
31+
maxItems: 1
32+
33+
required:
34+
- compatible
35+
- reg
36+
- clocks
37+
- interrupts
38+
39+
additionalProperties: false
40+
41+
examples:
42+
- |
43+
wifi@110180000 {
44+
compatible = "ralink,rt2880-wifi";
45+
reg = <0x10180000 0x40000>;
46+
clocks = <&sysc 16>;
47+
interrupt-parent = <&cpuintc>;
48+
interrupts = <6>;
49+
};

arch/mips/boot/dts/ralink/mt7620a.dtsi

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,14 @@
5656
reg-shift = <2>;
5757
};
5858
};
59+
60+
wmac: wifi@10180000 {
61+
compatible = "ralink,rt2880-wifi";
62+
reg = <0x10180000 0x40000>;
63+
64+
clocks = <&sysc 16>;
65+
66+
interrupt-parent = <&cpuintc>;
67+
interrupts = <6>;
68+
};
5969
};

drivers/net/wireless/admtek/adm8211.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1293,7 +1293,7 @@ static void adm8211_set_bssid(struct ieee80211_hw *dev, const u8 *bssid)
12931293
ADM8211_CSR_WRITE(ABDA1, reg);
12941294
}
12951295

1296-
static int adm8211_config(struct ieee80211_hw *dev, u32 changed)
1296+
static int adm8211_config(struct ieee80211_hw *dev, int radio_idx, u32 changed)
12971297
{
12981298
struct adm8211_priv *priv = dev->priv;
12991299
struct ieee80211_conf *conf = &dev->conf;

drivers/net/wireless/ath/ar5523/ar5523.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,7 +1083,8 @@ static void ar5523_stop(struct ieee80211_hw *hw, bool suspend)
10831083
mutex_unlock(&ar->mutex);
10841084
}
10851085

1086-
static int ar5523_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
1086+
static int ar5523_set_rts_threshold(struct ieee80211_hw *hw, int radio_idx,
1087+
u32 value)
10871088
{
10881089
struct ar5523 *ar = hw->priv;
10891090
int ret;
@@ -1137,7 +1138,7 @@ static void ar5523_remove_interface(struct ieee80211_hw *hw,
11371138
ar->vif = NULL;
11381139
}
11391140

1140-
static int ar5523_hwconfig(struct ieee80211_hw *hw, u32 changed)
1141+
static int ar5523_hwconfig(struct ieee80211_hw *hw, int radio_idx, u32 changed)
11411142
{
11421143
struct ar5523 *ar = hw->priv;
11431144

drivers/net/wireless/ath/ath10k/bmi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
* Copyright (c) 2005-2011 Atheros Communications Inc.
44
* Copyright (c) 2011-2014,2016-2017 Qualcomm Atheros, Inc.
55
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
6+
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
67
*/
78

9+
#include <linux/export.h>
810
#include "bmi.h"
911
#include "hif.h"
1012
#include "debug.h"

drivers/net/wireless/ath/ath10k/ce.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
55
* Copyright (c) 2018 The Linux Foundation. All rights reserved.
66
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
7+
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
78
*/
89

10+
#include <linux/export.h>
911
#include "hif.h"
1012
#include "ce.h"
1113
#include "debug.h"

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

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
55
* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
66
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
7+
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
78
*/
89

10+
#include <linux/export.h>
911
#include <linux/module.h>
1012
#include <linux/firmware.h>
1113
#include <linux/of.h>
@@ -1563,7 +1565,7 @@ static int ath10k_core_create_board_name(struct ath10k *ar, char *name,
15631565
bool with_chip_id)
15641566
{
15651567
/* strlen(',variant=') + strlen(ar->id.bdf_ext) */
1566-
char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = { 0 };
1568+
char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = {};
15671569

15681570
if (with_variant && ar->id.bdf_ext[0] != '\0')
15691571
scnprintf(variant, sizeof(variant), ",variant=%s",
@@ -2491,12 +2493,50 @@ static int ath10k_init_hw_params(struct ath10k *ar)
24912493
return 0;
24922494
}
24932495

2496+
static bool ath10k_core_needs_recovery(struct ath10k *ar)
2497+
{
2498+
long time_left;
2499+
2500+
/* Sometimes the recovery will fail and then the next all recovery fail,
2501+
* so avoid infinite recovery.
2502+
*/
2503+
if (atomic_read(&ar->fail_cont_count) >= ATH10K_RECOVERY_MAX_FAIL_COUNT) {
2504+
ath10k_err(ar, "consecutive fail %d times, will shutdown driver!",
2505+
atomic_read(&ar->fail_cont_count));
2506+
ar->state = ATH10K_STATE_WEDGED;
2507+
return false;
2508+
}
2509+
2510+
ath10k_dbg(ar, ATH10K_DBG_BOOT, "total recovery count: %d", ++ar->recovery_count);
2511+
2512+
if (atomic_read(&ar->pending_recovery)) {
2513+
/* Sometimes it happened another recovery work before the previous one
2514+
* completed, then the second recovery work will destroy the previous
2515+
* one, thus below is to avoid that.
2516+
*/
2517+
time_left = wait_for_completion_timeout(&ar->driver_recovery,
2518+
ATH10K_RECOVERY_TIMEOUT_HZ);
2519+
if (time_left) {
2520+
ath10k_warn(ar, "previous recovery succeeded, skip this!\n");
2521+
return false;
2522+
}
2523+
2524+
/* Record the continuous recovery fail count when recovery failed. */
2525+
atomic_inc(&ar->fail_cont_count);
2526+
2527+
/* Avoid having multiple recoveries at the same time. */
2528+
return false;
2529+
}
2530+
2531+
atomic_inc(&ar->pending_recovery);
2532+
2533+
return true;
2534+
}
2535+
24942536
void ath10k_core_start_recovery(struct ath10k *ar)
24952537
{
2496-
if (test_and_set_bit(ATH10K_FLAG_RESTARTING, &ar->dev_flags)) {
2497-
ath10k_warn(ar, "already restarting\n");
2538+
if (!ath10k_core_needs_recovery(ar))
24982539
return;
2499-
}
25002540

25012541
queue_work(ar->workqueue, &ar->restart_work);
25022542
}
@@ -2532,6 +2572,8 @@ static void ath10k_core_restart(struct work_struct *work)
25322572
struct ath10k *ar = container_of(work, struct ath10k, restart_work);
25332573
int ret;
25342574

2575+
reinit_completion(&ar->driver_recovery);
2576+
25352577
set_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags);
25362578

25372579
/* Place a barrier to make sure the compiler doesn't reorder
@@ -2596,8 +2638,6 @@ static void ath10k_core_restart(struct work_struct *work)
25962638
if (ret)
25972639
ath10k_warn(ar, "failed to send firmware crash dump via devcoredump: %d",
25982640
ret);
2599-
2600-
complete(&ar->driver_recovery);
26012641
}
26022642

26032643
static void ath10k_core_set_coverage_class_work(struct work_struct *work)
@@ -2606,7 +2646,7 @@ static void ath10k_core_set_coverage_class_work(struct work_struct *work)
26062646
set_coverage_class_work);
26072647

26082648
if (ar->hw_params.hw_ops->set_coverage_class)
2609-
ar->hw_params.hw_ops->set_coverage_class(ar, -1);
2649+
ar->hw_params.hw_ops->set_coverage_class(ar, -1, -1);
26102650
}
26112651

26122652
static int ath10k_core_init_firmware_features(struct ath10k *ar)

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
55
* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
66
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
7+
* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
78
*/
89

910
#ifndef _CORE_H_
@@ -87,6 +88,8 @@
8788
IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER)
8889
#define ATH10K_ITER_RESUME_FLAGS (IEEE80211_IFACE_ITER_RESUME_ALL |\
8990
IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER)
91+
#define ATH10K_RECOVERY_TIMEOUT_HZ (5 * HZ)
92+
#define ATH10K_RECOVERY_MAX_FAIL_COUNT 4
9093

9194
struct ath10k;
9295

@@ -779,7 +782,7 @@ enum ath10k_fw_features {
779782
/* Firmware supports bypassing PLL setting on init. */
780783
ATH10K_FW_FEATURE_SUPPORTS_SKIP_CLOCK_INIT = 9,
781784

782-
/* Raw mode support. If supported, FW supports receiving and trasmitting
785+
/* Raw mode support. If supported, FW supports receiving and transmitting
783786
* frames in raw mode.
784787
*/
785788
ATH10K_FW_FEATURE_RAW_MODE_SUPPORT = 10,
@@ -865,9 +868,6 @@ enum ath10k_dev_flags {
865868
/* Per Station statistics service */
866869
ATH10K_FLAG_PEER_STATS,
867870

868-
/* Indicates that ath10k device is during recovery process and not complete */
869-
ATH10K_FLAG_RESTARTING,
870-
871871
/* protected by conf_mutex */
872872
ATH10K_FLAG_NAPI_ENABLED,
873873
};
@@ -1211,6 +1211,11 @@ struct ath10k {
12111211
struct work_struct bundle_tx_work;
12121212
struct work_struct tx_complete_work;
12131213

1214+
atomic_t pending_recovery;
1215+
unsigned int recovery_count;
1216+
/* continuous recovery fail count */
1217+
atomic_t fail_cont_count;
1218+
12141219
/* cycle count is reported twice for each visited channel during scan.
12151220
* access protected by data_lock
12161221
*/

0 commit comments

Comments
 (0)