]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: enable ath12k AHB support
authorBalamurugan S <quic_bselvara@quicinc.com>
Fri, 21 Mar 2025 10:52:50 +0000 (16:22 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Tue, 25 Mar 2025 14:55:45 +0000 (07:55 -0700)
Currently only PCI devices are supported in Ath12k driver. Refactor
Ath12k module_init and module_exit to include Ath12k AHB support.

Add Ath12k AHB support in Kconfig with dependency on Remoteproc
driver. Ath12k AHB support relies on remoteproc driver for firmware
download, power up/down etc.

Tested-on: IPQ5332 hw1.0 AHB WLAN.WBE.1.3.1-00130-QCAHKSWPL_SILICONZ-1
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00210-QCAHKSWPL_SILICONZ-1

Signed-off-by: Balamurugan S <quic_bselvara@quicinc.com>
Co-developed-by: P Praneesh <quic_ppranees@quicinc.com>
Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
Link: https://patch.msgid.link/20250321-ath12k-ahb-v12-13-bb389ed76ae5@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/Kconfig
drivers/net/wireless/ath/ath12k/Makefile
drivers/net/wireless/ath/ath12k/ahb.h
drivers/net/wireless/ath/ath12k/core.c
drivers/net/wireless/ath/ath12k/pci.c
drivers/net/wireless/ath/ath12k/pci.h

index 52a1bb19e3dad1a18791735369b78745604d8e0a..b3b15e1eb282b4491c233efc59e93cc3bd9c7541 100644 (file)
@@ -15,6 +15,14 @@ config ATH12K
 
          If you choose to build a module, it'll be called ath12k.
 
+config ATH12K_AHB
+       bool "QTI ath12k AHB support"
+       depends on ATH12K && REMOTEPROC
+       select QCOM_MDT_LOADER
+       select QCOM_SCM
+       help
+         Enable support for Ath12k AHB bus chipsets, example IPQ5332.
+
 config ATH12K_DEBUG
        bool "ath12k debugging"
        depends on ATH12K
index 60644cb42c76ed799ca664b94dc475079d927df2..d95ee525a6cd06c13755e7f396151373244e0c39 100644 (file)
@@ -23,6 +23,7 @@ ath12k-y += core.o \
            fw.o \
            p2p.o
 
+ath12k-$(CONFIG_ATH12K_AHB) += ahb.o
 ath12k-$(CONFIG_ATH12K_DEBUGFS) += debugfs.o debugfs_htt_stats.o debugfs_sta.o
 ath12k-$(CONFIG_ACPI) += acpi.o
 ath12k-$(CONFIG_ATH12K_TRACING) += trace.o
index f8a5c43075c1e351253ce689755fb3edc02f09a9..d56244b20a6a667cf3730dc1ce38a22b0e86ffca 100644 (file)
@@ -66,4 +66,15 @@ static inline struct ath12k_ahb *ath12k_ab_to_ahb(struct ath12k_base *ab)
        return (struct ath12k_ahb *)ab->drv_priv;
 }
 
+#ifdef CONFIG_ATH12K_AHB
+int ath12k_ahb_init(void);
+void ath12k_ahb_exit(void);
+#else
+static inline int ath12k_ahb_init(void)
+{
+       return 0;
+}
+
+static inline void ath12k_ahb_exit(void) {};
+#endif
 #endif
index ecac5497e36e340a93c1af271ba60a802ce3e568..a27c8043a091d45fa7074ac916560e1e8ed488ab 100644 (file)
 #include <linux/firmware.h>
 #include <linux/of.h>
 #include <linux/of_graph.h>
+#include "ahb.h"
 #include "core.h"
 #include "dp_tx.h"
 #include "dp_rx.h"
 #include "debug.h"
-#include "hif.h"
-#include "fw.h"
 #include "debugfs.h"
+#include "fw.h"
+#include "hif.h"
+#include "pci.h"
 #include "wow.h"
 
+static int ahb_err, pci_err;
 unsigned int ath12k_debug_mask;
 module_param_named(debug_mask, ath12k_debug_mask, uint, 0644);
 MODULE_PARM_DESC(debug_mask, "Debugging mask");
@@ -2073,5 +2076,31 @@ err_sc_free:
        return NULL;
 }
 
-MODULE_DESCRIPTION("Core module for Qualcomm Atheros 802.11be wireless LAN cards.");
+static int ath12k_init(void)
+{
+       ahb_err = ath12k_ahb_init();
+       if (ahb_err)
+               pr_warn("Failed to initialize ath12k AHB device: %d\n", ahb_err);
+
+       pci_err = ath12k_pci_init();
+       if (pci_err)
+               pr_warn("Failed to initialize ath12k PCI device: %d\n", pci_err);
+
+       /* If both failed, return one of the failures (arbitrary) */
+       return ahb_err && pci_err ? ahb_err : 0;
+}
+
+static void ath12k_exit(void)
+{
+       if (!pci_err)
+               ath12k_pci_exit();
+
+       if (!ahb_err)
+               ath12k_ahb_exit();
+}
+
+module_init(ath12k_init);
+module_exit(ath12k_exit);
+
+MODULE_DESCRIPTION("Driver support for Qualcomm Technologies 802.11be WLAN devices");
 MODULE_LICENSE("Dual BSD/GPL");
index b474696ac6d8c932daaf8691e0a7880d8615645e..e62b172c7f9fb003d1eb8e718c33ad0b4f08977d 100644 (file)
@@ -1831,7 +1831,7 @@ static struct pci_driver ath12k_pci_driver = {
        .driver.pm = &ath12k_pci_pm_ops,
 };
 
-static int ath12k_pci_init(void)
+int ath12k_pci_init(void)
 {
        int ret;
 
@@ -1844,14 +1844,8 @@ static int ath12k_pci_init(void)
 
        return 0;
 }
-module_init(ath12k_pci_init);
 
-static void ath12k_pci_exit(void)
+void ath12k_pci_exit(void)
 {
        pci_unregister_driver(&ath12k_pci_driver);
 }
-
-module_exit(ath12k_pci_exit);
-
-MODULE_DESCRIPTION("Driver support for Qualcomm Technologies PCIe 802.11be WLAN devices");
-MODULE_LICENSE("Dual BSD/GPL");
index 31584a7ad80eb9f55423905039050eac247aa1d8..521fa72333bb51637f881e31a609809f4aa88939 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
 /*
  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 #ifndef ATH12K_PCI_H
 #define ATH12K_PCI_H
@@ -145,4 +145,6 @@ void ath12k_pci_stop(struct ath12k_base *ab);
 int ath12k_pci_start(struct ath12k_base *ab);
 int ath12k_pci_power_up(struct ath12k_base *ab);
 void ath12k_pci_power_down(struct ath12k_base *ab, bool is_suspend);
+int ath12k_pci_init(void);
+void ath12k_pci_exit(void);
 #endif /* ATH12K_PCI_H */