Skip to content

Commit 1eae77b

Browse files
committed
Merge tag 'wireless-drivers-2020-11-23' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers
Kalle Valo says: ==================== wireless-drivers fixes for v5.10 First set of fixes for v5.10. One fix for iwlwifi kernel panic, others less notable. rtw88 * fix a bogus test found by clang iwlwifi * fix long memory reads causing soft lockup warnings * fix kernel panic during Channel Switch Announcement (CSA) * other smaller fixes MAINTAINERS * email address updates * tag 'wireless-drivers-2020-11-23' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers: iwlwifi: mvm: fix kernel panic in case of assert during CSA iwlwifi: pcie: set LTR to avoid completion timeout iwlwifi: mvm: write queue_sync_state only for sync iwlwifi: mvm: properly cancel a session protection for P2P iwlwifi: mvm: use the HOT_SPOT_CMD to cancel an AUX ROC iwlwifi: sta: set max HE max A-MPDU according to HE capa MAINTAINERS: update maintainers list for Cypress MAINTAINERS: update Yan-Hsuan's email address iwlwifi: pcie: limit memory read spin time rtw88: fix fw_fifo_addr check ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents f9b0365 + fe56d05 commit 1eae77b

File tree

10 files changed

+164
-57
lines changed

10 files changed

+164
-57
lines changed

MAINTAINERS

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3528,11 +3528,12 @@ BROADCOM BRCM80211 IEEE802.11n WIRELESS DRIVER
35283528
M: Arend van Spriel <[email protected]>
35293529
M: Franky Lin <[email protected]>
35303530
M: Hante Meuleman <[email protected]>
3531-
M: Chi-Hsien Lin <[email protected]>
3532-
M: Wright Feng <[email protected]>
3531+
M: Chi-hsien Lin <[email protected]>
3532+
M: Wright Feng <[email protected]>
3533+
M: Chung-hsien Hsu <[email protected]>
35333534
35343535
3535-
L: brcm80211-dev-list@cypress.com
3536+
L: SHA-cyfmac-dev-list@infineon.com
35363537
S: Supported
35373538
F: drivers/net/wireless/broadcom/brcm80211/
35383539

@@ -14802,7 +14803,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.g
1480214803
F: drivers/net/wireless/realtek/rtlwifi/
1480314804

1480414805
REALTEK WIRELESS DRIVER (rtw88)
14805-
M: Yan-Hsuan Chuang <yhchuang@realtek.com>
14806+
M: Yan-Hsuan Chuang <tony0620emma@gmail.com>
1480614807
1480714808
S: Maintained
1480814809
F: drivers/net/wireless/realtek/rtw88/

