[PATCH 1/2] wifi: ath11k: supports 2 station interfaces
Luca Weiss
luca.weiss at fairphone.com
Fri May 10 01:22:50 PDT 2024
On Fri Jul 14, 2023 at 4:38 AM CEST, Carl Huang wrote:
> Add hardware parameter support_dual_stations to indicate
> whether 2 station interfaces are supported. For chips which
> support this feature, limit total number of AP interface and
> mesh point to 1. The max interfaces are 3 for such chips.
>
> The chips affected are:
> QCA6390 hw2.0
> WCN6855 hw2.0
> WCN6855 hw2.1
> Other chips are not affected.
>
> For affected chips, remove radar_detect_widths because now
> num_different_channels is set to 2. radar_detect_widths can
> be set only when num_different_channels is 1. See mac80211
> function wiphy_verify_combinations for details.
>
> Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3
Hi Carl,
Unfortunately this commit breaks wifi on a QCM6490 smartphone
(qcm6490-fairphone-fp5) and makes the board crash.
Reverting this commit (plus for conflict resolution 5dc9d1a55e95 ("wifi:
ath11k: add support for QCA2066") and 24395ec11707 ("wifi: ath11k:
provide address list if chip supports 2 stations")) makes wifi work
again.
Here's the crash log:
[ 43.458118] ath11k 17a10040.wifi: Adding to iommu group 11
[ 43.459075] ath11k 17a10040.wifi: wcn6750 hw1.0
[ 43.461219] remoteproc remoteproc2: powering up 8a00000.remoteproc
[ 43.490363] remoteproc remoteproc2: Booting fw image qcom/qcm6490/fairphone5/wpss.mbn, size 7435056
[ 43.614039] remoteproc remoteproc2: remote processor 8a00000.remoteproc is now up
[ 43.746227] ath11k 17a10040.wifi: chip_id 0x1 chip_family 0xb board_id 0xff soc_id 0xffffffff
[ 43.746262] ath11k 17a10040.wifi: fw_version 0x1011855b fw_build_timestamp 2023-09-03 07:43 fw_build_id WLAN.MSL.1.0.1-01371-QCAMSLSWPLZ-1
[ 53.116443] qcom_q6v5_pas 8a00000.remoteproc: fatal error received: cmnos_thread.c:4645:Asserted in cmnos_allocram.c:cmnos_allocram_base_with_alignment_recurse:497 with Args:0x3,0x3,0x0
[ 53.116503] remoteproc remoteproc2: crash detected in 8a00000.remoteproc: type fatal error
[ 53.116734] remoteproc remoteproc2: handling crash #1 in 8a00000.remoteproc
[ 53.116749] remoteproc remoteproc2: recovering 8a00000.remoteproc
[ 53.125088] ath11k 17a10040.wifi: failed to send WMI_PDEV_SET_PARAM cmd
[ 53.125116] ath11k 17a10040.wifi: failed to enable PMF QOS: (-108
[ 53.125167] remoteproc remoteproc2: stopped remote processor 8a00000.remoteproc
[ 53.127827] ath11k 17a10040.wifi: failed to send WMI_PDEV_SET_PARAM cmd
[ 53.127848] ath11k 17a10040.wifi: failed to enable PMF QOS: (-108
[ 53.258990] remoteproc remoteproc2: remote processor 8a00000.remoteproc is now up
[ 53.390288] ath11k 17a10040.wifi: chip_id 0x1 chip_family 0xb board_id 0xff soc_id 0xffffffff
[ 53.390319] ath11k 17a10040.wifi: fw_version 0x1011855b fw_build_timestamp 2023-09-03 07:43 fw_build_id WLAN.MSL.1.0.1-01371-QCAMSLSWPLZ-1
[ 53.404765] ath11k 17a10040.wifi: Last interrupt received for each CE:
[ 53.404789] ath11k 17a10040.wifi: CE_id 0 pipe_num 0 580ms before
[ 53.404804] ath11k 17a10040.wifi: CE_id 1 pipe_num 1 476ms before
[ 53.404818] ath11k 17a10040.wifi: CE_id 2 pipe_num 2 476ms before
[ 53.404831] ath11k 17a10040.wifi: CE_id 3 pipe_num 3 580ms before
[ 53.404844] ath11k 17a10040.wifi: CE_id 5 pipe_num 5 4294720700ms before
[ 53.404858] ath11k 17a10040.wifi: CE_id 7 pipe_num 7 4294720700ms before
[ 53.404871] ath11k 17a10040.wifi: CE_id 8 pipe_num 8 4294720700ms before
[ 53.404883] ath11k 17a10040.wifi:
Last interrupt received for each group:
[ 53.404894] ath11k 17a10040.wifi: group_id 0 4294720700ms before
[ 53.404907] ath11k 17a10040.wifi: group_id 1 4294720700ms before
[ 53.404918] ath11k 17a10040.wifi: group_id 2 4294720700ms before
[ 53.404929] ath11k 17a10040.wifi: group_id 3 4294720700ms before
[ 53.404940] ath11k 17a10040.wifi: group_id 4 4294720700ms before
[ 53.404952] ath11k 17a10040.wifi: group_id 5 4294720700ms before
[ 53.404964] ath11k 17a10040.wifi: group_id 6 4294720700ms before
[ 53.404976] ath11k 17a10040.wifi: group_id 7 4294720700ms before
[ 53.404987] ath11k 17a10040.wifi: group_id 8 4294720700ms before
[ 53.404998] ath11k 17a10040.wifi: group_id 9 4294720700ms before
[ 53.405009] ath11k 17a10040.wifi: group_id 10 4294720700ms before
[ 53.405021] ath11k 17a10040.wifi: dst srng id 0 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405037] ath11k 17a10040.wifi: dst srng id 1 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405052] ath11k 17a10040.wifi: dst srng id 2 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405066] ath11k 17a10040.wifi: dst srng id 3 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405082] ath11k 17a10040.wifi: dst srng id 4 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405097] ath11k 17a10040.wifi: src srng id 5 hp 0, reap_hp 248, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405114] ath11k 17a10040.wifi: src srng id 8 hp 0, reap_hp 2550, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405130] ath11k 17a10040.wifi: dst srng id 9 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405145] ath11k 17a10040.wifi: src srng id 16 hp 0, reap_hp 16376, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405162] ath11k 17a10040.wifi: src srng id 17 hp 0, reap_hp 16376, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405179] ath11k 17a10040.wifi: src srng id 18 hp 0, reap_hp 16376, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405196] ath11k 17a10040.wifi: src srng id 24 hp 0, reap_hp 248, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405213] ath11k 17a10040.wifi: dst srng id 25 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405228] ath11k 17a10040.wifi: src srng id 32 hp 12, reap_hp 8, cur tp 12, cached tp 12 last tp 8 napi processed before 580ms
[ 53.405244] ath11k 17a10040.wifi: src srng id 35 hp 4, reap_hp 0, cur tp 4, cached tp 4 last tp 0 napi processed before 580ms
[ 53.405260] ath11k 17a10040.wifi: src srng id 36 hp 20, reap_hp 0, cur tp 20, cached tp 12 last tp 12 napi processed before 460ms
[ 53.405276] ath11k 17a10040.wifi: src srng id 39 hp 0, reap_hp 124, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405294] ath11k 17a10040.wifi: src srng id 57 hp 1022, reap_hp 1022, cur tp 2, cached tp 2 last tp 2 napi processed before 476ms
[ 53.405310] ath11k 17a10040.wifi: src srng id 58 hp 18, reap_hp 18, cur tp 22, cached tp 22 last tp 22 napi processed before 476ms
[ 53.405327] ath11k 17a10040.wifi: src srng id 61 hp 1020, reap_hp 1020, cur tp 0, cached tp 0 last tp 0 napi processed before 584ms
[ 53.405345] ath11k 17a10040.wifi: dst srng id 81 tp 4, cur hp 4, cached hp 4 last hp 4 napi processed before 476ms
[ 53.405361] ath11k 17a10040.wifi: dst srng id 82 tp 44, cur hp 44, cached hp 44 last hp 44 napi processed before 476ms
[ 53.405378] ath11k 17a10040.wifi: dst srng id 85 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405394] ath11k 17a10040.wifi: src srng id 104 hp 65532, reap_hp 65532, cur tp 0, cached tp 0 last tp 0 napi processed before 588ms
[ 53.405411] ath11k 17a10040.wifi: src srng id 105 hp 0, reap_hp 504, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405427] ath11k 17a10040.wifi: dst srng id 106 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405443] ath11k 17a10040.wifi: dst srng id 108 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405458] ath11k 17a10040.wifi: dst srng id 109 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405474] ath11k 17a10040.wifi: dst srng id 110 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.405491] ath11k 17a10040.wifi: src srng id 128 hp 8190, reap_hp 8190, cur tp 0, cached tp 0 last tp 0 napi processed before 464ms
[ 53.405507] ath11k 17a10040.wifi: src srng id 129 hp 0, reap_hp 2046, cur tp 0, cached tp 0 last tp 0 napi processed before 4294720700ms
[ 53.405525] ath11k 17a10040.wifi: src srng id 132 hp 2046, reap_hp 2046, cur tp 0, cached tp 0 last tp 0 napi processed before 460ms
[ 53.405542] ath11k 17a10040.wifi: dst srng id 133 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294720700ms
[ 53.747641] qcom_q6v5_pas 8a00000.remoteproc: fatal error received: platform_msl.c:513:PCIE ACMT error debug0 0x6030, debug1 0x101
[ 53.747677] remoteproc remoteproc2: crash detected in 8a00000.remoteproc: type fatal error
[ 53.747864] remoteproc remoteproc2: handling crash #2 in 8a00000.remoteproc
[ 53.747875] remoteproc remoteproc2: recovering 8a00000.remoteproc
[ 53.758632] remoteproc remoteproc2: stopped remote processor 8a00000.remoteproc
[ 53.886889] remoteproc remoteproc2: remote processor 8a00000.remoteproc is now up
[ 54.017475] ath11k 17a10040.wifi: chip_id 0x1 chip_family 0xb board_id 0xff soc_id 0xffffffff
[ 54.017505] ath11k 17a10040.wifi: fw_version 0x1011855b fw_build_timestamp 2023-09-03 07:43 fw_build_id WLAN.MSL.1.0.1-01371-QCAMSLSWPLZ-1
[ 54.027605] ath11k 17a10040.wifi: Last interrupt received for each CE:
[ 54.027627] ath11k 17a10040.wifi: CE_id 0 pipe_num 0 1204ms before
[ 54.027642] ath11k 17a10040.wifi: CE_id 1 pipe_num 1 1100ms before
[ 54.027655] ath11k 17a10040.wifi: CE_id 2 pipe_num 2 1100ms before
[ 54.027667] ath11k 17a10040.wifi: CE_id 3 pipe_num 3 1204ms before
[ 54.027680] ath11k 17a10040.wifi: CE_id 5 pipe_num 5 4294721324ms before
[ 54.027692] ath11k 17a10040.wifi: CE_id 7 pipe_num 7 4294721324ms before
[ 54.027704] ath11k 17a10040.wifi: CE_id 8 pipe_num 8 4294721324ms before
[ 54.027716] ath11k 17a10040.wifi:
Last interrupt received for each group:
[ 54.027726] ath11k 17a10040.wifi: group_id 0 4294721324ms before
[ 54.027738] ath11k 17a10040.wifi: group_id 1 4294721324ms before
[ 54.027749] ath11k 17a10040.wifi: group_id 2 4294721324ms before
[ 54.027760] ath11k 17a10040.wifi: group_id 3 4294721324ms before
[ 54.027771] ath11k 17a10040.wifi: group_id 4 4294721324ms before
[ 54.027782] ath11k 17a10040.wifi: group_id 5 4294721324ms before
[ 54.027794] ath11k 17a10040.wifi: group_id 6 4294721324ms before
[ 54.027805] ath11k 17a10040.wifi: group_id 7 4294721324ms before
[ 54.027816] ath11k 17a10040.wifi: group_id 8 4294721324ms before
[ 54.027827] ath11k 17a10040.wifi: group_id 9 4294721324ms before
[ 54.027838] ath11k 17a10040.wifi: group_id 10 4294721324ms before
[ 54.027850] ath11k 17a10040.wifi: dst srng id 4 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.027866] ath11k 17a10040.wifi: src srng id 5 hp 0, reap_hp 248, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.027882] ath11k 17a10040.wifi: src srng id 8 hp 0, reap_hp 2550, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.027898] ath11k 17a10040.wifi: dst srng id 9 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.027914] ath11k 17a10040.wifi: src srng id 16 hp 0, reap_hp 16376, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.027930] ath11k 17a10040.wifi: src srng id 17 hp 0, reap_hp 16376, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.027947] ath11k 17a10040.wifi: src srng id 18 hp 0, reap_hp 16376, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.027964] ath11k 17a10040.wifi: src srng id 24 hp 0, reap_hp 248, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.027980] ath11k 17a10040.wifi: dst srng id 25 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.027997] ath11k 17a10040.wifi: src srng id 32 hp 0, reap_hp 60, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.028014] ath11k 17a10040.wifi: src srng id 35 hp 0, reap_hp 124, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.028030] ath11k 17a10040.wifi: src srng id 36 hp 0, reap_hp 8188, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.028045] ath11k 17a10040.wifi: src srng id 39 hp 0, reap_hp 124, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.028063] ath11k 17a10040.wifi: src srng id 57 hp 1020, reap_hp 1020, cur tp 0, cached tp 0 last tp 0 napi processed before 440ms
[ 54.028079] ath11k 17a10040.wifi: src srng id 58 hp 1020, reap_hp 1020, cur tp 0, cached tp 0 last tp 0 napi processed before 436ms
[ 54.028095] ath11k 17a10040.wifi: src srng id 61 hp 1020, reap_hp 1020, cur tp 0, cached tp 0 last tp 0 napi processed before 436ms
[ 54.028112] ath11k 17a10040.wifi: dst srng id 81 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.028128] ath11k 17a10040.wifi: dst srng id 82 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.028143] ath11k 17a10040.wifi: dst srng id 85 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.028160] ath11k 17a10040.wifi: src srng id 104 hp 65532, reap_hp 65532, cur tp 0, cached tp 0 last tp 0 napi processed before 448ms
[ 54.028177] ath11k 17a10040.wifi: src srng id 105 hp 0, reap_hp 504, cur tp 0, cached tp 0 last tp 0 napi processed before 4294721324ms
[ 54.028194] ath11k 17a10040.wifi: dst srng id 106 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.028210] ath11k 17a10040.wifi: dst srng id 108 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.028226] ath11k 17a10040.wifi: dst srng id 109 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.028242] ath11k 17a10040.wifi: dst srng id 110 tp 0, cur hp 0, cached hp 0 last hp 0 napi processed before 4294721324ms
[ 54.622819] ath11k 17a10040.wifi: failed to receive control response completion, polling..
[ 55.646232] ath11k 17a10040.wifi: ctl_resp never came in (-110)
[ 55.646259] ath11k 17a10040.wifi: failed to connect to HTC: -110
[ 55.653201] ath11k 17a10040.wifi: failed to start core: -110
Let me know if you need any more information.
Regards
Luca
>
> Signed-off-by: Carl Huang <quic_cjhuang at quicinc.com>
> ---
> drivers/net/wireless/ath/ath11k/core.c | 14 ++++--
> drivers/net/wireless/ath/ath11k/hw.c | 2 +-
> drivers/net/wireless/ath/ath11k/hw.h | 1 +
> drivers/net/wireless/ath/ath11k/mac.c | 62 +++++++++++++++++---------
> 4 files changed, 53 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
> index bebfd342e28b..739a8d13d57d 100644
> --- a/drivers/net/wireless/ath/ath11k/core.c
> +++ b/drivers/net/wireless/ath/ath11k/core.c
> @@ -120,6 +120,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tcl_ring_retry = true,
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> + .support_dual_stations = false,
> },
> {
> .hw_rev = ATH11K_HW_IPQ6018_HW10,
> @@ -202,6 +203,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> .support_fw_mac_sequence = false,
> + .support_dual_stations = false,
> },
> {
> .name = "qca6390 hw2.0",
> @@ -251,7 +253,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .cold_boot_calib = false,
> .cbcal_restart_fw = false,
> .fw_mem_mode = 0,
> - .num_vdevs = 16 + 1,
> + .num_vdevs = 2 + 1,
> .num_peers = 512,
> .supports_suspend = true,
> .hal_desc_sz = sizeof(struct hal_rx_desc_ipq8074),
> @@ -286,6 +288,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> .support_fw_mac_sequence = true,
> + .support_dual_stations = true,
> },
> {
> .name = "qcn9074 hw1.0",
> @@ -367,6 +370,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> .support_fw_mac_sequence = false,
> + .support_dual_stations = false,
> },
> {
> .name = "wcn6855 hw2.0",
> @@ -416,7 +420,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .cold_boot_calib = false,
> .cbcal_restart_fw = false,
> .fw_mem_mode = 0,
> - .num_vdevs = 16 + 1,
> + .num_vdevs = 2 + 1,
> .num_peers = 512,
> .supports_suspend = true,
> .hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
> @@ -451,6 +455,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> .support_fw_mac_sequence = true,
> + .support_dual_stations = true,
> },
> {
> .name = "wcn6855 hw2.1",
> @@ -498,7 +503,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .cold_boot_calib = false,
> .cbcal_restart_fw = false,
> .fw_mem_mode = 0,
> - .num_vdevs = 16 + 1,
> + .num_vdevs = 2 + 1,
> .num_peers = 512,
> .supports_suspend = true,
> .hal_desc_sz = sizeof(struct hal_rx_desc_wcn6855),
> @@ -533,6 +538,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> .support_fw_mac_sequence = true,
> + .support_dual_stations = true,
> },
> {
> .name = "wcn6750 hw1.0",
> @@ -613,6 +619,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE_WCN6750,
> .smp2p_wow_exit = true,
> .support_fw_mac_sequence = true,
> + .support_dual_stations = false,
> },
> {
> .hw_rev = ATH11K_HW_IPQ5018_HW10,
> @@ -693,6 +700,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
> .tx_ring_size = DP_TCL_DATA_RING_SIZE,
> .smp2p_wow_exit = false,
> .support_fw_mac_sequence = false,
> + .support_dual_stations = false,
> },
> };
>
> diff --git a/drivers/net/wireless/ath/ath11k/hw.c b/drivers/net/wireless/ath/ath11k/hw.c
> index d7b5ec6e6904..3b56ba1b8534 100644
> --- a/drivers/net/wireless/ath/ath11k/hw.c
> +++ b/drivers/net/wireless/ath/ath11k/hw.c
> @@ -58,7 +58,7 @@ static void ath11k_hw_wcn6855_tx_mesh_enable(struct ath11k_base *ab,
> static void ath11k_init_wmi_config_qca6390(struct ath11k_base *ab,
> struct target_resource_config *config)
> {
> - config->num_vdevs = 4;
> + config->num_vdevs = ab->hw_params.num_vdevs;
> config->num_peers = 16;
> config->num_tids = 32;
>
> diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h
> index f5533630a7f9..40ed5608fe81 100644
> --- a/drivers/net/wireless/ath/ath11k/hw.h
> +++ b/drivers/net/wireless/ath/ath11k/hw.h
> @@ -225,6 +225,7 @@ struct ath11k_hw_params {
> u32 tx_ring_size;
> bool smp2p_wow_exit;
> bool support_fw_mac_sequence;
> + bool support_dual_stations;
> };
>
> struct ath11k_hw_ops {
> diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
> index 8c77ade49437..3a9494bc944c 100644
> --- a/drivers/net/wireless/ath/ath11k/mac.c
> +++ b/drivers/net/wireless/ath/ath11k/mac.c
> @@ -9287,28 +9287,46 @@ static int ath11k_mac_setup_iface_combinations(struct ath11k *ar)
> return -ENOMEM;
> }
>
> - limits[0].max = 1;
> - limits[0].types |= BIT(NL80211_IFTYPE_STATION);
> -
> - limits[1].max = 16;
> - limits[1].types |= BIT(NL80211_IFTYPE_AP);
> -
> - if (IS_ENABLED(CONFIG_MAC80211_MESH) &&
> - ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT))
> - limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT);
> -
> - combinations[0].limits = limits;
> - combinations[0].n_limits = n_limits;
> - combinations[0].max_interfaces = 16;
> - combinations[0].num_different_channels = 1;
> - combinations[0].beacon_int_infra_match = true;
> - combinations[0].beacon_int_min_gcd = 100;
> - combinations[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
> - BIT(NL80211_CHAN_WIDTH_20) |
> - BIT(NL80211_CHAN_WIDTH_40) |
> - BIT(NL80211_CHAN_WIDTH_80) |
> - BIT(NL80211_CHAN_WIDTH_80P80) |
> - BIT(NL80211_CHAN_WIDTH_160);
> + if (ab->hw_params.support_dual_stations) {
> + limits[0].max = 2;
> + limits[0].types |= BIT(NL80211_IFTYPE_STATION);
> +
> + limits[1].max = 1;
> + limits[1].types |= BIT(NL80211_IFTYPE_AP);
> + if (IS_ENABLED(CONFIG_MAC80211_MESH) &&
> + ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT))
> + limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT);
> +
> + combinations[0].limits = limits;
> + combinations[0].n_limits = 2;
> + combinations[0].max_interfaces = ab->hw_params.num_vdevs;
> + combinations[0].num_different_channels = 2;
> + combinations[0].beacon_int_infra_match = true;
> + combinations[0].beacon_int_min_gcd = 100;
> + } else {
> + limits[0].max = 1;
> + limits[0].types |= BIT(NL80211_IFTYPE_STATION);
> +
> + limits[1].max = 16;
> + limits[1].types |= BIT(NL80211_IFTYPE_AP);
> +
> + if (IS_ENABLED(CONFIG_MAC80211_MESH) &&
> + ab->hw_params.interface_modes & BIT(NL80211_IFTYPE_MESH_POINT))
> + limits[1].types |= BIT(NL80211_IFTYPE_MESH_POINT);
> +
> + combinations[0].limits = limits;
> + combinations[0].n_limits = 2;
> + combinations[0].max_interfaces = 16;
> + combinations[0].num_different_channels = 1;
> + combinations[0].beacon_int_infra_match = true;
> + combinations[0].beacon_int_min_gcd = 100;
> + combinations[0].radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
> + BIT(NL80211_CHAN_WIDTH_20) |
> + BIT(NL80211_CHAN_WIDTH_40) |
> + BIT(NL80211_CHAN_WIDTH_80) |
> + BIT(NL80211_CHAN_WIDTH_80P80) |
> + BIT(NL80211_CHAN_WIDTH_160);
> + }
>
> ar->hw->wiphy->iface_combinations = combinations;
> ar->hw->wiphy->n_iface_combinations = 1;
More information about the ath11k
mailing list