]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: disable QMI PHY capability learn in split-phy QCN9274
authorRaj Kumar Bhagat <quic_rajkbhag@quicinc.com>
Mon, 29 Jan 2024 06:57:24 +0000 (12:27 +0530)
committerKalle Valo <quic_kvalo@quicinc.com>
Fri, 2 Feb 2024 12:32:52 +0000 (14:32 +0200)
QMI PHY capability learn is used to get PHY count information to
support single/multi link operation (SLO/MLO) configuration. The
QCN9274 dualmac firmware currently do not support SLO/MLO, if two
PHYs are within the same chip. Due to this firmware crashes in
split-phy QCN9274, while bringing up AP with MLO parameter enabled
in QMI host capability request message.

The QMI PHY capability learn is not required for split-phy QCN9274,
if SLO/MLO is not supported within the same chip. Hence, disable QMI
PHY capability learn support in split-phy QCN9274.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00188-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: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://msgid.link/20240129065724.2310207-14-quic_rajkbhag@quicinc.com
drivers/net/wireless/ath/ath12k/core.c
drivers/net/wireless/ath/ath12k/core.h
drivers/net/wireless/ath/ath12k/mhi.c
drivers/net/wireless/ath/ath12k/qmi.c

index ca3777c684b37df9584abe8e310b9d36decba73d..0d4640ff8d6fe7dfb41075daf8b7f4aba0ba865f 100644 (file)
@@ -1218,6 +1218,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->slo_capable = true;
 
        return ab;
 
index f0a319ea57c1d47d28358c870320a56fbcd13ba9..a984171e4a087ac0f800eb84e94bd8a097de824f 100644 (file)
@@ -842,6 +842,11 @@ struct ath12k_base {
 
        const struct hal_rx_ops *hal_rx_ops;
 
+       /* slo_capable denotes if the single/multi link operation
+        * is supported within the same chip (SoC).
+        */
+       bool slo_capable;
+
        /* must be last */
        u8 drv_priv[] __aligned(sizeof(void *));
 };
index 50b9e44504f78d345e5fe8190532f1959462e069..adb8c3ec1950ef71e9fdede7b3fac4e69f54329e 100644 (file)
@@ -385,6 +385,7 @@ int ath12k_mhi_register(struct ath12k_pci *ab_pci)
                                   "failed to read board id\n");
                } else if (board_id & OTP_VALID_DUALMAC_BOARD_ID_MASK) {
                        dualmac = true;
+                       ab->slo_capable = false;
                        ath12k_dbg(ab, ATH12K_DBG_BOOT,
                                   "dualmac fw selected for board id: %x\n", board_id);
                }
index 0f0eaadc8418686919c1d1b09103f0f92ed2623c..92845ffff44ad35d2c85d83a192ac3d64e069edc 100644 (file)
@@ -2124,6 +2124,9 @@ static void ath12k_qmi_phy_cap_send(struct ath12k_base *ab)
        struct qmi_txn txn;
        int ret;
 
+       if (!ab->slo_capable)
+               goto out;
+
        ret = qmi_txn_init(&ab->qmi.handle, &txn,
                           qmi_wlanfw_phy_cap_resp_msg_v01_ei, &resp);
        if (ret < 0)