mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 03:24:19 +02:00
wifi: ath12k: support MLO as well if single_chip_mlo_support flag is set
Currently firmware MLO capability is validated via firmware IE, however WCN7850 firmware does not support this method but instead advertises MLO by single_chip_mlo_support bit in QMI phy capability message. Change to consider single_chip_mlo_support bit as well for MLO capability validation. Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00284-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1 Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00209-QCAHKSWPL_SILICONZ-1 Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com> Link: https://patch.msgid.link/20250409-ath12k-wcn7850-mlo-support-v2-3-3801132ca2c3@quicinc.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
parent
6b85b83e46
commit
32f7b19668
|
|
@ -2053,20 +2053,18 @@ void ath12k_core_hw_group_set_mlo_capable(struct ath12k_hw_group *ag)
|
|||
|
||||
lockdep_assert_held(&ag->mutex);
|
||||
|
||||
/* If more than one devices are grouped, then inter MLO
|
||||
* functionality can work still independent of whether internally
|
||||
* each device supports single_chip_mlo or not.
|
||||
* Only when there is one device, then disable for WCN chipsets
|
||||
* till the required driver implementation is in place.
|
||||
*/
|
||||
if (ag->num_devices == 1) {
|
||||
ab = ag->ab[0];
|
||||
|
||||
/* WCN chipsets does not advertise in firmware features
|
||||
* hence skip checking
|
||||
*/
|
||||
if (ab->hw_params->def_num_link)
|
||||
/* QCN9274 firmware uses firmware IE for MLO advertisement */
|
||||
if (ab->fw.fw_features_valid) {
|
||||
ag->mlo_capable =
|
||||
ath12k_fw_feature_supported(ab, ATH12K_FW_FEATURE_MLO);
|
||||
return;
|
||||
}
|
||||
|
||||
/* while WCN7850 firmware uses QMI single_chip_mlo_support bit */
|
||||
ag->mlo_capable = ab->single_chip_mlo_support;
|
||||
return;
|
||||
}
|
||||
|
||||
ag->mlo_capable = true;
|
||||
|
|
@ -2186,6 +2184,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->single_chip_mlo_support = false;
|
||||
|
||||
/* Device index used to identify the devices in a group.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1126,6 +1126,9 @@ struct ath12k_base {
|
|||
struct ath12k_ftm_event_obj ftm_event_obj;
|
||||
bool hw_group_ref;
|
||||
|
||||
/* Denote whether MLO is possible within the device */
|
||||
bool single_chip_mlo_support;
|
||||
|
||||
/* must be last */
|
||||
u8 drv_priv[] __aligned(sizeof(void *));
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2268,6 +2268,9 @@ static void ath12k_qmi_phy_cap_send(struct ath12k_base *ab)
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (resp.single_chip_mlo_support_valid && resp.single_chip_mlo_support)
|
||||
ab->single_chip_mlo_support = true;
|
||||
|
||||
if (!resp.num_phy_valid) {
|
||||
ret = -ENODATA;
|
||||
goto out;
|
||||
|
|
@ -2276,7 +2279,8 @@ static void ath12k_qmi_phy_cap_send(struct ath12k_base *ab)
|
|||
ab->qmi.num_radios = resp.num_phy;
|
||||
|
||||
ath12k_dbg(ab, ATH12K_DBG_QMI,
|
||||
"phy capability resp valid %d num_phy %d valid %d board_id %d\n",
|
||||
"phy capability resp valid %d single_chip_mlo_support %d valid %d num_phy %d valid %d board_id %d\n",
|
||||
resp.single_chip_mlo_support_valid, resp.single_chip_mlo_support,
|
||||
resp.num_phy_valid, resp.num_phy,
|
||||
resp.board_id_valid, resp.board_id);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user