The branch stable/15 has been updated by bz:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=17c0fbc240c323a2ddeb875d2a9fcbfc2960d378

commit 17c0fbc240c323a2ddeb875d2a9fcbfc2960d378
Author:     Bjoern A. Zeeb <[email protected]>
AuthorDate: 2025-12-06 09:51:10 +0000
Commit:     Bjoern A. Zeeb <[email protected]>
CommitDate: 2025-12-15 18:09:20 +0000

    ath10k: update Atheros/QCA's ath10k driver
    
    This version is based on
    git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
    7d0a66e4bb9081d75c82ec4957c50034cb0ea449 ( tag: v6.18 ).
    
    Merge commit 'f4669ef6cf7860919442e67106e83f616ed36f51'.
    
    Sponsored by:   The FreeBSD Foundation
    
    (cherry picked from commit 9954217599ce02fbf1772388e24e0b89663f4425)
---
 sys/contrib/dev/athk/ath10k/Kconfig        |   7 +
 sys/contrib/dev/athk/ath10k/Makefile       |   1 +
 sys/contrib/dev/athk/ath10k/ahb.c          |  30 ++--
 sys/contrib/dev/athk/ath10k/bmi.c          |   9 +-
 sys/contrib/dev/athk/ath10k/ce.c           |  35 ++--
 sys/contrib/dev/athk/ath10k/ce.h           |   2 +-
 sys/contrib/dev/athk/ath10k/core.c         | 174 ++++++++++++++-----
 sys/contrib/dev/athk/ath10k/core.h         |  28 ++-
 sys/contrib/dev/athk/ath10k/coredump.c     |   3 +
 sys/contrib/dev/athk/ath10k/coredump.h     |   7 +-
 sys/contrib/dev/athk/ath10k/debug.c        |  62 +++----
 sys/contrib/dev/athk/ath10k/debugfs_sta.c  |  10 +-
 sys/contrib/dev/athk/ath10k/htc.c          |  10 +-
 sys/contrib/dev/athk/ath10k/htc.h          |  20 +--
 sys/contrib/dev/athk/ath10k/htt.c          |   3 +-
 sys/contrib/dev/athk/ath10k/htt.h          |  18 +-
 sys/contrib/dev/athk/ath10k/htt_rx.c       |  22 ++-
 sys/contrib/dev/athk/ath10k/htt_tx.c       |  26 ++-
 sys/contrib/dev/athk/ath10k/hw.c           |  64 +++----
 sys/contrib/dev/athk/ath10k/hw.h           |  63 ++++---
 sys/contrib/dev/athk/ath10k/leds.c         |  89 ++++++++++
 sys/contrib/dev/athk/ath10k/leds.h         |  34 ++++
 sys/contrib/dev/athk/ath10k/mac.c          | 265 ++++++++++++++++++-----------
 sys/contrib/dev/athk/ath10k/pci.c          |  86 +++++-----
 sys/contrib/dev/athk/ath10k/pci.h          |   7 +-
 sys/contrib/dev/athk/ath10k/qmi.c          |  12 ++
 sys/contrib/dev/athk/ath10k/qmi.h          |   1 +
 sys/contrib/dev/athk/ath10k/qmi_wlfw_v01.c |   1 +
 sys/contrib/dev/athk/ath10k/qmi_wlfw_v01.h |   1 +
 sys/contrib/dev/athk/ath10k/rx_desc.h      |   1 +
 sys/contrib/dev/athk/ath10k/sdio.c         |  37 ++--
 sys/contrib/dev/athk/ath10k/snoc.c         |  60 ++++---
 sys/contrib/dev/athk/ath10k/spectral.c     |  26 +--
 sys/contrib/dev/athk/ath10k/targaddrs.h    |   3 +
 sys/contrib/dev/athk/ath10k/testmode.c     |   4 +-
 sys/contrib/dev/athk/ath10k/thermal.c      |   3 +-
 sys/contrib/dev/athk/ath10k/trace.c        |   2 +
 sys/contrib/dev/athk/ath10k/trace.h        |  64 +++----
 sys/contrib/dev/athk/ath10k/txrx.c         |   2 +-
 sys/contrib/dev/athk/ath10k/usb.c          |   8 +-
 sys/contrib/dev/athk/ath10k/usb.h          |   1 +
 sys/contrib/dev/athk/ath10k/wmi-ops.h      |  32 ++++
 sys/contrib/dev/athk/ath10k/wmi-tlv.c      |  20 ++-
 sys/contrib/dev/athk/ath10k/wmi-tlv.h      |   3 +-
 sys/contrib/dev/athk/ath10k/wmi.c          | 122 ++++++++++---
 sys/contrib/dev/athk/ath10k/wmi.h          | 104 ++++++-----
 sys/contrib/dev/athk/ath10k/wow.c          |   1 +
 47 files changed, 1009 insertions(+), 574 deletions(-)

diff --git a/sys/contrib/dev/athk/ath10k/Kconfig 
b/sys/contrib/dev/athk/ath10k/Kconfig
index e6ea884cafc1..876aed765833 100644
--- a/sys/contrib/dev/athk/ath10k/Kconfig
+++ b/sys/contrib/dev/athk/ath10k/Kconfig
@@ -45,6 +45,7 @@ config ATH10K_SNOC
        depends on ATH10K
        depends on ARCH_QCOM || COMPILE_TEST
        depends on QCOM_SMEM
+       depends on QCOM_RPROC_COMMON || QCOM_RPROC_COMMON=n
        select QCOM_SCM
        select QCOM_QMI_HELPERS
        help
