mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 15:36:48 +00:00
wifi: ath12k: enable ath12k AHB support
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>
This commit is contained in:
parent
881edc1640
commit
c0dd3f4f70
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -10,15 +10,18 @@
|
||||
#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 @@ struct ath12k_base *ath12k_core_alloc(struct device *dev, size_t priv_size,
|
||||
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");
|
||||
|
@ -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");
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user