Commit 94aced6e authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'wireless-next-2025-09-25' of...

Merge tag 'wireless-next-2025-09-25' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next

Johannes Berg says:

====================
Quite a bit more things, including pull requests from drivers:

 - mt76: MLO support, HW restart improvements
 - rtw88/89: small features, prep for RTL8922DE support
 - ath10k: GTK rekey fixes
 - cfg80211/mac80211:
   - additions for more NAN support
   - S1G channel representation cleanup

* tag 'wireless-next-2025-09-25' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next: (167 commits)
  wifi: libertas: add WQ_UNBOUND to alloc_workqueue users
  Revert "wifi: libertas: WQ_PERCPU added to alloc_workqueue users"
  wifi: libertas: WQ_PERCPU added to alloc_workqueue users
  wifi: cfg80211: fix width unit in cfg80211_radio_chandef_valid()
  wifi: ath11k: HAL SRNG: don't deinitialize and re-initialize again
  wifi: ath12k: enforce CPU endian format for all QMI data
  wifi: ath12k: Use 1KB Cache Flush Command for QoS TID Descriptors
  wifi: ath12k: Fix flush cache failure during RX queue update
  wifi: ath12k: Add Retry Mechanism for REO RX Queue Update Failures
  wifi: ath12k: Refactor REO command to use ath12k_dp_rx_tid_rxq
  wifi: ath12k: Refactor RX TID buffer cleanup into helper function
  wifi: ath12k: Refactor RX TID deletion handling into helper function
  wifi: ath12k: Increase DP_REO_CMD_RING_SIZE to 256
  wifi: cfg80211: remove IEEE80211_CHAN_{1,2,4,8,16}MHZ flags
  wifi: rtw89: avoid circular locking dependency in ser_state_run()
  wifi: rtw89: fix leak in rtw89_core_send_nullfunc()
  wifi: rtw89: avoid possible TX wait initialization race
  wifi: rtw89: fix use-after-free in rtw89_core_tx_kick_off_and_wait()
  wifi: ath12k: Fix peer lookup in ath12k_dp_mon_rx_deliver_msdu()
  wifi: mac80211: fix Rx packet handling when pubsta information is not available
  ...
====================