@@ -67,6 +68,12 @@ config ATH10K_DEBUGFS
 
          If unsure, say Y to make it easier to debug problems.
 
+config ATH10K_LEDS
+       bool
+       depends on ATH10K
+       depends on LEDS_CLASS=y || LEDS_CLASS=MAC80211
+       default y
+
 config ATH10K_SPECTRAL
        bool "Atheros ath10k spectral scan support"
        depends on ATH10K_DEBUGFS
diff --git a/sys/contrib/dev/athk/ath10k/Makefile 
b/sys/contrib/dev/athk/ath10k/Makefile
index 7881fc25993f..28460625cdfb 100644
--- a/sys/contrib/dev/athk/ath10k/Makefile
+++ b/sys/contrib/dev/athk/ath10k/Makefile
@@ -19,6 +19,7 @@ ath10k_core-$(CONFIG_ATH10K_SPECTRAL) += spectral.o
 ath10k_core-$(CONFIG_NL80211_TESTMODE) += testmode.o
 ath10k_core-$(CONFIG_ATH10K_TRACING) += trace.o
 ath10k_core-$(CONFIG_THERMAL) += thermal.o
+ath10k_core-$(CONFIG_ATH10K_LEDS) += leds.o
 ath10k_core-$(CONFIG_MAC80211_DEBUGFS) += debugfs_sta.o
 ath10k_core-$(CONFIG_PM) += wow.o
 ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
diff --git a/sys/contrib/dev/athk/ath10k/ahb.c 
b/sys/contrib/dev/athk/ath10k/ahb.c
index 76efea2f1138..eb8b35b6224d 100644
--- a/sys/contrib/dev/athk/ath10k/ahb.c
+++ b/sys/contrib/dev/athk/ath10k/ahb.c
@@ -394,14 +394,14 @@ static irqreturn_t ath10k_ahb_interrupt_handler(int irq, 
void *arg)
        if (!ath10k_pci_irq_pending(ar))
                return IRQ_NONE;
 
-       ath10k_pci_disable_and_clear_legacy_irq(ar);
+       ath10k_pci_disable_and_clear_intx_irq(ar);
        ath10k_pci_irq_msi_fw_mask(ar);
        napi_schedule(&ar->napi);
 
        return IRQ_HANDLED;
 }
 
-static int ath10k_ahb_request_irq_legacy(struct ath10k *ar)
+static int ath10k_ahb_request_irq_intx(struct ath10k *ar)
 {
        struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
        struct ath10k_ahb *ar_ahb = ath10k_ahb_priv(ar);
@@ -415,12 +415,12 @@ static int ath10k_ahb_request_irq_legacy(struct ath10k 
*ar)
                            ar_ahb->irq, ret);
                return ret;
        }
-       ar_pci->oper_irq_mode = ATH10K_PCI_IRQ_LEGACY;
+       ar_pci->oper_irq_mode = ATH10K_PCI_IRQ_INTX;
 
        return 0;
 }
 