drivers/net/wireless/intel/iwlwifi/fw/api/sta.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
*
66
* GPL LICENSE SUMMARY
77
*
8-
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
98
* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
109
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
11-
* Copyright(c) 2018 - 2019 Intel Corporation
10+
* Copyright(c) 2012-2014, 2018 - 2020 Intel Corporation
1211
*
1312
* This program is free software; you can redistribute it and/or modify
1413
* it under the terms of version 2 of the GNU General Public License as
@@ -28,10 +27,9 @@
2827
*
2928
* BSD LICENSE
3029
*
31-
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3230
* Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
3331
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
34-
* Copyright(c) 2018 - 2019 Intel Corporation
32+
* Copyright(c) 2012-2014, 2018 - 2020 Intel Corporation
3533
* All rights reserved.
3634
*
3735
* Redistribution and use in source and binary forms, with or without
@@ -128,7 +126,9 @@ enum iwl_sta_flags {
128126
STA_FLG_MAX_AGG_SIZE_256K = (5 << STA_FLG_MAX_AGG_SIZE_SHIFT),
129127
STA_FLG_MAX_AGG_SIZE_512K = (6 << STA_FLG_MAX_AGG_SIZE_SHIFT),
130128
STA_FLG_MAX_AGG_SIZE_1024K = (7 << STA_FLG_MAX_AGG_SIZE_SHIFT),
131-
STA_FLG_MAX_AGG_SIZE_MSK = (7 << STA_FLG_MAX_AGG_SIZE_SHIFT),
129+
STA_FLG_MAX_AGG_SIZE_2M = (8 << STA_FLG_MAX_AGG_SIZE_SHIFT),
130+
STA_FLG_MAX_AGG_SIZE_4M = (9 << STA_FLG_MAX_AGG_SIZE_SHIFT),
131+
STA_FLG_MAX_AGG_SIZE_MSK = (0xf << STA_FLG_MAX_AGG_SIZE_SHIFT),
132132

133133
STA_FLG_AGG_MPDU_DENS_SHIFT = 23,
134134
STA_FLG_AGG_MPDU_DENS_2US = (4 << STA_FLG_AGG_MPDU_DENS_SHIFT),

drivers/net/wireless/intel/iwlwifi/fw/api/time-event.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
99
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
1010
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
11-
* Copyright(c) 2018 - 2019 Intel Corporation
11+
* Copyright(c) 2018 - 2020 Intel Corporation
1212
*
1313
* This program is free software; you can redistribute it and/or modify
1414
* it under the terms of version 2 of the GNU General Public License as
@@ -31,7 +31,7 @@
3131
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
3232
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
3333
* Copyright(c) 2016 - 2017 Intel Deutschland GmbH
34-
* Copyright(c) 2018 - 2019 Intel Corporation
34+
* Copyright(c) 2018 - 2020 Intel Corporation
3535
* All rights reserved.
3636
*
3737
* Redistribution and use in source and binary forms, with or without
@@ -421,12 +421,14 @@ struct iwl_hs20_roc_res {
421421
* able to run the GO Negotiation. Will not be fragmented and not
422422
* repetitive. Valid only on the P2P Device MAC. Only the duration will
423423
* be taken into account.
424+
* @SESSION_PROTECT_CONF_MAX_ID: not used
424425
*/
425426
enum iwl_mvm_session_prot_conf_id {
426427
SESSION_PROTECT_CONF_ASSOC,
427428
SESSION_PROTECT_CONF_GO_CLIENT_ASSOC,
428429
SESSION_PROTECT_CONF_P2P_DEVICE_DISCOV,
429430
SESSION_PROTECT_CONF_P2P_GO_NEGOTIATION,
431+
SESSION_PROTECT_CONF_MAX_ID,
430432
}; /* SESSION_PROTECTION_CONF_ID_E_VER_1 */
431433

432434
/**
@@ -459,7 +461,7 @@ struct iwl_mvm_session_prot_cmd {
459461
* @mac_id: the mac id for which the session protection started / ended
460462
* @status: 1 means success, 0 means failure
461463
* @start: 1 means the session protection started, 0 means it ended
462-
* @conf_id: the configuration id of the session that started / eneded
464+
* @conf_id: see &enum iwl_mvm_session_prot_conf_id
463465
*
464466
* Note that any session protection will always get two notifications: start
465467
* and end even the firmware could not schedule it.

drivers/net/wireless/intel/iwlwifi/iwl-csr.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,16 @@
147147
#define CSR_MAC_SHADOW_REG_CTL2 (CSR_BASE + 0x0AC)
148148
#define CSR_MAC_SHADOW_REG_CTL2_RX_WAKE 0xFFFF
149149

150+
/* LTR control (since IWL_DEVICE_FAMILY_22000) */
151+
#define CSR_LTR_LONG_VAL_AD (CSR_BASE + 0x0D4)
152+
#define CSR_LTR_LONG_VAL_AD_NO_SNOOP_REQ 0x80000000
153+
#define CSR_LTR_LONG_VAL_AD_NO_SNOOP_SCALE 0x1c000000
154+
#define CSR_LTR_LONG_VAL_AD_NO_SNOOP_VAL 0x03ff0000
155+
#define CSR_LTR_LONG_VAL_AD_SNOOP_REQ 0x00008000
156+
#define CSR_LTR_LONG_VAL_AD_SNOOP_SCALE 0x00001c00
157+
#define CSR_LTR_LONG_VAL_AD_SNOOP_VAL 0x000003ff
158+
#define CSR_LTR_LONG_VAL_AD_SCALE_USEC 2
159+
150160
/* GIO Chicken Bits (PCI Express bus link power management) */
151161
#define CSR_GIO_CHICKEN_BITS (CSR_BASE+0x100)
152162

drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3080,7 +3080,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
30803080

30813081
/* this would be a mac80211 bug ... but don't crash */
30823082
if (WARN_ON_ONCE(!mvmvif->phy_ctxt))
3083-
return -EINVAL;
3083+
return test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status) ? 0 : -EINVAL;
30843084

30853085
/*
30863086
* If we are in a STA removal flow and in DQA mode:
@@ -3127,6 +3127,9 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
31273127
goto out_unlock;
31283128
}
31293129

3130+
if (vif->type == NL80211_IFTYPE_STATION)
3131+
vif->bss_conf.he_support = sta->he_cap.has_he;
3132+
31303133
if (sta->tdls &&
31313134
(vif->p2p ||
31323135
iwl_mvm_tdls_sta_count(mvm, NULL) ==

drivers/net/wireless/intel/iwlwifi/mvm/sta.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ int iwl_mvm_sta_send_to_fw(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
196196
mpdu_dens = sta->ht_cap.ampdu_density;
197197
}
198198

199+
199200
if (sta->vht_cap.vht_supported) {
200201
agg_size = sta->vht_cap.cap &
201202
IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
@@ -205,6 +206,23 @@ int iwl_mvm_sta_send_to_fw(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
205206
agg_size = sta->ht_cap.ampdu_factor;
206207
}
207208

209+
/* D6.0 10.12.2 A-MPDU length limit rules
210+
* A STA indicates the maximum length of the A-MPDU preEOF padding
211+
* that it can receive in an HE PPDU in the Maximum A-MPDU Length
212+
* Exponent field in its HT Capabilities, VHT Capabilities,
213+
* and HE 6 GHz Band Capabilities elements (if present) and the
214+
* Maximum AMPDU Length Exponent Extension field in its HE
215+
* Capabilities element
216+
*/
217+
if (sta->he_cap.has_he)
218+
agg_size += u8_get_bits(sta->he_cap.he_cap_elem.mac_cap_info[3],
219+
IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK);
220+
221+
/* Limit to max A-MPDU supported by FW */
222+
if (agg_size > (STA_FLG_MAX_AGG_SIZE_4M >> STA_FLG_MAX_AGG_SIZE_SHIFT))
223+
agg_size = (STA_FLG_MAX_AGG_SIZE_4M >>
224+
STA_FLG_MAX_AGG_SIZE_SHIFT);
225+
208226
add_sta_cmd.station_flags |=
209227
cpu_to_le32(agg_size << STA_FLG_MAX_AGG_SIZE_SHIFT);
210228
add_sta_cmd.station_flags |=

drivers/net/wireless/intel/iwlwifi/mvm/time-event.c

Lines changed: 69 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -641,11 +641,32 @@ void iwl_mvm_protect_session(struct iwl_mvm *mvm,
641641
}
642642
}
643643

