[PATCH ath-next] wifi: ath12k: fix GCC_GCC_PCIE_HOT_RST definition for WCN7850

Parth Panchoil parth105105 at gmail.com
Fri May 23 06:48:26 PDT 2025


Thanks Baochen for the patch. 

This patch fixes a bug in older kernels, so it should be backported.
Minor correction needed on the reported tag.
Tested on TI AM69 SK board with SX-PCEBE (WCN7850) Wi-Fi module and did
not observe the reported crash anymore.

Cc: stable at vger.kernel.org
Reported-by: Parth Pancholi <parth.pancholi at toradex.com>
Tested-by: Parth Pancholi <parth.pancholi at toradex.com>

Regards,
Parth P

> GCC_GCC_PCIE_HOT_RST is wrongly defined for WCN7850, causing kernel
> crash
> on some specific platforms.
> 
> Since this register is divergent for WCN7850 and QCN9274, move it to
> register table to allow different definitions. Then correct the
> register
> address for WCN7850 to fix this issue.
> 
> Note IPQ5332 is not affected as it is not PCIe based device.
> 
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-
> QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
> 
> Reported-by: Parth Panchoil <parth105105 at gmail.com>
> Closes:
> https://lore.kernel.org/all/86899b2235a59c9134603beebe08f2bb0b244ea0.camel@gmail.com
> Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7
> devices")
> Signed-off-by: Baochen Qiang <quic_bqiang at quicinc.com>
> ---
> ---
>  drivers/net/wireless/ath/ath12k/hw.c  | 6 ++++++
>  drivers/net/wireless/ath/ath12k/hw.h  | 2 ++
>  drivers/net/wireless/ath/ath12k/pci.c | 6 +++---
>  drivers/net/wireless/ath/ath12k/pci.h | 4 +++-
>  4 files changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath12k/hw.c
> b/drivers/net/wireless/ath/ath12k/hw.c
> index
> 7e2cf0fb2085ab014fc14a5c81074802674b154e..8254dc10b53bbfb54a44c7ff2f7
> 05c72461d1031 100644
> --- a/drivers/net/wireless/ath/ath12k/hw.c
> +++ b/drivers/net/wireless/ath/ath12k/hw.c
> @@ -951,6 +951,8 @@ static const struct ath12k_hw_regs
> qcn9274_v1_regs = {
>         .hal_umac_ce0_dest_reg_base = 0x01b81000,
>         .hal_umac_ce1_src_reg_base = 0x01b82000,
>         .hal_umac_ce1_dest_reg_base = 0x01b83000,
> +
> +       .gcc_gcc_pcie_hot_rst = 0x1e38338,
>  };
>  
>  static const struct ath12k_hw_regs qcn9274_v2_regs = {
> @@ -1042,6 +1044,8 @@ static const struct ath12k_hw_regs
> qcn9274_v2_regs = {
>         .hal_umac_ce0_dest_reg_base = 0x01b81000,
>         .hal_umac_ce1_src_reg_base = 0x01b82000,
>         .hal_umac_ce1_dest_reg_base = 0x01b83000,
> +
> +       .gcc_gcc_pcie_hot_rst = 0x1e38338,
>  };
>  
>  static const struct ath12k_hw_regs ipq5332_regs = {
> @@ -1215,6 +1219,8 @@ static const struct ath12k_hw_regs wcn7850_regs
> = {
>         .hal_umac_ce0_dest_reg_base = 0x01b81000,
>         .hal_umac_ce1_src_reg_base = 0x01b82000,
>         .hal_umac_ce1_dest_reg_base = 0x01b83000,
> +
> +       .gcc_gcc_pcie_hot_rst = 0x1e40304,
>  };
>  
>  static const struct ath12k_hw_hal_params
> ath12k_hw_hal_params_qcn9274 = {
> diff --git a/drivers/net/wireless/ath/ath12k/hw.h
> b/drivers/net/wireless/ath/ath12k/hw.h
> index
> 0fbc17649df463334aa0ebb3da407115985335ca..0a75bc5abfa2410ab3c7b6ce038
> f4d5f6445ecf9 100644
> --- a/drivers/net/wireless/ath/ath12k/hw.h
> +++ b/drivers/net/wireless/ath/ath12k/hw.h
> @@ -375,6 +375,8 @@ struct ath12k_hw_regs {
>         u32 hal_reo_cmd_ring_base;
>  
>         u32 hal_reo_status_ring_base;
> +
> +       u32 gcc_gcc_pcie_hot_rst;
>  };
>  
>  static inline const char *ath12k_bd_ie_type_str(enum
> ath12k_bd_ie_type type)
> diff --git a/drivers/net/wireless/ath/ath12k/pci.c
> b/drivers/net/wireless/ath/ath12k/pci.c
> index
> 489d546390fcdab8f615cc9184006a958d9f140a..1f3cfd9b89fdcfd84731ec90c9c
> 678b0c477a2af 100644
> --- a/drivers/net/wireless/ath/ath12k/pci.c
> +++ b/drivers/net/wireless/ath/ath12k/pci.c
> @@ -292,10 +292,10 @@ static void ath12k_pci_enable_ltssm(struct
> ath12k_base *ab)
>  
>         ath12k_dbg(ab, ATH12K_DBG_PCI, "pci ltssm 0x%x\n", val);
>  
> -       val = ath12k_pci_read32(ab, GCC_GCC_PCIE_HOT_RST);
> +       val = ath12k_pci_read32(ab, GCC_GCC_PCIE_HOT_RST(ab));
>         val |= GCC_GCC_PCIE_HOT_RST_VAL;
> -       ath12k_pci_write32(ab, GCC_GCC_PCIE_HOT_RST, val);
> -       val = ath12k_pci_read32(ab, GCC_GCC_PCIE_HOT_RST);
> +       ath12k_pci_write32(ab, GCC_GCC_PCIE_HOT_RST(ab), val);
> +       val = ath12k_pci_read32(ab, GCC_GCC_PCIE_HOT_RST(ab));
>  
>         ath12k_dbg(ab, ATH12K_DBG_PCI, "pci pcie_hot_rst 0x%x\n",
> val);
>  
> diff --git a/drivers/net/wireless/ath/ath12k/pci.h
> b/drivers/net/wireless/ath/ath12k/pci.h
> index
> 0b4c459d6d8eabb0773162e6bb3ca666c0a8f15a..d1ec8aad7f6c3b6f5cbdf8ce57a
> 4106733686521 100644
> --- a/drivers/net/wireless/ath/ath12k/pci.h
> +++ b/drivers/net/wireless/ath/ath12k/pci.h
> @@ -28,7 +28,9 @@
>  #define PCIE_PCIE_PARF_LTSSM                   0x1e081b0
>  #define PARM_LTSSM_VALUE                       0x111
>  
> -#define GCC_GCC_PCIE_HOT_RST                   0x1e38338
> +#define GCC_GCC_PCIE_HOT_RST(ab) \
> +       ((ab)->hw_params->regs->gcc_gcc_pcie_hot_rst)
> +
>  #define GCC_GCC_PCIE_HOT_RST_VAL               0x10
>  
>  #define PCIE_PCIE_INT_ALL_CLEAR                        0x1e08228
> 
> ---
> base-commit: 3d933084a072fd5fb5da54c06a017abc0412c86f
> change-id: 20250506-ath12k-wrong-global-reset-addr-b75ddc6e7850
> 
> Best regards,




More information about the ath12k mailing list