Commit b8246f88 authored by Kalle Valo's avatar Kalle Valo

ath11k: implement ath11k_core_pre_init()

This is needed to initialise hw_params before MHI registration starts. MHI
needs location of firmware directory and that's delivered via hw_params.

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: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1597309466-19688-8-git-send-email-kvalo@codeaurora.org
parent 5697a564
...@@ -868,6 +868,10 @@ static int ath11k_ahb_probe(struct platform_device *pdev) ...@@ -868,6 +868,10 @@ static int ath11k_ahb_probe(struct platform_device *pdev)
ab->mem_len = resource_size(mem_res); ab->mem_len = resource_size(mem_res);
platform_set_drvdata(pdev, ab); platform_set_drvdata(pdev, ab);
ret = ath11k_core_pre_init(ab);
if (ret)
goto err_core_free;
ret = ath11k_hal_srng_init(ab); ret = ath11k_hal_srng_init(ab);
if (ret) if (ret)
goto err_core_free; goto err_core_free;
......
...@@ -742,6 +742,20 @@ static int ath11k_init_hw_params(struct ath11k_base *ab) ...@@ -742,6 +742,20 @@ static int ath11k_init_hw_params(struct ath11k_base *ab)
return 0; return 0;
} }
int ath11k_core_pre_init(struct ath11k_base *ab)
{
int ret;
ret = ath11k_init_hw_params(ab);
if (ret) {
ath11k_err(ab, "failed to get hw params: %d\n", ret);
return ret;
}
return 0;
}
EXPORT_SYMBOL(ath11k_core_pre_init);
int ath11k_core_init(struct ath11k_base *ab) int ath11k_core_init(struct ath11k_base *ab)
{ {
struct device *dev = ab->dev; struct device *dev = ab->dev;
...@@ -761,12 +775,6 @@ int ath11k_core_init(struct ath11k_base *ab) ...@@ -761,12 +775,6 @@ int ath11k_core_init(struct ath11k_base *ab)
} }
ab->tgt_rproc = prproc; ab->tgt_rproc = prproc;
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);
......
...@@ -841,6 +841,7 @@ struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab, ...@@ -841,6 +841,7 @@ struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab,
const u8 *addr); const u8 *addr);
struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, int peer_id); struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, int peer_id);
int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab); int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab);
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,
......
...@@ -208,8 +208,15 @@ static int ath11k_pci_probe(struct pci_dev *pdev, ...@@ -208,8 +208,15 @@ static int ath11k_pci_probe(struct pci_dev *pdev,
goto err_pci_free_region; goto err_pci_free_region;
} }
ret = ath11k_core_pre_init(ab);
if (ret)
goto err_pci_disable_msi;
return 0; return 0;
err_pci_disable_msi:
ath11k_pci_disable_msi(ab_pci);
err_pci_free_region: err_pci_free_region:
ath11k_pci_free_region(ab_pci); ath11k_pci_free_region(ab_pci);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment