Search Linux Wireless

Re: [PATCH 1/2] wifi: ath11k: supports 2 station interfaces

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx>
> ---
>  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;






[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux