Message ID | 20241015182637.955753-10-quic_rajkbhag@quicinc.com |
---|---|
State | New |
Headers | show |
Series | wifi: ath12k: add Ath12k AHB driver support for IPQ5332 | expand |
On 15.10.2024 8:26 PM, Raj Kumar Bhagat wrote: > From: Balamurugan S <quic_bselvara@quicinc.com> > > Current ath12k devices, QCN9274 and WCN7850, supports m3.bin firmware > download through ath12k driver. The new ath12k AHB based device > IPQ5332 supports m3 firmware download through remoteproc driver. > > Hence, add new parameter (m3_fw_support) in ath12k_hw_params to avoid > m3 firmware download in IPQ5332. > > 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> > Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com> > --- > drivers/net/wireless/ath/ath12k/hw.c | 8 ++++++++ > drivers/net/wireless/ath/ath12k/hw.h | 2 ++ > drivers/net/wireless/ath/ath12k/qmi.c | 28 ++++++++++++++++----------- > 3 files changed, 27 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath12k/hw.c b/drivers/net/wireless/ath/ath12k/hw.c > index e5e2164c27d2..a4e0c21ac4b7 100644 > --- a/drivers/net/wireless/ath/ath12k/hw.c > +++ b/drivers/net/wireless/ath/ath12k/hw.c > @@ -1299,6 +1299,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = { > .iova_mask = 0, > > .supports_aspm = false, > + > + .m3_fw_support = true, 'support for m3 firmware' is not a fitting term.. maybe "needs_m3_fw"? Konrad
On 10/19/2024 1:30 AM, Konrad Dybcio wrote: > On 15.10.2024 8:26 PM, Raj Kumar Bhagat wrote: >> From: Balamurugan S <quic_bselvara@quicinc.com> >> >> Current ath12k devices, QCN9274 and WCN7850, supports m3.bin firmware >> download through ath12k driver. The new ath12k AHB based device >> IPQ5332 supports m3 firmware download through remoteproc driver. >> >> Hence, add new parameter (m3_fw_support) in ath12k_hw_params to avoid >> m3 firmware download in IPQ5332. >> >> 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> >> Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com> >> --- >> drivers/net/wireless/ath/ath12k/hw.c | 8 ++++++++ >> drivers/net/wireless/ath/ath12k/hw.h | 2 ++ >> drivers/net/wireless/ath/ath12k/qmi.c | 28 ++++++++++++++++----------- >> 3 files changed, 27 insertions(+), 11 deletions(-) >> >> diff --git a/drivers/net/wireless/ath/ath12k/hw.c b/drivers/net/wireless/ath/ath12k/hw.c >> index e5e2164c27d2..a4e0c21ac4b7 100644 >> --- a/drivers/net/wireless/ath/ath12k/hw.c >> +++ b/drivers/net/wireless/ath/ath12k/hw.c >> @@ -1299,6 +1299,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = { >> .iova_mask = 0, >> >> .supports_aspm = false, >> + >> + .m3_fw_support = true, > > 'support for m3 firmware' is not a fitting term.. maybe "needs_m3_fw"? > The name "m3_fw_support" is inherited from ath11k, for ath12k we could change it to "needs_m3_fw".
diff --git a/drivers/net/wireless/ath/ath12k/hw.c b/drivers/net/wireless/ath/ath12k/hw.c index e5e2164c27d2..a4e0c21ac4b7 100644 --- a/drivers/net/wireless/ath/ath12k/hw.c +++ b/drivers/net/wireless/ath/ath12k/hw.c @@ -1299,6 +1299,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = { .iova_mask = 0, .supports_aspm = false, + + .m3_fw_support = true, }, { .name = "wcn7850 hw2.0", @@ -1379,6 +1381,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = { .iova_mask = ATH12K_PCIE_MAX_PAYLOAD_SIZE - 1, .supports_aspm = true, + + .m3_fw_support = true, }, { .name = "qcn9274 hw2.0", @@ -1455,6 +1459,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = { .iova_mask = 0, .supports_aspm = false, + + .m3_fw_support = true, }, { .name = "ipq5332 hw1.0", @@ -1526,6 +1532,8 @@ static const struct ath12k_hw_params ath12k_hw_params[] = { .supports_dynamic_smps_6ghz = false, .iova_mask = 0, .supports_aspm = false, + + .m3_fw_support = false, }, }; diff --git a/drivers/net/wireless/ath/ath12k/hw.h b/drivers/net/wireless/ath/ath12k/hw.h index 36bec99e9e4d..22bd0a91b3e9 100644 --- a/drivers/net/wireless/ath/ath12k/hw.h +++ b/drivers/net/wireless/ath/ath12k/hw.h @@ -220,6 +220,8 @@ struct ath12k_hw_params { bool supports_dynamic_smps_6ghz; u32 iova_mask; + + bool m3_fw_support; }; struct ath12k_hw_ops { diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/ath/ath12k/qmi.c index b93ce9f87f61..668232d83c10 100644 --- a/drivers/net/wireless/ath/ath12k/qmi.c +++ b/drivers/net/wireless/ath/ath12k/qmi.c @@ -2080,10 +2080,12 @@ static int ath12k_qmi_host_cap_send(struct ath12k_base *ab) req.bdf_support_valid = 1; req.bdf_support = 1; - req.m3_support_valid = 1; - req.m3_support = 1; - req.m3_cache_support_valid = 1; - req.m3_cache_support = 1; + if (ab->hw_params->m3_fw_support) { + req.m3_support_valid = 1; + req.m3_support = 1; + req.m3_cache_support_valid = 1; + req.m3_cache_support = 1; + } req.cal_done_valid = 1; req.cal_done = ab->qmi.cal_done; @@ -2721,6 +2723,9 @@ static void ath12k_qmi_m3_free(struct ath12k_base *ab) { struct m3_mem_region *m3_mem = &ab->qmi.m3_mem; + if (!ab->hw_params->m3_fw_support) + return; + if (!m3_mem->vaddr) return; @@ -2799,15 +2804,16 @@ static int ath12k_qmi_wlanfw_m3_info_send(struct ath12k_base *ab) struct qmi_txn txn; int ret = 0; - ret = ath12k_qmi_m3_load(ab); - if (ret) { - ath12k_err(ab, "failed to load m3 firmware: %d", ret); - return ret; + if (ab->hw_params->m3_fw_support) { + ret = ath12k_qmi_m3_load(ab); + if (ret) { + ath12k_err(ab, "failed to load m3 firmware: %d", ret); + return ret; + } + req.addr = m3_mem->paddr; + req.size = m3_mem->size; } - req.addr = m3_mem->paddr; - req.size = m3_mem->size; - ret = qmi_txn_init(&ab->qmi.handle, &txn, qmi_wlanfw_m3_info_resp_msg_v01_ei, &resp); if (ret < 0)