-static void ath10k_ahb_release_irq_legacy(struct ath10k *ar)
+static void ath10k_ahb_release_irq_intx(struct ath10k *ar)
 {
        struct ath10k_ahb *ar_ahb = ath10k_ahb_priv(ar);
 
@@ -430,7 +430,7 @@ static void ath10k_ahb_release_irq_legacy(struct ath10k *ar)
 static void ath10k_ahb_irq_disable(struct ath10k *ar)
 {
        ath10k_ce_disable_interrupts(ar);
-       ath10k_pci_disable_and_clear_legacy_irq(ar);
+       ath10k_pci_disable_and_clear_intx_irq(ar);
 }
 
 static int ath10k_ahb_resource_init(struct ath10k *ar)
@@ -497,7 +497,7 @@ static int ath10k_ahb_resource_init(struct ath10k *ar)
 
        ath10k_dbg(ar, ATH10K_DBG_BOOT, "irq: %d\n", ar_ahb->irq);
 
-       ath10k_dbg(ar, ATH10K_DBG_BOOT, "mem: 0x%pK mem_len: %lu gcc mem: 0x%pK 
tcsr_mem: 0x%pK\n",
+       ath10k_dbg(ar, ATH10K_DBG_BOOT, "mem: 0x%p mem_len: %lu gcc mem: 0x%p 
tcsr_mem: 0x%p\n",
                   ar_ahb->mem, ar_ahb->mem_len,
                   ar_ahb->gcc_mem, ar_ahb->tcsr_mem);
        return 0;
@@ -621,7 +621,7 @@ static int ath10k_ahb_hif_start(struct ath10k *ar)
 
        ath10k_core_napi_enable(ar);
        ath10k_ce_enable_interrupts(ar);
-       ath10k_pci_enable_legacy_irq(ar);
+       ath10k_pci_enable_intx_irq(ar);
 
        ath10k_pci_rx_post(ar);
 
@@ -733,7 +733,7 @@ static int ath10k_ahb_probe(struct platform_device *pdev)
        int ret;
        struct ath10k_bus_params bus_params = {};
 
-       hw_rev = (enum ath10k_hw_rev)of_device_get_match_data(&pdev->dev);
+       hw_rev = (uintptr_t)of_device_get_match_data(&pdev->dev);
        if (!hw_rev) {
                dev_err(&pdev->dev, "OF data missing\n");
                return -EINVAL;
@@ -775,7 +775,7 @@ static int ath10k_ahb_probe(struct platform_device *pdev)
 
        ath10k_pci_init_napi(ar);
 
-       ret = ath10k_ahb_request_irq_legacy(ar);
+       ret = ath10k_ahb_request_irq_intx(ar);
        if (ret)
                goto err_free_pipes;
 
@@ -806,7 +806,7 @@ err_halt_device:
        ath10k_ahb_clock_disable(ar);
 
 err_free_irq:
-       ath10k_ahb_release_irq_legacy(ar);
+       ath10k_ahb_release_irq_intx(ar);
 
 err_free_pipes:
        ath10k_pci_release_resource(ar);
@@ -828,7 +828,7 @@ static void ath10k_ahb_remove(struct platform_device *pdev)
 
        ath10k_core_unregister(ar);
        ath10k_ahb_irq_disable(ar);
-       ath10k_ahb_release_irq_legacy(ar);
+       ath10k_ahb_release_irq_intx(ar);
        ath10k_pci_release_resource(ar);
        ath10k_ahb_halt_chip(ar);
        ath10k_ahb_clock_disable(ar);
@@ -837,12 +837,12 @@ static void ath10k_ahb_remove(struct platform_device 
*pdev)
 }
 
 static struct platform_driver ath10k_ahb_driver = {
-       .driver         = {
-               .name   = "ath10k_ahb",
+       .driver = {
+               .name = "ath10k_ahb",
                .of_match_table = ath10k_ahb_of_match,
        },
-       .probe  = ath10k_ahb_probe,
-       .remove_new = ath10k_ahb_remove,
+       .probe = ath10k_ahb_probe,
+       .remove = ath10k_ahb_remove,
 };
 
 int ath10k_ahb_init(void)
diff --git a/sys/contrib/dev/athk/ath10k/bmi.c 
b/sys/contrib/dev/athk/ath10k/bmi.c
index 12c1983b4dd6..6dd92d29f631 100644
--- a/sys/contrib/dev/athk/ath10k/bmi.c
+++ b/sys/contrib/dev/athk/ath10k/bmi.c
@@ -2,8 +2,11 @@
 /*
  * Copyright (c) 2005-2011 Atheros Communications Inc.
  * Copyright (c) 2011-2014,2016-2017 Qualcomm Atheros, Inc.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  */
 
+#include <linux/export.h>
 #include "bmi.h"
 #include "hif.h"
 #include "debug.h"
@@ -360,7 +363,7 @@ static int ath10k_bmi_lz_data_large(struct ath10k *ar, 
const u8 *buffer, u32 len
        int ret;
        size_t buf_len;
 
-       ath10k_dbg(ar, ATH10K_DBG_BMI, "large bmi lz data buffer 0x%pK length 
%d\n",
+       ath10k_dbg(ar, ATH10K_DBG_BMI, "large bmi lz data buffer 0x%p length 
%d\n",
                   buffer, length);
 
        if (ar->bmi.done_sent) {
@@ -411,7 +414,7 @@ int ath10k_bmi_lz_data(struct ath10k *ar, const u8 *buffer, 
u32 length)
        u32 txlen;
        int ret;
 
-       ath10k_dbg(ar, ATH10K_DBG_BMI, "bmi lz data buffer 0x%pK length %d\n",
+       ath10k_dbg(ar, ATH10K_DBG_BMI, "bmi lz data buffer 0x%p length %d\n",
                   buffer, length);
 
        if (ar->bmi.done_sent) {
@@ -477,7 +480,7 @@ int ath10k_bmi_fast_download(struct ath10k *ar,
        int ret;
 
        ath10k_dbg(ar, ATH10K_DBG_BMI,
-                  "bmi fast download address 0x%x buffer 0x%pK length %d\n",
+                  "bmi fast download address 0x%x buffer 0x%p length %d\n",
                   address, buffer, length);
 
        ret = ath10k_bmi_lz_stream_start(ar, address);
diff --git a/sys/contrib/dev/athk/ath10k/ce.c b/sys/contrib/dev/athk/ath10k/ce.c
index 8168e20bb09a..719957ac87e4 100644
--- a/sys/contrib/dev/athk/ath10k/ce.c
+++ b/sys/contrib/dev/athk/ath10k/ce.c
@@ -3,8 +3,11 @@
  * Copyright (c) 2005-2011 Atheros Communications Inc.
  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
  * Copyright (c) 2018 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  */
 
+#include <linux/export.h>
 #include "hif.h"
 #include "ce.h"
 #include "debug.h"
@@ -79,7 +82,7 @@ static inline u32 shadow_sr_wr_ind_addr(struct ath10k *ar,
 
 static inline unsigned int
 ath10k_set_ring_byte(unsigned int offset,
-                    struct ath10k_hw_ce_regs_addr_map *addr_map)
+                    const struct ath10k_hw_ce_regs_addr_map *addr_map)
 {
        return ((offset << addr_map->lsb) & addr_map->mask);
 }
@@ -202,7 +205,7 @@ static inline void ath10k_ce_src_ring_dmax_set(struct 
ath10k *ar,
                                               u32 ce_ctrl_addr,
                                               unsigned int n)
 {
-       struct ath10k_hw_ce_ctrl1 *ctrl_regs = ar->hw_ce_regs->ctrl1_regs;
+       const struct ath10k_hw_ce_ctrl1 *ctrl_regs = ar->hw_ce_regs->ctrl1_regs;
 
        u32 ctrl1_addr = ath10k_ce_read32(ar, ce_ctrl_addr +
                                          ctrl_regs->addr);
@@ -216,7 +219,7 @@ static inline void ath10k_ce_src_ring_byte_swap_set(struct 
ath10k *ar,
                                                    u32 ce_ctrl_addr,
                                                    unsigned int n)
 {
-       struct ath10k_hw_ce_ctrl1 *ctrl_regs = ar->hw_ce_regs->ctrl1_regs;
+       const struct ath10k_hw_ce_ctrl1 *ctrl_regs = ar->hw_ce_regs->ctrl1_regs;
 
        u32 ctrl1_addr = ath10k_ce_read32(ar, ce_ctrl_addr +
                                          ctrl_regs->addr);
@@ -230,7 +233,7 @@ static inline void ath10k_ce_dest_ring_byte_swap_set(struct 
ath10k *ar,
                                                     u32 ce_ctrl_addr,
                                                     unsigned int n)
 {
-       struct ath10k_hw_ce_ctrl1 *ctrl_regs = ar->hw_ce_regs->ctrl1_regs;
+       const struct ath10k_hw_ce_ctrl1 *ctrl_regs = ar->hw_ce_regs->ctrl1_regs;
 
        u32 ctrl1_addr = ath10k_ce_read32(ar, ce_ctrl_addr +
                                          ctrl_regs->addr);
@@ -312,7 +315,7 @@ static inline void ath10k_ce_src_ring_highmark_set(struct 
ath10k *ar,
                                                   u32 ce_ctrl_addr,
                                                   unsigned int n)
 {
-       struct ath10k_hw_ce_dst_src_wm_regs *srcr_wm = ar->hw_ce_regs->wm_srcr;
+       const struct ath10k_hw_ce_dst_src_wm_regs *srcr_wm = 
ar->hw_ce_regs->wm_srcr;
        u32 addr = ath10k_ce_read32(ar, ce_ctrl_addr + srcr_wm->addr);
 
        ath10k_ce_write32(ar, ce_ctrl_addr + srcr_wm->addr,
@@ -324,7 +327,7 @@ static inline void ath10k_ce_src_ring_lowmark_set(struct 
ath10k *ar,
                                                  u32 ce_ctrl_addr,
                                                  unsigned int n)
 {
-       struct ath10k_hw_ce_dst_src_wm_regs *srcr_wm = ar->hw_ce_regs->wm_srcr;
+       const struct ath10k_hw_ce_dst_src_wm_regs *srcr_wm = 
ar->hw_ce_regs->wm_srcr;
        u32 addr = ath10k_ce_read32(ar, ce_ctrl_addr + srcr_wm->addr);
 
        ath10k_ce_write32(ar, ce_ctrl_addr + srcr_wm->addr,
@@ -336,7 +339,7 @@ static inline void ath10k_ce_dest_ring_highmark_set(struct 
ath10k *ar,
                                                    u32 ce_ctrl_addr,
                                                    unsigned int n)
 {
-       struct ath10k_hw_ce_dst_src_wm_regs *dstr_wm = ar->hw_ce_regs->wm_dstr;
+       const struct ath10k_hw_ce_dst_src_wm_regs *dstr_wm = 
ar->hw_ce_regs->wm_dstr;
        u32 addr = ath10k_ce_read32(ar, ce_ctrl_addr + dstr_wm->addr);
 
        ath10k_ce_write32(ar, ce_ctrl_addr + dstr_wm->addr,
@@ -348,7 +351,7 @@ static inline void ath10k_ce_dest_ring_lowmark_set(struct 
ath10k *ar,
                                                   u32 ce_ctrl_addr,
                                                   unsigned int n)
 {
-       struct ath10k_hw_ce_dst_src_wm_regs *dstr_wm = ar->hw_ce_regs->wm_dstr;
+       const struct ath10k_hw_ce_dst_src_wm_regs *dstr_wm = 
ar->hw_ce_regs->wm_dstr;
        u32 addr = ath10k_ce_read32(ar, ce_ctrl_addr + dstr_wm->addr);
 
        ath10k_ce_write32(ar, ce_ctrl_addr + dstr_wm->addr,
@@ -359,7 +362,7 @@ static inline void ath10k_ce_dest_ring_lowmark_set(struct 
ath10k *ar,
 static inline void ath10k_ce_copy_complete_inter_enable(struct ath10k *ar,
                                                        u32 ce_ctrl_addr)
 {
-       struct ath10k_hw_ce_host_ie *host_ie = ar->hw_ce_regs->host_ie;
+       const struct ath10k_hw_ce_host_ie *host_ie = ar->hw_ce_regs->host_ie;
 
        u32 host_ie_addr = ath10k_ce_read32(ar, ce_ctrl_addr +
                                            ar->hw_ce_regs->host_ie_addr);
@@ -371,7 +374,7 @@ static inline void 
ath10k_ce_copy_complete_inter_enable(struct ath10k *ar,
 static inline void ath10k_ce_copy_complete_intr_disable(struct ath10k *ar,
                                                        u32 ce_ctrl_addr)
 {
-       struct ath10k_hw_ce_host_ie *host_ie = ar->hw_ce_regs->host_ie;
+       const struct ath10k_hw_ce_host_ie *host_ie = ar->hw_ce_regs->host_ie;
 
        u32 host_ie_addr = ath10k_ce_read32(ar, ce_ctrl_addr +
                                            ar->hw_ce_regs->host_ie_addr);
@@ -383,7 +386,7 @@ static inline void 
ath10k_ce_copy_complete_intr_disable(struct ath10k *ar,
 static inline void ath10k_ce_watermark_intr_disable(struct ath10k *ar,
                                                    u32 ce_ctrl_addr)
 {
-       struct ath10k_hw_ce_host_wm_regs *wm_regs = ar->hw_ce_regs->wm_regs;
+       const struct ath10k_hw_ce_host_wm_regs *wm_regs = 
ar->hw_ce_regs->wm_regs;
 
        u32 host_ie_addr = ath10k_ce_read32(ar, ce_ctrl_addr +
                                            ar->hw_ce_regs->host_ie_addr);
@@ -395,7 +398,7 @@ static inline void ath10k_ce_watermark_intr_disable(struct 
ath10k *ar,
 static inline void ath10k_ce_error_intr_disable(struct ath10k *ar,
                                                u32 ce_ctrl_addr)
 {
-       struct ath10k_hw_ce_misc_regs *misc_regs = ar->hw_ce_regs->misc_regs;
+       const struct ath10k_hw_ce_misc_regs *misc_regs = 
ar->hw_ce_regs->misc_regs;
 
        u32 misc_ie_addr = ath10k_ce_read32(ar,
                        ce_ctrl_addr + ar->hw_ce_regs->misc_ie_addr);
@@ -409,7 +412,7 @@ static inline void ath10k_ce_engine_int_status_clear(struct 
ath10k *ar,
                                                     u32 ce_ctrl_addr,
                                                     unsigned int mask)
 {
-       struct ath10k_hw_ce_host_wm_regs *wm_regs = ar->hw_ce_regs->wm_regs;
+       const struct ath10k_hw_ce_host_wm_regs *wm_regs = 
ar->hw_ce_regs->wm_regs;
 
        ath10k_ce_write32(ar, ce_ctrl_addr + wm_regs->addr, mask);
 }
@@ -1229,7 +1232,7 @@ void ath10k_ce_per_engine_service(struct ath10k *ar, 
unsigned int ce_id)
 {
        struct ath10k_ce *ce = ath10k_ce_priv(ar);
        struct ath10k_ce_pipe *ce_state = &ce->ce_states[ce_id];
-       struct ath10k_hw_ce_host_wm_regs *wm_regs = ar->hw_ce_regs->wm_regs;
+       const struct ath10k_hw_ce_host_wm_regs *wm_regs = 
ar->hw_ce_regs->wm_regs;
        u32 ctrl_addr = ce_state->ctrl_addr;
 
        /*
@@ -1387,7 +1390,7 @@ static int ath10k_ce_init_src_ring(struct ath10k *ar,
        ath10k_ce_src_ring_highmark_set(ar, ctrl_addr, nentries);
 
        ath10k_dbg(ar, ATH10K_DBG_BOOT,
-                  "boot init ce src ring id %d entries %d base_addr %pK\n",
+                  "boot init ce src ring id %d entries %d base_addr %p\n",
                   ce_id, nentries, src_ring->base_addr_owner_space);
 
        return 0;
@@ -1425,7 +1428,7 @@ static int ath10k_ce_init_dest_ring(struct ath10k *ar,
        ath10k_ce_dest_ring_highmark_set(ar, ctrl_addr, nentries);
 
        ath10k_dbg(ar, ATH10K_DBG_BOOT,
-                  "boot ce dest ring id %d entries %d base_addr %pK\n",
+                  "boot ce dest ring id %d entries %d base_addr %p\n",
                   ce_id, nentries, dest_ring->base_addr_owner_space);
 
        return 0;
diff --git a/sys/contrib/dev/athk/ath10k/ce.h b/sys/contrib/dev/athk/ath10k/ce.h
index 666ce384a1d8..27367bd64e95 100644
--- a/sys/contrib/dev/athk/ath10k/ce.h
+++ b/sys/contrib/dev/athk/ath10k/ce.h
@@ -110,7 +110,7 @@ struct ath10k_ce_ring {
        struct ce_desc_64 *shadow_base;
 
        /* keep last */
-       void *per_transfer_context[];
+       void *per_transfer_context[] __counted_by(nentries);
 };
 
 struct ath10k_ce_pipe {
diff --git a/sys/contrib/dev/athk/ath10k/core.c 
b/sys/contrib/dev/athk/ath10k/core.c
index 0a65d12d202c..a0407f693659 100644
--- a/sys/contrib/dev/athk/ath10k/core.c
+++ b/sys/contrib/dev/athk/ath10k/core.c
@@ -3,12 +3,15 @@
  * Copyright (c) 2005-2011 Atheros Communications Inc.
  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
  * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights 
reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  */
 
 #if defined(__FreeBSD__)
 #define        LINUXKPI_PARAM_PREFIX   ath10k_core_
 #endif
 
+#include <linux/export.h>
 #include <linux/module.h>
 #include <linux/firmware.h>
 #if defined(__linux__) || (defined(__FreeBSD__) && defined(CONFIG_OF))
@@ -35,6 +38,7 @@
 #if defined(CONFIG_FWLOG)
 #include "fwlog.h"
 #endif
+#include "leds.h"
 
 unsigned int ath10k_debug_mask;
 EXPORT_SYMBOL(ath10k_debug_mask);
@@ -76,6 +80,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] 
= {
                .name = "qca988x hw2.0",
                .patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 1,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
@@ -83,7 +88,6 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] 
= {
                .cal_data_len = 2116,
                .fw = {
                        .dir = QCA988X_HW_2_0_FW_DIR,
-                       .board = QCA988X_HW_2_0_BOARD_DATA_FILE,
                        .board_size = QCA988X_BOARD_DATA_SZ,
                        .board_ext_size = QCA988X_BOARD_EXT_DATA_SZ,
                },
@@ -109,6 +113,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA988X_HW_2_0_VERSION,
@@ -116,6 +121,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca988x hw2.0 ubiquiti",
                .patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 0,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
@@ -123,7 +129,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .cal_data_len = 2116,
                .fw = {
                        .dir = QCA988X_HW_2_0_FW_DIR,
-                       .board = QCA988X_HW_2_0_BOARD_DATA_FILE,
                        .board_size = QCA988X_BOARD_DATA_SZ,
                        .board_ext_size = QCA988X_BOARD_EXT_DATA_SZ,
                },
@@ -149,6 +154,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA9887_HW_1_0_VERSION,
@@ -157,6 +163,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca9887 hw1.0",
                .patch_load_addr = QCA9887_HW_1_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 1,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
@@ -164,7 +171,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .cal_data_len = 2116,
                .fw = {
                        .dir = QCA9887_HW_1_0_FW_DIR,
-                       .board = QCA9887_HW_1_0_BOARD_DATA_FILE,
                        .board_size = QCA9887_BOARD_DATA_SZ,
                        .board_ext_size = QCA9887_BOARD_EXT_DATA_SZ,
                },
@@ -190,6 +196,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA6174_HW_3_2_VERSION,
@@ -198,13 +205,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca6174 hw3.2 sdio",
                .patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
                .uart_pin = 19,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 0,
                .fw = {
                        .dir = QCA6174_HW_3_0_FW_DIR,
-                       .board = QCA6174_HW_3_0_BOARD_DATA_FILE,
                        .board_size = QCA6174_BOARD_DATA_SZ,
                        .board_ext_size = QCA6174_BOARD_EXT_DATA_SZ,
                },
@@ -226,6 +233,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA6174_HW_2_1_VERSION,
@@ -234,13 +242,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca6164 hw2.1",
                .patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
                .uart_pin = 6,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 8124,
                .fw = {
                        .dir = QCA6174_HW_2_1_FW_DIR,
-                       .board = QCA6174_HW_2_1_BOARD_DATA_FILE,
                        .board_size = QCA6174_BOARD_DATA_SZ,
                        .board_ext_size = QCA6174_BOARD_EXT_DATA_SZ,
                },
@@ -266,6 +274,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA6174_HW_2_1_VERSION,
@@ -274,13 +283,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca6174 hw2.1",
                .patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
                .uart_pin = 6,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 8124,
                .fw = {
                        .dir = QCA6174_HW_2_1_FW_DIR,
-                       .board = QCA6174_HW_2_1_BOARD_DATA_FILE,
                        .board_size = QCA6174_BOARD_DATA_SZ,
                        .board_ext_size = QCA6174_BOARD_EXT_DATA_SZ,
                },
@@ -306,6 +315,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA6174_HW_3_0_VERSION,
@@ -314,13 +324,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca6174 hw3.0",
                .patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
                .uart_pin = 6,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 8124,
                .fw = {
                        .dir = QCA6174_HW_3_0_FW_DIR,
-                       .board = QCA6174_HW_3_0_BOARD_DATA_FILE,
                        .board_size = QCA6174_BOARD_DATA_SZ,
                        .board_ext_size = QCA6174_BOARD_EXT_DATA_SZ,
                },
@@ -346,6 +356,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA6174_HW_3_2_VERSION,
@@ -354,6 +365,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca6174 hw3.2",
                .patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
                .uart_pin = 6,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
@@ -361,7 +373,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .fw = {
                        /* uses same binaries as hw3.0 */
                        .dir = QCA6174_HW_3_0_FW_DIR,
-                       .board = QCA6174_HW_3_0_BOARD_DATA_FILE,
                        .board_size = QCA6174_BOARD_DATA_SZ,
                        .board_ext_size = QCA6174_BOARD_EXT_DATA_SZ,
                },
@@ -390,6 +401,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = true,
        },
        {
                .id = QCA99X0_HW_2_0_DEV_VERSION,
@@ -398,6 +410,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca99x0 hw2.0",
                .patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 17,
                .otp_exe_param = 0x00000700,
                .continuous_frag_desc = true,
                .cck_rate_map_rev2 = true,
@@ -409,7 +422,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .cal_data_len = 12064,
                .fw = {
                        .dir = QCA99X0_HW_2_0_FW_DIR,
-                       .board = QCA99X0_HW_2_0_BOARD_DATA_FILE,
                        .board_size = QCA99X0_BOARD_DATA_SZ,
                        .board_ext_size = QCA99X0_BOARD_EXT_DATA_SZ,
                },
@@ -436,6 +448,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA9984_HW_1_0_DEV_VERSION,
@@ -444,6 +457,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca9984/qca9994 hw1.0",
                .patch_load_addr = QCA9984_HW_1_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 17,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
                .otp_exe_param = 0x00000700,
                .continuous_frag_desc = true,
@@ -456,8 +470,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .cal_data_len = 12064,
                .fw = {
                        .dir = QCA9984_HW_1_0_FW_DIR,
-                       .board = QCA9984_HW_1_0_BOARD_DATA_FILE,
-                       .eboard = QCA9984_HW_1_0_EBOARD_DATA_FILE,
                        .board_size = QCA99X0_BOARD_DATA_SZ,
                        .board_ext_size = QCA99X0_BOARD_EXT_DATA_SZ,
                        .ext_board_size = QCA99X0_EXT_BOARD_DATA_SZ,
@@ -489,6 +501,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA9888_HW_2_0_DEV_VERSION,
@@ -497,6 +510,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca9888 hw2.0",
                .patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 17,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
                .otp_exe_param = 0x00000700,
                .continuous_frag_desc = true,
@@ -508,7 +522,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .cal_data_len = 12064,
                .fw = {
                        .dir = QCA9888_HW_2_0_FW_DIR,
-                       .board = QCA9888_HW_2_0_BOARD_DATA_FILE,
                        .board_size = QCA99X0_BOARD_DATA_SZ,
                        .board_ext_size = QCA99X0_BOARD_EXT_DATA_SZ,
                },
@@ -539,6 +552,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA9377_HW_1_0_DEV_VERSION,
@@ -547,13 +561,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca9377 hw1.0",
                .patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
                .uart_pin = 6,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 8124,
                .fw = {
                        .dir = QCA9377_HW_1_0_FW_DIR,
-                       .board = QCA9377_HW_1_0_BOARD_DATA_FILE,
                        .board_size = QCA9377_BOARD_DATA_SZ,
                        .board_ext_size = QCA9377_BOARD_EXT_DATA_SZ,
                },
@@ -579,6 +593,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA9377_HW_1_1_DEV_VERSION,
@@ -587,13 +602,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca9377 hw1.1",
                .patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
                .uart_pin = 6,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 8124,
                .fw = {
                        .dir = QCA9377_HW_1_0_FW_DIR,
-                       .board = QCA9377_HW_1_0_BOARD_DATA_FILE,
                        .board_size = QCA9377_BOARD_DATA_SZ,
                        .board_ext_size = QCA9377_BOARD_EXT_DATA_SZ,
                },
@@ -621,6 +636,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA9377_HW_1_1_DEV_VERSION,
@@ -629,13 +645,13 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca9377 hw1.1 sdio",
                .patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
                .uart_pin = 19,
+               .led_pin = 0,
                .otp_exe_param = 0,
                .channel_counters_freq_hz = 88000,
                .max_probe_resp_desc_thres = 0,
                .cal_data_len = 8124,
                .fw = {
                        .dir = QCA9377_HW_1_0_FW_DIR,
-                       .board = QCA9377_HW_1_0_BOARD_DATA_FILE,
                        .board_size = QCA9377_BOARD_DATA_SZ,
                        .board_ext_size = QCA9377_BOARD_EXT_DATA_SZ,
                },
@@ -654,6 +670,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = QCA4019_HW_1_0_DEV_VERSION,
@@ -662,6 +679,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .name = "qca4019 hw1.0",
                .patch_load_addr = QCA4019_HW_1_0_PATCH_LOAD_ADDR,
                .uart_pin = 7,
+               .led_pin = 0,
                .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
                .otp_exe_param = 0x0010000,
                .continuous_frag_desc = true,
@@ -674,7 +692,6 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .cal_data_len = 12064,
                .fw = {
                        .dir = QCA4019_HW_1_0_FW_DIR,
-                       .board = QCA4019_HW_1_0_BOARD_DATA_FILE,
                        .board_size = QCA4019_BOARD_DATA_SZ,
                        .board_ext_size = QCA4019_BOARD_EXT_DATA_SZ,
                },
@@ -701,18 +718,22 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = false,
                .use_fw_tx_credits = true,
                .delay_unmap_buffer = false,
+               .mcast_frame_registration = false,
        },
        {
                .id = WCN3990_HW_1_0_DEV_VERSION,
                .dev_id = 0,
                .bus = ATH10K_BUS_SNOC,
                .name = "wcn3990 hw1.0",
+               .led_pin = 0,
                .continuous_frag_desc = true,
                .tx_chain_mask = 0x7,
                .rx_chain_mask = 0x7,
                .max_spatial_stream = 4,
                .fw = {
                        .dir = WCN3990_HW_1_0_FW_DIR,
+                       .board_size = WCN3990_BOARD_DATA_SZ,
+                       .board_ext_size = WCN3990_BOARD_EXT_DATA_SZ,
                },
                .sw_decrypt_mcast_mgmt = true,
                .rx_desc_ops = &wcn3990_rx_desc_ops,
@@ -734,6 +755,7 @@ static const struct ath10k_hw_params 
ath10k_hw_params_list[] = {
                .hw_restart_disconnect = true,
                .use_fw_tx_credits = false,
                .delay_unmap_buffer = true,
+               .mcast_frame_registration = false,
        },
 };
 
@@ -934,11 +956,20 @@ static const struct firmware *ath10k_fetch_fw_file(struct 
ath10k *ar,
        if (dir == NULL)
                dir = ".";
 
+       if (ar->board_name) {
+               snprintf(filename, sizeof(filename), "%s/%s/%s",
+                        dir, ar->board_name, file);
+               ret = firmware_request_nowarn(&fw, filename, ar->dev);
+               ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot fw request '%s': %d\n",
+                          filename, ret);
+               if (!ret)
+                       return fw;
+       }
+
        snprintf(filename, sizeof(filename), "%s/%s", dir, file);
        ret = firmware_request_nowarn(&fw, filename, ar->dev);
        ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot fw request '%s': %d\n",
                   filename, ret);
-
        if (ret)
                return ERR_PTR(ret);
 
@@ -1156,8 +1187,11 @@ int ath10k_core_check_dt(struct ath10k *ar)
        if (!node)
                return -ENOENT;
 
-       of_property_read_string(node, "qcom,ath10k-calibration-variant",
+       of_property_read_string(node, "qcom,calibration-variant",
                                &variant);
+       if (!variant)
+               of_property_read_string(node, "qcom,ath10k-calibration-variant",
+                                       &variant);
        if (!variant)
                return -ENODATA;
 
@@ -1193,7 +1227,7 @@ static int ath10k_download_fw(struct ath10k *ar)
        }
 
        ath10k_dbg(ar, ATH10K_DBG_BOOT,
-                  "boot uploading firmware image %pK len %d\n",
+                  "boot uploading firmware image %p len %d\n",
                   data, data_len);
 
        /* Check if device supports to download firmware via
@@ -1296,11 +1330,6 @@ static int ath10k_core_fetch_board_data_api_1(struct 
ath10k *ar, int bd_ie_type)
        char boardname[100];
 
        if (bd_ie_type == ATH10K_BD_IE_BOARD) {
-               if (!ar->hw_params.fw.board) {
-                       ath10k_err(ar, "failed to find board file fw entry\n");
-                       return -EINVAL;
-               }
-
                scnprintf(boardname, sizeof(boardname), "board-%s-%s.bin",
                          ath10k_bus_str(ar->hif.bus), dev_name(ar->dev));
 
@@ -1310,7 +1339,7 @@ static int ath10k_core_fetch_board_data_api_1(struct 
ath10k *ar, int bd_ie_type)
                if (IS_ERR(ar->normal_mode_fw.board)) {
                        fw = ath10k_fetch_fw_file(ar,
                                                  ar->hw_params.fw.dir,
-                                                 ar->hw_params.fw.board);
+                                                 ATH10K_BOARD_DATA_FILE);
                        ar->normal_mode_fw.board = fw;
                }
 
@@ -1320,13 +1349,8 @@ static int ath10k_core_fetch_board_data_api_1(struct 
ath10k *ar, int bd_ie_type)
                ar->normal_mode_fw.board_data = ar->normal_mode_fw.board->data;
                ar->normal_mode_fw.board_len = ar->normal_mode_fw.board->size;
        } else if (bd_ie_type == ATH10K_BD_IE_BOARD_EXT) {
-               if (!ar->hw_params.fw.eboard) {
-                       ath10k_err(ar, "failed to find eboard file fw entry\n");
-                       return -EINVAL;
-               }
-
                fw = ath10k_fetch_fw_file(ar, ar->hw_params.fw.dir,
-                                         ar->hw_params.fw.eboard);
+                                         ATH10K_EBOARD_DATA_FILE);
                ar->normal_mode_fw.ext_board = fw;
                if (IS_ERR(ar->normal_mode_fw.ext_board))
                        return PTR_ERR(ar->normal_mode_fw.ext_board);
@@ -1582,7 +1606,7 @@ static int ath10k_core_create_board_name(struct ath10k 
*ar, char *name,
                                         bool with_chip_id)
 {
        /* strlen(',variant=') + strlen(ar->id.bdf_ext) */
-       char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = { 0 };
+       char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = {};
 
        if (with_variant && ar->id.bdf_ext[0] != '\0')
                scnprintf(variant, sizeof(variant), ",variant=%s",
@@ -1845,7 +1869,7 @@ static int ath10k_download_and_run_otp(struct ath10k *ar)
 
        if (!ar->running_fw->fw_file.otp_data ||
            !ar->running_fw->fw_file.otp_len) {
-               ath10k_warn(ar, "Not running otp, calibration will be incorrect 
(otp-data %pK otp_len %zd)!\n",
+               ath10k_warn(ar, "Not running otp, calibration will be incorrect 
(otp-data %p otp_len %zd)!\n",
                            ar->running_fw->fw_file.otp_data,
                            ar->running_fw->fw_file.otp_len);
                return 0;
@@ -2315,7 +2339,9 @@ static int ath10k_core_pre_cal_download(struct ath10k *ar)
                   "boot did not find a pre calibration file, try DT next: 
%d\n",
                   ret);
 
-       ret = ath10k_download_cal_dt(ar, "qcom,ath10k-pre-calibration-data");
+       ret = ath10k_download_cal_dt(ar, "qcom,pre-calibration-data");
+       if (ret == -ENOENT)
+               ret = ath10k_download_cal_dt(ar, 
"qcom,ath10k-pre-calibration-data");
        if (ret) {
                ath10k_dbg(ar, ATH10K_DBG_BOOT,
                           "unable to load pre cal data from DT: %d\n", ret);
@@ -2393,7 +2419,9 @@ static int ath10k_download_cal_data(struct ath10k *ar)
                   "boot did not find a calibration file, try DT next: %d\n",
                   ret);
 
-       ret = ath10k_download_cal_dt(ar, "qcom,ath10k-calibration-data");
+       ret = ath10k_download_cal_dt(ar, "qcom,calibration-data");
+       if (ret == -ENOENT)
+               ret = ath10k_download_cal_dt(ar, 
"qcom,ath10k-calibration-data");
        if (ret == 0) {
                ar->cal_mode = ATH10K_CAL_MODE_DT;
                goto done;
@@ -2542,12 +2570,50 @@ static int ath10k_init_hw_params(struct ath10k *ar)
        return 0;
 }
 
+static bool ath10k_core_needs_recovery(struct ath10k *ar)
+{
+       long time_left;
+
+       /* Sometimes the recovery will fail and then the next all recovery fail,
+        * so avoid infinite recovery.
+        */
+       if (atomic_read(&ar->fail_cont_count) >= 
ATH10K_RECOVERY_MAX_FAIL_COUNT) {
+               ath10k_err(ar, "consecutive fail %d times, will shutdown 
driver!",
+                          atomic_read(&ar->fail_cont_count));
+               ar->state = ATH10K_STATE_WEDGED;
+               return false;
+       }
+
+       ath10k_dbg(ar, ATH10K_DBG_BOOT, "total recovery count: %d", 
++ar->recovery_count);
+
+       if (atomic_read(&ar->pending_recovery)) {
+               /* Sometimes it happened another recovery work before the 
previous one
*** 3827 LINES SKIPPED ***

Reply via email to