644+
static void iwl_mvm_cancel_session_protection(struct iwl_mvm *mvm,
645+
struct iwl_mvm_vif *mvmvif)
646+
{
647+
struct iwl_mvm_session_prot_cmd cmd = {
648+
.id_and_color =
649+
cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
650+
mvmvif->color)),
651+
.action = cpu_to_le32(FW_CTXT_ACTION_REMOVE),
652+
.conf_id = cpu_to_le32(mvmvif->time_event_data.id),
653+
};
654+
int ret;
655+
656+
ret = iwl_mvm_send_cmd_pdu(mvm, iwl_cmd_id(SESSION_PROTECTION_CMD,
657+
MAC_CONF_GROUP, 0),
658+
0, sizeof(cmd), &cmd);
659+
if (ret)
660+
IWL_ERR(mvm,
661+
"Couldn't send the SESSION_PROTECTION_CMD: %d\n", ret);
662+
}
663+
644664
static bool __iwl_mvm_remove_time_event(struct iwl_mvm *mvm,
645665
struct iwl_mvm_time_event_data *te_data,
646666
u32 *uid)
647667
{
648668
u32 id;
669+
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(te_data->vif);
649670

650671
/*
651672
* It is possible that by the time we got to this point the time
@@ -663,14 +684,29 @@ static bool __iwl_mvm_remove_time_event(struct iwl_mvm *mvm,
663684
iwl_mvm_te_clear_data(mvm, te_data);
664685
spin_unlock_bh(&mvm->time_event_lock);
665686

666-
/*
667-
* It is possible that by the time we try to remove it, the time event
668-
* has already ended and removed. In such a case there is no need to
669-
* send a removal command.
687+
/* When session protection is supported, the te_data->id field
688+
* is reused to save session protection's configuration.
670689
*/
671-
if (id == TE_MAX) {
672-
IWL_DEBUG_TE(mvm, "TE 0x%x has already ended\n", *uid);
690+
if (fw_has_capa(&mvm->fw->ucode_capa,
691+
IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD)) {
692+
if (mvmvif && id < SESSION_PROTECT_CONF_MAX_ID) {
693+
/* Session protection is still ongoing. Cancel it */
694+
iwl_mvm_cancel_session_protection(mvm, mvmvif);
695+
if (te_data->vif->type == NL80211_IFTYPE_P2P_DEVICE) {
696+
set_bit(IWL_MVM_STATUS_NEED_FLUSH_P2P, &mvm->status);
697+
iwl_mvm_roc_finished(mvm);
698+
}
699+
}
673700
return false;
701+
} else {
702+
/* It is possible that by the time we try to remove it, the
703+
* time event has already ended and removed. In such a case
704+
* there is no need to send a removal command.
705+
*/
706+
if (id == TE_MAX) {
707+
IWL_DEBUG_TE(mvm, "TE 0x%x has already ended\n", *uid);
708+
return false;
709+
}
674710
}
675711

676712
return true;
@@ -771,6 +807,7 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm,
771807
struct iwl_rx_packet *pkt = rxb_addr(rxb);
772808
struct iwl_mvm_session_prot_notif *notif = (void *)pkt->data;
773809
struct ieee80211_vif *vif;
810+
struct iwl_mvm_vif *mvmvif;
774811

775812
rcu_read_lock();
776813
vif = iwl_mvm_rcu_dereference_vif_id(mvm, le32_to_cpu(notif->mac_id),
@@ -779,9 +816,10 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm,
779816
if (!vif)
780817
goto out_unlock;
781818

819+
mvmvif = iwl_mvm_vif_from_mac80211(vif);
820+
782821
/* The vif is not a P2P_DEVICE, maintain its time_event_data */
783822
if (vif->type != NL80211_IFTYPE_P2P_DEVICE) {
784-
struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
785823
struct iwl_mvm_time_event_data *te_data =
786824
&mvmvif->time_event_data;
787825

@@ -816,10 +854,14 @@ void iwl_mvm_rx_session_protect_notif(struct iwl_mvm *mvm,
816854

817855
if (!le32_to_cpu(notif->status) || !le32_to_cpu(notif->start)) {
818856
/* End TE, notify mac80211 */
857+
mvmvif->time_event_data.id = SESSION_PROTECT_CONF_MAX_ID;
819858
ieee80211_remain_on_channel_expired(mvm->hw);
820859
set_bit(IWL_MVM_STATUS_NEED_FLUSH_P2P, &mvm->status);
821860
iwl_mvm_roc_finished(mvm);
822861
} else if (le32_to_cpu(notif->start)) {
862+
if (WARN_ON(mvmvif->time_event_data.id !=
863+
le32_to_cpu(notif->conf_id)))
864+
goto out_unlock;
823865
set_bit(IWL_MVM_STATUS_ROC_RUNNING, &mvm->status);
824866
ieee80211_ready_on_channel(mvm->hw); /* Start TE */
825867
}
@@ -845,20 +887,24 @@ iwl_mvm_start_p2p_roc_session_protection(struct iwl_mvm *mvm,
845887

846888
lockdep_assert_held(&mvm->mutex);
847889

890+
/* The time_event_data.id field is reused to save session
891+
* protection's configuration.
892+
*/
848893
switch (type) {
849894
case IEEE80211_ROC_TYPE_NORMAL:
850-
cmd.conf_id =
851-
cpu_to_le32(SESSION_PROTECT_CONF_P2P_DEVICE_DISCOV);
895+
mvmvif->time_event_data.id =
896+
SESSION_PROTECT_CONF_P2P_DEVICE_DISCOV;
852897
break;
853898
case IEEE80211_ROC_TYPE_MGMT_TX:
854-
cmd.conf_id =
855-
cpu_to_le32(SESSION_PROTECT_CONF_P2P_GO_NEGOTIATION);
899+
mvmvif->time_event_data.id =
900+
SESSION_PROTECT_CONF_P2P_GO_NEGOTIATION;
856901
break;
857902
default:
858903
WARN_ONCE(1, "Got an invalid ROC type\n");
859904
return -EINVAL;
860905
}
861906

907+
cmd.conf_id = cpu_to_le32(mvmvif->time_event_data.id);
862908
return iwl_mvm_send_cmd_pdu(mvm, iwl_cmd_id(SESSION_PROTECTION_CMD,
863909
MAC_CONF_GROUP, 0),
864910
0, sizeof(cmd), &cmd);
@@ -960,25 +1006,6 @@ void iwl_mvm_cleanup_roc_te(struct iwl_mvm *mvm)
9601006
__iwl_mvm_remove_time_event(mvm, te_data, &uid);
9611007
}
9621008

963-
static void iwl_mvm_cancel_session_protection(struct iwl_mvm *mvm,
964-
struct iwl_mvm_vif *mvmvif)
965-
{
966-
struct iwl_mvm_session_prot_cmd cmd = {
967-
.id_and_color =
968-
cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
969-
mvmvif->color)),
970-
.action = cpu_to_le32(FW_CTXT_ACTION_REMOVE),
971-
};
972-
int ret;
973-
974-
ret = iwl_mvm_send_cmd_pdu(mvm, iwl_cmd_id(SESSION_PROTECTION_CMD,
975-
MAC_CONF_GROUP, 0),
976-
0, sizeof(cmd), &cmd);
977-
if (ret)
978-
IWL_ERR(mvm,
979-
"Couldn't send the SESSION_PROTECTION_CMD: %d\n", ret);
980-
}
981-
9821009
void iwl_mvm_stop_roc(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
9831010
{
9841011
struct iwl_mvm_vif *mvmvif;
@@ -988,10 +1015,13 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
9881015
IWL_UCODE_TLV_CAPA_SESSION_PROT_CMD)) {
9891016
mvmvif = iwl_mvm_vif_from_mac80211(vif);
9901017

991-
iwl_mvm_cancel_session_protection(mvm, mvmvif);
992-
993-
if (vif->type == NL80211_IFTYPE_P2P_DEVICE)
1018+
if (vif->type == NL80211_IFTYPE_P2P_DEVICE) {
1019+
iwl_mvm_cancel_session_protection(mvm, mvmvif);
9941020
set_bit(IWL_MVM_STATUS_NEED_FLUSH_P2P, &mvm->status);
1021+
} else {
1022+
iwl_mvm_remove_aux_roc_te(mvm, mvmvif,
1023+
&mvmvif->time_event_data);
1024+
}
9951025

9961026
iwl_mvm_roc_finished(mvm);
9971027

@@ -1126,10 +1156,15 @@ void iwl_mvm_schedule_session_protection(struct iwl_mvm *mvm,
11261156
cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
11271157
mvmvif->color)),
11281158
.action = cpu_to_le32(FW_CTXT_ACTION_ADD),
1129-
.conf_id = cpu_to_le32(SESSION_PROTECT_CONF_ASSOC),
11301159
.duration_tu = cpu_to_le32(MSEC_TO_TU(duration)),
11311160
};
11321161

1162+
/* The time_event_data.id field is reused to save session
1163+
* protection's configuration.
1164+
*/
1165+
mvmvif->time_event_data.id = SESSION_PROTECT_CONF_ASSOC;
1166+
cmd.conf_id = cpu_to_le32(mvmvif->time_event_data.id);
1167+
11331168
lockdep_assert_held(&mvm->mutex);
11341169

11351170
spin_lock_bh(&mvm->time_event_lock);

drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,26 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans,
252252

253253
iwl_set_bit(trans, CSR_CTXT_INFO_BOOT_CTRL,
254254
CSR_AUTO_FUNC_BOOT_ENA);
255+
256+
if (trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_AX210) {
257+
/*
258+
* The firmware initializes this again later (to a smaller
259+
* value), but for the boot process initialize the LTR to
260+
* ~250 usec.
261+
*/
262+
u32 val = CSR_LTR_LONG_VAL_AD_NO_SNOOP_REQ |
263+
u32_encode_bits(CSR_LTR_LONG_VAL_AD_SCALE_USEC,
264+
CSR_LTR_LONG_VAL_AD_NO_SNOOP_SCALE) |
265+
u32_encode_bits(250,
266+
CSR_LTR_LONG_VAL_AD_NO_SNOOP_VAL) |
267+
CSR_LTR_LONG_VAL_AD_SNOOP_REQ |
268+
u32_encode_bits(CSR_LTR_LONG_VAL_AD_SCALE_USEC,
269+
CSR_LTR_LONG_VAL_AD_SNOOP_SCALE) |
270+
u32_encode_bits(250, CSR_LTR_LONG_VAL_AD_SNOOP_VAL);
271+
272+
iwl_write32(trans, CSR_LTR_LONG_VAL_AD, val);
273+
}
274+
255275
if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210)
256276
iwl_write_umac_prph(trans, UREG_CPU_INIT_RUN, 1);
257277
else

0 commit comments

Comments
 (0)