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 <[email protected]>
---
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)
--
2.34.1
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?
>
> 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 <[email protected]>
> ---
> 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)
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 <[email protected]>
>> ---
>> 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)
>
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.
>
> 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 <[email protected]>
Acked-by: Jeff Johnson <[email protected]>