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
|
config ATH11K
|
||||||
tristate "Qualcomm Technologies 802.11ax chipset support"
|
tristate "Qualcomm Technologies 802.11ax chipset support"
|
||||||
depends on MAC80211 && HAS_DMA
|
depends on MAC80211 && HAS_DMA
|
||||||
depends on REMOTEPROC
|
|
||||||
depends on CRYPTO_MICHAEL_MIC
|
depends on CRYPTO_MICHAEL_MIC
|
||||||
select ATH_COMMON
|
select ATH_COMMON
|
||||||
select QCOM_QMI_HELPERS
|
select QCOM_QMI_HELPERS
|
||||||
|
@ -15,6 +14,7 @@ config ATH11K
|
||||||
config ATH11K_AHB
|
config ATH11K_AHB
|
||||||
tristate "Atheros ath11k AHB support"
|
tristate "Atheros ath11k AHB support"
|
||||||
depends on ATH11K
|
depends on ATH11K
|
||||||
|
depends on REMOTEPROC
|
||||||
help
|
help
|
||||||
This module adds support for AHB bus
|
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);
|
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. */
|
/* Target firmware's Copy Engine configuration. */
|
||||||
static const struct ce_pipe_config target_ce_config_wlan[] = {
|
static const struct ce_pipe_config target_ce_config_wlan[] = {
|
||||||
/* CE0: host->target HTC control and raw streams */
|
/* CE0: host->target HTC control and raw streams */
|
||||||
|
@ -855,7 +859,7 @@ static int ath11k_ahb_probe(struct platform_device *pdev)
|
||||||
return ret;
|
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) {
|
if (!ab) {
|
||||||
dev_err(&pdev->dev, "failed to allocate ath11k base\n");
|
dev_err(&pdev->dev, "failed to allocate ath11k base\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
@ -756,12 +756,14 @@ int ath11k_core_pre_init(struct ath11k_base *ab)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ath11k_core_pre_init);
|
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 device *dev = ab->dev;
|
||||||
struct rproc *prproc;
|
struct rproc *prproc;
|
||||||
phandle rproc_phandle;
|
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)) {
|
if (of_property_read_u32(dev->of_node, "qcom,rproc", &rproc_phandle)) {
|
||||||
ath11k_err(ab, "failed to get q6_rproc handle\n");
|
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;
|
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);
|
ret = ath11k_core_soc_create(ab);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_err(ab, "failed to create soc core: %d\n", 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);
|
EXPORT_SYMBOL(ath11k_core_free);
|
||||||
|
|
||||||
struct ath11k_base *ath11k_core_alloc(struct device *dev, size_t priv_size,
|
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;
|
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);
|
INIT_WORK(&ab->restart_work, ath11k_core_restart);
|
||||||
timer_setup(&ab->rx_replenish_retry, ath11k_ce_rx_replenish_retry, 0);
|
timer_setup(&ab->rx_replenish_retry, ath11k_ce_rx_replenish_retry, 0);
|
||||||
ab->dev = dev;
|
ab->dev = dev;
|
||||||
|
ab->bus_params = *bus_params;
|
||||||
|
|
||||||
return ab;
|
return ab;
|
||||||
|
|
||||||
|
|
|
@ -580,6 +580,10 @@ struct ath11k_board_data {
|
||||||
size_t len;
|
size_t len;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ath11k_bus_params {
|
||||||
|
bool mhi_support;
|
||||||
|
};
|
||||||
|
|
||||||
/* IPQ8074 HW channel counters frequency value in hertz */
|
/* IPQ8074 HW channel counters frequency value in hertz */
|
||||||
#define IPQ8074_CC_FREQ_HERTZ 320000
|
#define IPQ8074_CC_FREQ_HERTZ 320000
|
||||||
|
|
||||||
|
@ -668,7 +672,10 @@ struct ath11k_base {
|
||||||
u32 ext_service_bitmap[WMI_SERVICE_EXT_BM_SIZE];
|
u32 ext_service_bitmap[WMI_SERVICE_EXT_BM_SIZE];
|
||||||
bool pdevs_macaddr_valid;
|
bool pdevs_macaddr_valid;
|
||||||
int bd_api;
|
int bd_api;
|
||||||
|
|
||||||
struct ath11k_hw_params hw_params;
|
struct ath11k_hw_params hw_params;
|
||||||
|
struct ath11k_bus_params bus_params;
|
||||||
|
|
||||||
const struct firmware *cal_file;
|
const struct firmware *cal_file;
|
||||||
|
|
||||||
/* Below regd's are protected by ab->data_lock */
|
/* 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);
|
int ath11k_core_init(struct ath11k_base *ath11k);
|
||||||
void ath11k_core_deinit(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,
|
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);
|
void ath11k_core_free(struct ath11k_base *ath11k);
|
||||||
int ath11k_core_fetch_bdf(struct ath11k_base *ath11k,
|
int ath11k_core_fetch_bdf(struct ath11k_base *ath11k,
|
||||||
struct ath11k_board_data *bd);
|
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);
|
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 = {
|
static const struct ath11k_msi_config msi_config = {
|
||||||
.total_vectors = 32,
|
.total_vectors = 32,
|
||||||
.total_users = 4,
|
.total_users = 4,
|
||||||
|
@ -594,7 +598,8 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
|
||||||
return -ENOTSUPP;
|
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) {
|
if (!ab) {
|
||||||
dev_err(&pdev->dev, "failed to allocate ath11k base\n");
|
dev_err(&pdev->dev, "failed to allocate ath11k base\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче