ath11k: use remoteproc only with AHB devices
QCA6390 and other PCI devices use MHI based firmware loading and do not use remoteproc, so enable it only for AHB devices. Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1 Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.1.0.1-01238-QCAHKSWPL_SILICONZ-2 Signed-off-by: Govind Singh <govinds@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/1597309466-19688-11-git-send-email-kvalo@codeaurora.org
This commit is contained in:
Родитель
7f4beda2ba
Коммит
1ff8ed786d
|
@ -2,7 +2,6 @@
|
|||
config ATH11K
|
||||
tristate "Qualcomm Technologies 802.11ax chipset support"
|
||||
depends on MAC80211 && HAS_DMA
|
||||
depends on REMOTEPROC
|
||||
depends on CRYPTO_MICHAEL_MIC
|
||||
select ATH_COMMON
|
||||
select QCOM_QMI_HELPERS
|
||||
|
@ -15,6 +14,7 @@ config ATH11K
|
|||
config ATH11K_AHB
|
||||
tristate "Atheros ath11k AHB support"
|
||||
depends on ATH11K
|
||||
depends on REMOTEPROC
|
||||
help
|
||||
This module adds support for AHB bus
|
||||
|
||||
|
|
|
@ -25,6 +25,10 @@ static const struct of_device_id ath11k_ahb_of_match[] = {
|
|||
|
||||
MODULE_DEVICE_TABLE(of, ath11k_ahb_of_match);
|
||||
|
||||
static const struct ath11k_bus_params ath11k_ahb_bus_params = {
|
||||
.mhi_support = false,
|
||||
};
|
||||
|
||||
/* Target firmware's Copy Engine configuration. */
|
||||
static const struct ce_pipe_config target_ce_config_wlan[] = {
|
||||
/* CE0: host->target HTC control and raw streams */
|
||||
|
@ -855,7 +859,7 @@ static int ath11k_ahb_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ab = ath11k_core_alloc(&pdev->dev, 0, ATH11K_BUS_AHB);
|
||||
ab = ath11k_core_alloc(&pdev->dev, 0, ATH11K_BUS_AHB, &ath11k_ahb_bus_params);
|
||||
if (!ab) {
|
||||
dev_err(&pdev->dev, "failed to allocate ath11k base\n");
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -756,12 +756,14 @@ int ath11k_core_pre_init(struct ath11k_base *ab)
|
|||
}
|
||||
EXPORT_SYMBOL(ath11k_core_pre_init);
|
||||
|
||||
int ath11k_core_init(struct ath11k_base *ab)
|
||||
static int ath11k_core_get_rproc(struct ath11k_base *ab)
|
||||
{
|
||||
struct device *dev = ab->dev;
|
||||
struct rproc *prproc;
|
||||
phandle rproc_phandle;
|
||||
int ret;
|
||||
|
||||
if (ab->bus_params.mhi_support)
|
||||
return 0;
|
||||
|
||||
if (of_property_read_u32(dev->of_node, "qcom,rproc", &rproc_phandle)) {
|
||||
ath11k_err(ab, "failed to get q6_rproc handle\n");
|
||||
|
@ -775,6 +777,25 @@ int ath11k_core_init(struct ath11k_base *ab)
|
|||
}
|
||||
ab->tgt_rproc = prproc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ath11k_core_init(struct ath11k_base *ab)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = ath11k_core_get_rproc(ab);
|
||||
if (ret) {
|
||||
ath11k_err(ab, "failed to get rproc: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ath11k_init_hw_params(ab);
|
||||
if (ret) {
|
||||
ath11k_err(ab, "failed to get hw params %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ath11k_core_soc_create(ab);
|
||||
if (ret) {
|
||||
ath11k_err(ab, "failed to create soc core: %d\n", ret);
|
||||
|
@ -807,7 +828,8 @@ void ath11k_core_free(struct ath11k_base *ab)
|
|||
EXPORT_SYMBOL(ath11k_core_free);
|
||||
|
||||
struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size,
|
||||
enum ath11k_bus bus)
|
||||
enum ath11k_bus bus,
|
||||
const struct ath11k_bus_params *bus_params)
|
||||
{
|
||||
struct ath11k_base *ab;
|
||||
|
||||
|
@ -830,6 +852,7 @@ struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size,
|
|||
INIT_WORK(&ab->restart_work, ath11k_core_restart);
|
||||
timer_setup(&ab->rx_replenish_retry, ath11k_ce_rx_replenish_retry, 0);
|
||||
ab->dev = dev;
|
||||
ab->bus_params = *bus_params;
|
||||
|
||||
return ab;
|
||||
|
||||
|
|
|
@ -580,6 +580,10 @@ struct ath11k_board_data {
|
|||
size_t len;
|
||||
};
|
||||
|
||||
struct ath11k_bus_params {
|
||||
bool mhi_support;
|
||||
};
|
||||
|
||||
/* IPQ8074 HW channel counters frequency value in hertz */
|
||||
#define IPQ8074_CC_FREQ_HERTZ 320000
|
||||
|
||||
|
@ -668,7 +672,10 @@ struct ath11k_base {
|
|||
u32 ext_service_bitmap[WMI_SERVICE_EXT_BM_SIZE];
|
||||
bool pdevs_macaddr_valid;
|
||||
int bd_api;
|
||||
|
||||
struct ath11k_hw_params hw_params;
|
||||
struct ath11k_bus_params bus_params;
|
||||
|
||||
const struct firmware *cal_file;
|
||||
|
||||
/* Below regd's are protected by ab->data_lock */
|
||||
|
@ -845,7 +852,8 @@ int ath11k_core_pre_init(struct ath11k_base *ab);
|
|||
int ath11k_core_init(struct ath11k_base *ath11k);
|
||||
void ath11k_core_deinit(struct ath11k_base *ath11k);
|
||||
struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size,
|
||||
enum ath11k_bus bus);
|
||||
enum ath11k_bus bus,
|
||||
const struct ath11k_bus_params *bus_params);
|
||||
void ath11k_core_free(struct ath11k_base *ath11k);
|
||||
int ath11k_core_fetch_bdf(struct ath11k_base *ath11k,
|
||||
struct ath11k_board_data *bd);
|
||||
|
|
|
@ -27,6 +27,10 @@ static const struct pci_device_id ath11k_pci_id_table[] = {
|
|||
|
||||
MODULE_DEVICE_TABLE(pci, ath11k_pci_id_table);
|
||||
|
||||
static const struct ath11k_bus_params ath11k_pci_bus_params = {
|
||||
.mhi_support = true,
|
||||
};
|
||||
|
||||
static const struct ath11k_msi_config msi_config = {
|
||||
.total_vectors = 32,
|
||||
.total_users = 4,
|
||||
|
@ -594,7 +598,8 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
|
|||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
ab = ath11k_core_alloc(&pdev->dev, sizeof(*ab_pci), ATH11K_BUS_PCI);
|
||||
ab = ath11k_core_alloc(&pdev->dev, sizeof(*ab_pci), ATH11K_BUS_PCI,
|
||||
&ath11k_pci_bus_params);
|
||||
if (!ab) {
|
||||
dev_err(&pdev->dev, "failed to allocate ath11k base\n");
|
||||
return -ENOMEM;
|
||||
|
|
Загрузка…
Ссылка в новой задаче