ath11k requests the optional firmware-2.bin with firmware_request_nowarn() and uses API 1 when the request fails. firmware_request_nowarn() only silences the kernel's warning. It does not set FW_OPT_NOFALLBACK_SYSFS, so with CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y, as OpenWrt sets, the lookup of a missing file falls back to sysfs and sends a firmware uevent. OpenWrt's procd hotplug handler answers it and logs "Could not find firmware /lib/firmware/ath11k/IPQ8074/hw2.0/firmware-2.bin: No such file or directory" each time the driver loads on an IPQ8074 device that ships no firmware-2.bin. Request the file with request_firmware_direct(), which sets FW_OPT_NOFALLBACK_SYSFS, so a missing file is not passed to user space. Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.12-01460 Closes: https://github.com/openwrt/openwrt/issues/24743 Signed-off-by: Julius Bairaktaris --- v2: - target ath-next in the subject - name the code path that produces the message and why request_firmware_direct() avoids it - drop the Assisted-by trailer - rebased on ath-next 1be6c8d3027d, no code change - new 2/2: ath12k has the same pattern (Rameshkumar Sundaram's request to fix ath12k alongside ath11k) v1: https://lore.kernel.org/all/20260910071838.1983652-1-julius@bairaktaris.de/ drivers/net/wireless/ath/ath11k/fw.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/fw.c b/drivers/net/wireless/ath/ath11k/fw.c index ef1b4c81843a..88ec2ffd9f00 100644 --- a/drivers/net/wireless/ath/ath11k/fw.c +++ b/drivers/net/wireless/ath/ath11k/fw.c @@ -16,10 +16,12 @@ static int ath11k_fw_request_firmware_api_n(struct ath11k_base *ab, struct ath11k_fw_ie *hdr; const u8 *data; __le32 *timestamp; + char path[100]; - ab->fw.fw = ath11k_core_firmware_request(ab, name); - if (IS_ERR(ab->fw.fw)) { - ret = PTR_ERR(ab->fw.fw); + ath11k_core_create_firmware_path(ab, name, path, sizeof(path)); + + ret = request_firmware_direct(&ab->fw.fw, path, ab->dev); + if (ret) { ath11k_dbg(ab, ATH11K_DBG_BOOT, "failed to load %s: %d\n", name, ret); ab->fw.fw = NULL; return ret; -- 2.53.0