Link: https://patch.msgid.link/20250925232341.4544-3-johannes@sipsolutions.net


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 47f78a67 56d9de46
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ static int ath10k_leds_set_brightness_blocking(struct led_classdev *led_cdev,
		goto out;

	ar->leds.gpio_state_pin = (brightness != LED_OFF) ^ led->active_low;
	ath10k_wmi_gpio_output(ar, led->gpio, ar->leds.gpio_state_pin);
	ath10k_wmi_gpio_output(ar, ar->hw_params.led_pin, ar->leds.gpio_state_pin);

out:
	mutex_unlock(&ar->conf_mutex);
@@ -64,7 +64,6 @@ int ath10k_leds_register(struct ath10k *ar)
	snprintf(ar->leds.label, sizeof(ar->leds.label), "ath10k-%s",
		 wiphy_name(ar->hw->wiphy));
	ar->leds.wifi_led.active_low = 1;
	ar->leds.wifi_led.gpio = ar->hw_params.led_pin;
	ar->leds.wifi_led.name = ar->leds.label;
	ar->leds.wifi_led.default_state = LEDS_GPIO_DEFSTATE_KEEP;

+10 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/acpi.h>
#include <linux/of.h>
#include <linux/bitfield.h>
#include <linux/random.h>

#include "hif.h"
#include "core.h"
@@ -290,9 +291,16 @@ static int ath10k_send_key(struct ath10k_vif *arvif,
		key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;

	if (cmd == DISABLE_KEY) {
		if (flags & WMI_KEY_GROUP) {
			/* Not all hardware handles group-key deletion operation
			 * correctly. Replace the key with a junk value to invalidate it.
			 */
			get_random_bytes(key->key, key->keylen);
		} else {
			arg.key_cipher = ar->wmi_key_cipher[WMI_CIPHER_NONE];
			arg.key_data = NULL;
		}
	}

	return ath10k_wmi_vdev_install_key(arvif->ar, &arg);
}
+3 −11
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@
#include <linux/property.h>
#include <linux/regulator/consumer.h>
#include <linux/remoteproc/qcom_rproc.h>
#include <linux/of_address.h>
#include <linux/of_reserved_mem.h>
#include <linux/iommu.h>

#include "ce.h"
@@ -1559,19 +1559,11 @@ static void ath10k_modem_deinit(struct ath10k *ar)
static int ath10k_setup_msa_resources(struct ath10k *ar, u32 msa_size)
{
	struct device *dev = ar->dev;
	struct device_node *node;
	struct resource r;
	int ret;

	node = of_parse_phandle(dev->of_node, "memory-region", 0);
	if (node) {
		ret = of_address_to_resource(node, 0, &r);
		of_node_put(node);
		if (ret) {
			dev_err(dev, "failed to resolve msa fixed region\n");
			return ret;
		}

	ret = of_reserved_mem_region_to_resource(dev->of_node, 0, &r);
	if (!ret) {
		ar->msa.paddr = r.start;
		ar->msa.mem_size = resource_size(&r);
		ar->msa.vaddr = devm_memremap(dev, ar->msa.paddr,
+19 −20
Original line number Diff line number Diff line
@@ -1764,33 +1764,32 @@ void ath10k_wmi_put_wmi_channel(struct ath10k *ar, struct wmi_channel *ch,

int ath10k_wmi_wait_for_service_ready(struct ath10k *ar)
{
	unsigned long timeout = jiffies + WMI_SERVICE_READY_TIMEOUT_HZ;
	unsigned long time_left, i;

	time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
						WMI_SERVICE_READY_TIMEOUT_HZ);
	if (!time_left) {
	/* Sometimes the PCI HIF doesn't receive interrupt
	 * for the service ready message even if the buffer
	 * was completed. PCIe sniffer shows that it's
	 * because the corresponding CE ring doesn't fires
		 * it. Workaround here by polling CE rings once.
	 * it. Workaround here by polling CE rings. Since
	 * the message could arrive at any time, continue
	 * polling until timeout.
	 */
		ath10k_warn(ar, "failed to receive service ready completion, polling..\n");

	do {
		for (i = 0; i < CE_COUNT; i++)
			ath10k_hif_send_complete_check(ar, i, 1);

		/* The 100 ms granularity is a tradeoff considering scheduler
		 * overhead and response latency
		 */
		time_left = wait_for_completion_timeout(&ar->wmi.service_ready,
							WMI_SERVICE_READY_TIMEOUT_HZ);
		if (!time_left) {
			ath10k_warn(ar, "polling timed out\n");
			return -ETIMEDOUT;
		}

		ath10k_warn(ar, "service ready completion received, continuing normally\n");
	}

							msecs_to_jiffies(100));
		if (time_left)
			return 0;
	} while (time_before(jiffies, timeout));

	ath10k_warn(ar, "failed to receive service ready completion\n");
	return -ETIMEDOUT;
}

int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar)
+3 −14
Original line number Diff line number Diff line
@@ -9,8 +9,8 @@
#include <linux/property.h>
#include <linux/of_device.h>
#include <linux/of.h>
#include <linux/of_reserved_mem.h>
#include <linux/dma-mapping.h>
#include <linux/of_address.h>
#include <linux/iommu.h>
#include "ahb.h"
#include "debug.h"
@@ -919,16 +919,10 @@ static int ath11k_ahb_setup_msa_resources(struct ath11k_base *ab)
{
	struct ath11k_ahb *ab_ahb = ath11k_ahb_priv(ab);
	struct device *dev = ab->dev;
	struct device_node *node;
	struct resource r;
	int ret;

	node = of_parse_phandle(dev->of_node, "memory-region", 0);
	if (!node)
		return -ENOENT;

	ret = of_address_to_resource(node, 0, &r);
	of_node_put(node);
	ret = of_reserved_mem_region_to_resource(dev->of_node, 0, &r);
	if (ret) {
		dev_err(dev, "failed to resolve msa fixed region\n");
		return ret;
@@ -937,12 +931,7 @@ static int ath11k_ahb_setup_msa_resources(struct ath11k_base *ab)
	ab_ahb->fw.msa_paddr = r.start;
	ab_ahb->fw.msa_size = resource_size(&r);

	node = of_parse_phandle(dev->of_node, "memory-region", 1);
	if (!node)
		return -ENOENT;

	ret = of_address_to_resource(node, 0, &r);
	of_node_put(node);
	ret = of_reserved_mem_region_to_resource(dev->of_node, 1, &r);
	if (ret) {
		dev_err(dev, "failed to resolve ce fixed region\n");
		return ret;
Loading