On 1/30/2024 7:22 AM, Jeff Johnson wrote: > On 1/28/2024 10:57 PM, Raj Kumar Bhagat wrote: >> 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. > > Does this patch need a Fixes: tag? > I do not think Fixes: tag is required, because Single-phy QCN9274 and WCN7850 works fine. The issue is only with Split-phy QCN9274, and it not yet part of upstream ath.git. >> >> 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@xxxxxxxxxxx> >> --- >> drivers/net/wireless/ath/ath12k/core.c | 1 + >> drivers/net/wireless/ath/ath12k/core.h | 5 +++++ >> drivers/net/wireless/ath/ath12k/mhi.c | 1 + >> drivers/net/wireless/ath/ath12k/qmi.c | 3 +++ >> 4 files changed, 10 insertions(+) >> >> diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c >> index ca3777c684b3..0d4640ff8d6f 100644 >> --- a/drivers/net/wireless/ath/ath12k/core.c >> +++ b/drivers/net/wireless/ath/ath12k/core.c >> @@ -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; >> >> diff --git a/drivers/net/wireless/ath/ath12k/core.h b/drivers/net/wireless/ath/ath12k/core.h >> index f0a319ea57c1..a984171e4a08 100644 >> --- a/drivers/net/wireless/ath/ath12k/core.h >> +++ b/drivers/net/wireless/ath/ath12k/core.h >> @@ -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 *)); >> }; >> diff --git a/drivers/net/wireless/ath/ath12k/mhi.c b/drivers/net/wireless/ath/ath12k/mhi.c >> index 50b9e44504f7..adb8c3ec1950 100644 >> --- a/drivers/net/wireless/ath/ath12k/mhi.c >> +++ b/drivers/net/wireless/ath/ath12k/mhi.c >> @@ -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); >> } >> diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/ath/ath12k/qmi.c >> index 0f0eaadc8418..92845ffff44a 100644 >> --- a/drivers/net/wireless/ath/ath12k/qmi.c >> +++ b/drivers/net/wireless/ath/ath12k/qmi.c >> @@ -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) >