]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ath12k: Enable MLO for single split-phy PCI device
authorAaradhana Sahu <quic_aarasahu@quicinc.com>
Fri, 7 Feb 2025 05:03:27 +0000 (10:33 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Tue, 11 Feb 2025 15:27:11 +0000 (07:27 -0800)
The single split-phy PCI device can perform multi-link operation (MLO)
within its own radio, and the MLO-supporting firmware also supports MLO
for split-phy PCI devices.

Therefore, enable MLO for the single split-phy PCI device.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1

Signed-off-by: Aaradhana Sahu <quic_aarasahu@quicinc.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250207050327.360987-4-quic_aarasahu@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/core.c
drivers/net/wireless/ath/ath12k/core.h
drivers/net/wireless/ath/ath12k/qmi.c

index 1195eba0950aca16e84dcbd5fe47c98d071a107b..0c556023141b00bf82238797d9764eaea6ce3f69 100644 (file)
@@ -1847,14 +1847,11 @@ void ath12k_core_hw_group_set_mlo_capable(struct ath12k_hw_group *ag)
        /* 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 it depends whether the
-        * device can support intra 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) {
-               ag->mlo_capable = true;
-       } else {
+       if (ag->num_devices == 1) {
                ab = ag->ab[0];
-               ag->mlo_capable = ab->single_chip_mlo_supp;
 
                /* WCN chipsets does not advertise in firmware features
                 * hence skip checking
@@ -1863,8 +1860,7 @@ void ath12k_core_hw_group_set_mlo_capable(struct ath12k_hw_group *ag)
                        return;
        }
 
-       if (!ag->mlo_capable)
-               return;
+       ag->mlo_capable = true;
 
        for (i = 0; i < ag->num_devices; i++) {
                ab = ag->ab[i];
@@ -1980,7 +1976,6 @@ 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_supp = false;
 
        /* Device index used to identify the devices in a group.
         *
index ff023d751bf11ca649488417dbbe49f2201c0a34..3fac4f00d3832c499c0faf76e8f0f3b81149de18 100644 (file)
@@ -1055,9 +1055,6 @@ struct ath12k_base {
 
        const struct hal_rx_ops *hal_rx_ops;
 
-       /* Denotes the whether MLO is possible within the chip */
-       bool single_chip_mlo_supp;
-
        struct completion restart_completed;
 
 #ifdef CONFIG_ACPI
index fcbe234758e114a6e05f93859132740a244e2e90..348dbc81bad8c9b71974656dfefa2d22ea7f4260 100644 (file)
@@ -2056,8 +2056,7 @@ static int ath12k_host_cap_parse_mlo(struct ath12k_base *ab,
        }
 
        if (!ab->qmi.num_radios || ab->qmi.num_radios == U8_MAX) {
-               ab->single_chip_mlo_supp = false;
-
+               ag->mlo_capable = false;
                ath12k_dbg(ab, ATH12K_DBG_QMI,
                           "skip QMI MLO cap due to invalid num_radio %d\n",
                           ab->qmi.num_radios);