Message ID | 20241204163216.433795-3-kvalo@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jeff Johnson |
Headers | show |
Series | wifi: ath12k: MLO support part 6 | expand |
On 12/4/2024 8:32 AM, Kalle Valo wrote: > From: Aditya Kumar Singh <quic_adisi@quicinc.com> > > At present, the mlo_capable_flags in ath12k_base is used to indicate whether > the chip supports inter (QCN9274) or intra (WCN7850) chip MLO. However, it’s > possible that the chip supports neither, especially with older firmware > versions. Additionally, if intra chip MLO is not supported, inter chip MLO will > also be non-functional. Therefore, having two separate flags for this is > unnecessary. > > Therefore, rename this flag to single_chip_mlo_supp. At the same time convert > it into a bool data type. Also, get rid of the enums defined earlier. > > For the QCN9274 family of chipsets, this will be set only when firmware > advertises the support during the QMI exchange. > > For the WCN7850 family of chipsets, since the event is not supported, > assumption is made that single chip MLO is supported. > > Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 > Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 > > Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> Kalle, this patch is missing your SOB. Please reply with the tag and I'll fix in 'pending' > ---
Jeff Johnson <jeff.johnson@oss.qualcomm.com> writes: > On 12/4/2024 8:32 AM, Kalle Valo wrote: > >> From: Aditya Kumar Singh <quic_adisi@quicinc.com> >> >> At present, the mlo_capable_flags in ath12k_base is used to indicate whether >> the chip supports inter (QCN9274) or intra (WCN7850) chip MLO. However, it’s >> possible that the chip supports neither, especially with older firmware >> versions. Additionally, if intra chip MLO is not supported, inter chip MLO will >> also be non-functional. Therefore, having two separate flags for this is >> unnecessary. >> >> Therefore, rename this flag to single_chip_mlo_supp. At the same time convert >> it into a bool data type. Also, get rid of the enums defined earlier. >> >> For the QCN9274 family of chipsets, this will be set only when firmware >> advertises the support during the QMI exchange. >> >> For the WCN7850 family of chipsets, since the event is not supported, >> assumption is made that single chip MLO is supported. >> >> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1 >> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 >> >> Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com> > > Kalle, this patch is missing your SOB. > Please reply with the tag and I'll fix in 'pending' Oh darn, sorry about that. Here it is: Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c index 4da147f7bfac..568c9b6e2c1c 100644 --- a/drivers/net/wireless/ath/ath12k/core.c +++ b/drivers/net/wireless/ath/ath12k/core.c @@ -1325,7 +1325,7 @@ struct ath12k_base *ath12k_core_alloc(struct device *dev, size_t priv_size, ab->dev = dev; ab->hif.bus = bus; ab->qmi.num_radios = U8_MAX; - ab->mlo_capable_flags = ATH12K_INTRA_DEVICE_MLO_SUPPORT; + ab->single_chip_mlo_supp = false; /* Device index used to identify the devices in a group. * diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h index 9ddced140056..d93ba844f61d 100644 --- a/drivers/net/wireless/ath/ath12k/core.h +++ b/drivers/net/wireless/ath/ath12k/core.h @@ -816,21 +816,6 @@ struct ath12k_soc_dp_stats { struct ath12k_soc_dp_tx_err_stats tx_err; }; -/** - * enum ath12k_link_capable_flags - link capable flags - * - * Single/Multi link capability information - * - * @ATH12K_INTRA_DEVICE_MLO_SUPPORT: SLO/MLO form between the radio, where all - * the links (radios) present within a device. - * @ATH12K_INTER_DEVICE_MLO_SUPPORT: SLO/MLO form between the radio, where all - * the links (radios) present across the devices. - */ -enum ath12k_link_capable_flags { - ATH12K_INTRA_DEVICE_MLO_SUPPORT = BIT(0), - ATH12K_INTER_DEVICE_MLO_SUPPORT = BIT(1), -}; - /* Master structure to hold the hw data which may be used in core module */ struct ath12k_base { enum ath12k_hw_rev hw_rev; @@ -996,12 +981,8 @@ struct ath12k_base { const struct hal_rx_ops *hal_rx_ops; - /* mlo_capable_flags denotes the single/multi link operation - * capabilities of the Device. - * - * See enum ath12k_link_capable_flags - */ - u8 mlo_capable_flags; + /* Denotes the whether MLO is possible within the chip */ + bool single_chip_mlo_supp; struct completion restart_completed; diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/ath/ath12k/qmi.c index 20382b751829..efcf2dfac4ac 100644 --- a/drivers/net/wireless/ath/ath12k/qmi.c +++ b/drivers/net/wireless/ath/ath12k/qmi.c @@ -2023,14 +2023,14 @@ static void ath12k_host_cap_parse_mlo(struct ath12k_base *ab, u8 hw_link_id = 0; int i; - if (!(ab->mlo_capable_flags & ATH12K_INTRA_DEVICE_MLO_SUPPORT)) { + if (!ab->single_chip_mlo_supp) { ath12k_dbg(ab, ATH12K_DBG_QMI, "intra device MLO is disabled hence skip QMI MLO cap"); return; } if (!ab->qmi.num_radios || ab->qmi.num_radios == U8_MAX) { - ab->mlo_capable_flags = 0; + ab->single_chip_mlo_supp = false; ath12k_dbg(ab, ATH12K_DBG_QMI, "skip QMI MLO cap due to invalid num_radio %d\n", @@ -2176,12 +2176,9 @@ static void ath12k_qmi_phy_cap_send(struct ath12k_base *ab) goto out; } - if (resp.single_chip_mlo_support_valid) { - if (resp.single_chip_mlo_support) - ab->mlo_capable_flags |= ATH12K_INTRA_DEVICE_MLO_SUPPORT; - else - ab->mlo_capable_flags &= ~ATH12K_INTRA_DEVICE_MLO_SUPPORT; - } + if (resp.single_chip_mlo_support_valid && + resp.single_chip_mlo_support) + ab->single_chip_mlo_supp = true; if (!resp.num_phy_valid) { ret = -ENODATA;