Commit Graph
100 Commits
Author SHA1 Message Date
Felix Fietkau ec46d7486a sync with upstream
Signed-off-by: Felix Fietkau <[email protected]>
2022-12-10 13:11:04 +01:00
Felix Fietkau e7a9f7a044 wifi: mt76: mt7915: fix unused-but-set warning
Signed-off-by: Felix Fietkau <[email protected]>
2022-11-25 15:05:23 +01:00
Felix Fietkau 4bf2607362 wifi: mt76: fix dbdc number of spatial streams limit
Limit per-band streams to 2 instead of unconditionally dividing by 2

Fixes: 869815e5ef ("wifi: mt76: mt7915: Fix chainmask calculation on mt7915 DBDC")
Signed-off-by: Felix Fietkau <[email protected]>
2022-11-12 19:13:25 +01:00
Felix Fietkau a9ac73ed82 wifi: mt76: mt7615: increase eeprom size for mt7663
mt7663 efuse has 0x600 bytes instead of 0x400. Increase the size in order
to fix issues with incomplete calibration data

Signed-off-by: Felix Fietkau <[email protected]>
2022-11-11 19:55:31 +01:00
Felix Fietkau f5034abea8 mt76: mt7915: fix format string
Signed-off-by: Felix Fietkau <[email protected]>
2022-11-11 18:15:39 +01:00
Felix Fietkau 413a4bf395 mt76: mt7915: fix unused-but-set variable
Signed-off-by: Felix Fietkau <[email protected]>
2022-11-11 15:06:37 +01:00
Felix Fietkau 269df4b01f wifi: mt76: fix rx checksum offload on mt7615/mt7915/mt7921
Checking the relevant rxd bits for the checksum information only indicates
if the checksum verification was performed by the hardware and doesn't show
actual checksum errors. Checksum errors are indicated in the info field of
the DMA descriptor. Fix packets erroneously marked as CHECKSUM_UNNECESSARY
by checking the extra bits as well.
Those bits are only passed to the driver for MMIO devices at the moment, so
limit checksum offload to those.

Fixes: 2122dfbfd0bd ("mt76: mt7615: add rx checksum offload support")
Fixes: 94244d2ea503 ("mt76: mt7915: add rx checksum offload support")
Fixes: 0e75732764e8 ("mt76: mt7921: enable rx csum offload")
Signed-off-by: Felix Fietkau <[email protected]>
2022-10-05 15:05:43 +02:00
Felix Fietkau 2182de50a3 wifi: mt76: fix receiving LLC packets on mt7615/mt7915
When 802.3 decap offload is enabled, the hardware indicates header translation
failure, whenever either the LLC-SNAP header was not found, or a VLAN header
with an unregcognized tag is present.
In that case, the hardware inserts a 2-byte length fields after the MAC
addresses. For VLAN packets, this tag needs to be removed. However,
for 802.3 LLC packets, the length bytes should be preserved, since there
is no separate ethertype field in the data.
This fixes an issue where the length field was omitted for LLC frames, causing
them to be malformed after hardware decap.

Fixes: 1eeff0b4c1a6 ("mt76: mt7915: fix decap offload corner case with 4-addr VLAN frames")
Reported-by: Chad Monroe <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2022-10-05 15:04:31 +02:00
Felix Fietkau 8cc34bdc9e wifi: mt76: mt7921: set MT_DRV_AMSDU_OFFLOAD for USB/SDIO
Signed-off-by: Felix Fietkau <[email protected]>
2022-10-05 14:31:14 +02:00
Felix Fietkau 172d68b625 mt76: mt76x02: fix vht rate power array overrun
Signed-off-by: Felix Fietkau <[email protected]>
2022-10-01 17:01:59 +02:00
Felix Fietkau 3f27f6adb1 wifi: mt76: mt76x02: simplify struct mt76x02_rate_power
- remove stbc, because mt76x0 doesn't support it and mt76x2 uses the same
  values as HT/VHT
- reduce vht array to 2 elements, because VHT MCS0-7 are the same as HT

Signed-off-by: Felix Fietkau <[email protected]>
2022-09-28 11:29:46 +02:00
Felix Fietkau e49b6063fb wifi: mt76: move mt76_rate_power from core to mt76x02 driver code
Its layout and code is mt76x02 specific

Signed-off-by: Felix Fietkau <[email protected]>
2022-09-28 11:29:15 +02:00
Felix Fietkau d70546462b mt76: fix 5 GHz connection regression on mt76x0/mt76x2
Some users have reported being unable to connect to MT76x0 APs running mt76
after a commit enabling the VHT extneded NSS BW feature.
Fix this regression by ensuring that this feature only gets enabled on drivers
that support it

Fixes: d9fcfc1424aa ("mt76: enable the VHT extended NSS BW feature")
Signed-off-by: Felix Fietkau <[email protected]>
2022-09-06 22:39:56 +02:00
Felix Fietkau 5ec78e1ec4 wifi: mt76: fix reading current per-tid starting sequence number for aggregation
The code was accidentally shifting register values down by tid % 32 instead of
(tid * field_size) % 32.

Signed-off-by: Felix Fietkau <[email protected]>
2022-08-26 19:46:09 +02:00
Felix Fietkau 9485e3b470 mt76: remove q->qid
It is no longer used

Signed-off-by: Felix Fietkau <[email protected]>
2022-07-03 20:59:06 +02:00
Felix Fietkau 93e3fce916 mt76: pass original queue id from __mt76_tx_queue_skb to the driver
MT7615 and newer map multiple software tx queues to the hardware id

Signed-off-by: Felix Fietkau <[email protected]>
2022-07-03 17:52:25 +02:00
Felix Fietkau af406a2d1c mt76: do not use skb_set_queue_mapping for internal purposes
Previously the code used skb_set_queue_mapping for management or non-bufferable
powersave frames that need to be sent to a different hardware queue.
This can confuse AQL, which expects the value to remain the same until the tx
status report.
The only place that currently uses the altered skb queue mapping is the txwi
write function. Change the code to pass the hardware queue id as a function
parameter instead.

Signed-off-by: Felix Fietkau <[email protected]>
2022-07-02 15:57:02 +02:00
Felix Fietkau c07f459278 firmware: update mt7622 firmware to version 20220630
Signed-off-by: Felix Fietkau <[email protected]>
2022-07-01 18:42:47 +02:00
Felix Fietkau b6e865e2cc mt76: mt7615: fix throughput regression on DFS channels
For some reason, mt7615 reacts badly to repeatedly enabling/disabling the radar
detector without also switching the channel.
This results in very bad throughput on DFS channels, because
hw->conf.radar_enabled can get toggled a few times after CAC ends.
Fix this by always leaving the DFS detector enabled on DFS channels and instead
suppress unwanted detection events.

Fixes: 2c86f6752046 ("mt76: mt7615: fix/rewrite the dfs state handling logic")
Signed-off-by: Felix Fietkau <[email protected]>
2022-06-24 21:08:25 +02:00
Felix Fietkau f2edd340dd mt76: allow receiving frames with invalid CCMP PN via monitor interfaces
This can be useful for debugging

Signed-off-by: Felix Fietkau <[email protected]>
2022-06-23 14:21:20 +02:00
Felix Fietkau fd8211cf7c mt76: mt7921: sync with updated patch
Signed-off-by: Felix Fietkau <[email protected]>
2022-06-23 14:14:52 +02:00
Felix Fietkau ba39ed3b44 mt76: mt76x02: improve reliability of the beacon hang check
Increment the counter only when writing beacons to the hardware in order
to avoid triggering restarts if beacons are disabled.
Additionally, avoid resetting the MAC if stopping it failed

Signed-off-by: Felix Fietkau <[email protected]>
2022-06-23 14:10:22 +02:00
Felix Fietkau 4fb991f2c9 mt76: mt7615: add sta_rec with EXTRA_INFO_NEW for the first time only
Set EXTRA_INFO_NEW for the first time only to prevent adding the same
starec entry, otherwise the entry might be removed in fw.

Signed-off-by: Felix Fietkau <[email protected]>
2022-06-22 14:11:23 +02:00
Felix Fietkau e522834390 mt76: mt7915: disable UL MU-MIMO for mt7915
After initially establishing a connection, it can produce multi-second latency
spikes and tx hangs when pushing traffic.
It should work better for MT7916 and MT7986, so leave it enabled there

Signed-off-by: Felix Fietkau <[email protected]>
2022-06-21 20:35:36 +02:00
Felix Fietkau 1d8af168e8 mt76: mt7615: add missing bh-disable around rx napi enable/schedule
napi_schedule() can call __raise_softirq_irqoff(), which can perform softirq
handling, so it must not be called in a pure process context with BH enabled.

Signed-off-by: Felix Fietkau <[email protected]>
2022-06-02 21:45:37 +02:00
Felix Fietkau 28b19d2cc5 mt76: mt7915: add missing bh-disable around tx napi enable/schedule
napi_schedule() can call __raise_softirq_irqoff(), which can perform softirq
handling, so it must not be called in a pure process context with BH enabled.

Signed-off-by: Felix Fietkau <[email protected]>
2022-06-02 21:45:33 +02:00
Felix Fietkau a666d5637b mt76: fix tx status related use-after-free race on station removal
There is a small race window where ongoing tx activity can lead to a skb
getting added to the status tracking idr after that idr has already been
cleaned up, which will keep the wcid linked in the status poll list.
Fix this by only adding status skbs if the wcid pointer is still assigned
in dev->wcid, which gets cleared early by mt76_sta_pre_rcu_remove

Fixes: bd1e3e7b693c ("mt76: introduce packet_id idr")
Tested-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2022-04-23 07:12:47 +02:00
Felix Fietkau eecbb49920 mt76: fix encap offload ethernet type check
The driver needs to check if the format is 802.2 vs 802.3 in order to set
a tx descriptor flag. skb->protocol can't be used, since it may not be properly
initialized for packets coming in from a packet socket.
Fix misdetection by checking the ethertype from the skb data instead

Reported-by: Thibaut VARÈNE <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2022-04-20 14:32:21 +02:00
Felix Fietkau f50672518b mt76: do not attempt to reorder received 802.3 packets without agg session
Fixes potential latency / packet drop issues in cases where a BA session has
not (yet) been established.

Fixes: e195dad14115 ("mt76: add support for 802.3 rx frames")
Signed-off-by: Felix Fietkau <[email protected]>
2022-04-20 13:21:45 +02:00
Felix Fietkau d4937118ec mt76: fix rx reordering with non explicit / psmp ack policy
When the QoS ack policy was set to non explicit / psmp ack, frames are treated
as not being part of a BA session, which causes extra latency on reordering.
Fix this by only bypassing reordering for packets with no-ack policy

Signed-off-by: Felix Fietkau <[email protected]>
2022-04-20 12:27:38 +02:00
Felix Fietkau 87a962e060 mt76: mt7915: add Wireless Ethernet Dispatch support
This is used to support hardware flow offloading from Ethernet to WLAN

Signed-off-by: Felix Fietkau <[email protected]>
2022-04-07 11:56:24 +02:00
Felix Fietkau b8c842daa0 mt76: make number of tokens configurable dynamically
Preparation for adding Wireless Ethernet Dispatch support

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-29 13:13:27 +02:00
Felix Fietkau e0bc736d56 mt76: add support for overriding the device used for DMA mapping
WED support requires using non-coherent DMA, whereas the PCI device might
be configured for coherent DMA.
The WED driver will take care of changing the PCI HIF coherent IO setting
on attach.

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-29 13:13:27 +02:00
Felix Fietkau 5beb87716e mt76: dma: add wrapper macro for accessing queue registers
Preparation for adding indirection used for Wireless Ethernet Dispatch support

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-29 13:13:24 +02:00
Felix Fietkau eed44048ca Revert "mt76: dma: reduce lock contention in mt76_dma_tx_cleanup"
This reverts commit 2e51013b38.
2022-03-29 13:09:02 +02:00
Felix Fietkau 376ea8152b mt76: mt7915: add missing chunk from wfsys reset fix
Signed-off-by: Felix Fietkau <[email protected]>
2022-03-28 10:21:42 +02:00
Felix Fietkau 6b1efcd729 mt76: mt7915: fix wfsys reset regression
Reset needs to be performed before hif2 initialization

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-27 21:18:58 +02:00
Felix Fietkau 5b7dd093c8 mt76: fix use-after-free by removing a non-RCU wcid pointer
Fixes an issue caught by KASAN about use-after-free in mt76_txq_schedule
by protecting mtxq->wcid with rcu_lock between mt76_txq_schedule and
sta_info_[alloc, free].

[18853.876689] ==================================================================
[18853.876751] BUG: KASAN: use-after-free in mt76_txq_schedule+0x204/0xaf8 [mt76]
[18853.876773] Read of size 8 at addr ffffffaf989a2138 by task mt76-tx phy0/883
[18853.876786]
[18853.876810] CPU: 5 PID: 883 Comm: mt76-tx phy0 Not tainted 5.10.100-fix-510-56778d365941-kasan #5 0b01fbbcf41a530f52043508fec2e31a4215

[18853.876840] Call trace:
[18853.876861]  dump_backtrace+0x0/0x3ec
[18853.876878]  show_stack+0x20/0x2c
[18853.876899]  dump_stack+0x11c/0x1ac
[18853.876918]  print_address_description+0x74/0x514
[18853.876934]  kasan_report+0x134/0x174
[18853.876948]  __asan_report_load8_noabort+0x44/0x50
[18853.876976]  mt76_txq_schedule+0x204/0xaf8 [mt76 074e03e4640e97fe7405ee1fab547b81c4fa45d2]
[18853.877002]  mt76_txq_schedule_all+0x2c/0x48 [mt76 074e03e4640e97fe7405ee1fab547b81c4fa45d2]
[18853.877030]  mt7921_tx_worker+0xa0/0x1cc [mt7921_common f0875ebac9d7b4754e1010549e7db50fbd90a047]
[18853.877054]  __mt76_worker_fn+0x190/0x22c [mt76 074e03e4640e97fe7405ee1fab547b81c4fa45d2]
[18853.877071]  kthread+0x2f8/0x3b8
[18853.877087]  ret_from_fork+0x10/0x30
[18853.877098]
[18853.877112] Allocated by task 941:
[18853.877131]  kasan_save_stack+0x38/0x68
[18853.877147]  __kasan_kmalloc+0xd4/0xfc
[18853.877163]  kasan_kmalloc+0x10/0x1c
[18853.877177]  __kmalloc+0x264/0x3c4
[18853.877294]  sta_info_alloc+0x460/0xf88 [mac80211]
[18853.877410]  ieee80211_prep_connection+0x204/0x1ee0 [mac80211]
[18853.877523]  ieee80211_mgd_auth+0x6c4/0xa4c [mac80211]
[18853.877635]  ieee80211_auth+0x20/0x2c [mac80211]
[18853.877733]  rdev_auth+0x7c/0x438 [cfg80211]
[18853.877826]  cfg80211_mlme_auth+0x26c/0x390 [cfg80211]
[18853.877919]  nl80211_authenticate+0x6d4/0x904 [cfg80211]
[18853.877938]  genl_rcv_msg+0x748/0x93c
[18853.877954]  netlink_rcv_skb+0x160/0x2a8
[18853.877969]  genl_rcv+0x3c/0x54
[18853.877985]  netlink_unicast_kernel+0x104/0x1ec
[18853.877999]  netlink_unicast+0x178/0x268
[18853.878015]  netlink_sendmsg+0x3cc/0x5f0
[18853.878030]  sock_sendmsg+0xb4/0xd8
[18853.878043]  ____sys_sendmsg+0x2f8/0x53c
[18853.878058]  ___sys_sendmsg+0xe8/0x150
[18853.878071]  __sys_sendmsg+0xc4/0x1f4
[18853.878087]  __arm64_compat_sys_sendmsg+0x88/0x9c
[18853.878101]  el0_svc_common+0x1b4/0x390
[18853.878115]  do_el0_svc_compat+0x8c/0xdc
[18853.878131]  el0_svc_compat+0x10/0x1c
[18853.878146]  el0_sync_compat_handler+0xa8/0xcc
[18853.878161]  el0_sync_compat+0x188/0x1c0
[18853.878171]
[18853.878183] Freed by task 10927:
[18853.878200]  kasan_save_stack+0x38/0x68
[18853.878215]  kasan_set_track+0x28/0x3c
[18853.878228]  kasan_set_free_info+0x24/0x48
[18853.878244]  __kasan_slab_free+0x11c/0x154
[18853.878259]  kasan_slab_free+0x14/0x24
[18853.878273]  slab_free_freelist_hook+0xac/0x1b0
[18853.878287]  kfree+0x104/0x390
[18853.878402]  sta_info_free+0x198/0x210 [mac80211]
[18853.878515]  __sta_info_destroy_part2+0x230/0x2d4 [mac80211]
[18853.878628]  __sta_info_flush+0x300/0x37c [mac80211]
[18853.878740]  ieee80211_set_disassoc+0x2cc/0xa7c [mac80211]
[18853.878851]  ieee80211_mgd_deauth+0x4a4/0x10a0 [mac80211]
[18853.878962]  ieee80211_deauth+0x20/0x2c [mac80211]
[18853.879057]  rdev_deauth+0x7c/0x438 [cfg80211]
[18853.879150]  cfg80211_mlme_deauth+0x274/0x414 [cfg80211]
[18853.879243]  cfg80211_mlme_down+0xe4/0x118 [cfg80211]
[18853.879335]  cfg80211_disconnect+0x218/0x2d8 [cfg80211]
[18853.879427]  __cfg80211_leave+0x17c/0x240 [cfg80211]
[18853.879519]  cfg80211_leave+0x3c/0x58 [cfg80211]
[18853.879611]  wiphy_suspend+0xdc/0x200 [cfg80211]
[18853.879628]  dpm_run_callback+0x58/0x408
[18853.879642]  __device_suspend+0x4cc/0x864
[18853.879658]  async_suspend+0x34/0xf4
[18853.879673]  async_run_entry_fn+0xe0/0x37c
[18853.879689]  process_one_work+0x508/0xb98
[18853.879702]  worker_thread+0x7f4/0xcd4
[18853.879717]  kthread+0x2f8/0x3b8
[18853.879731]  ret_from_fork+0x10/0x30
[18853.879741]
[18853.879757] The buggy address belongs to the object at ffffffaf989a2000
[18853.879757]  which belongs to the cache kmalloc-8k of size 8192
[18853.879774] The buggy address is located 312 bytes inside of
[18853.879774]  8192-byte region [ffffffaf989a2000, ffffffaf989a4000)
[18853.879787] The buggy address belongs to the page:
[18853.879807] page:000000004bda2a59 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1d89a0
[18853.879823] head:000000004bda2a59 order:3 compound_mapcount:0 compound_pincount:0
[18853.879839] flags: 0x8000000000010200(slab|head)
[18853.879857] raw: 8000000000010200 ffffffffbc89e208 ffffffffb7fb5208 ffffffaec000cc80
[18853.879873] raw: 0000000000000000 0000000000010001 00000001ffffffff 0000000000000000
[18853.879885] page dumped because: kasan: bad access detected
[18853.879896]
[18853.879907] Memory state around the buggy address:
[18853.879922]  ffffffaf989a2000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[18853.879935]  ffffffaf989a2080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[18853.879948] >ffffffaf989a2100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[18853.879961]                                         ^
[18853.879973]  ffffffaf989a2180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[18853.879986]  ffffffaf989a2200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[18853.879998] ==================================================================

Cc: [email protected]
Reported-by: Sean Wang <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2022-03-25 22:08:28 +01:00
Felix Fietkau 36c23a4a84 mt76: mt7921: accept rx frames with non-standard VHT MCS10-11
The hardware receives them properly, they should not be dropped

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-25 21:15:15 +01:00
Felix Fietkau c2bb44cab5 mt76: mt7915: accept rx frames with non-standard VHT MCS10-11
The hardware receives them properly, they should not be dropped

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-25 21:14:29 +01:00
Felix Fietkau c96fbb86f7 mt76: mt7915: rework hardware/phy initialization
Clean up and fix error paths in mt7915_register_device
Initialize second DBDC tx queue in mt7915_dma_init

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-25 20:35:20 +01:00
Felix Fietkau 2e51013b38 mt76: dma: reduce lock contention in mt76_dma_tx_cleanup
Instead of taking q->lock for every single cleaned up frame, batch up to
16 cleaned up frames before taking it.

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-19 23:24:57 +01:00
Felix Fietkau 0b1deb9292 mt76: dma: use kzalloc instead of devm_kzalloc for txwi
dma unmap is already needed for cleanup anyway, so we don't need the extra
tracking and can save a bit of memory here

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-19 23:10:29 +01:00
Felix Fietkau a7805e4e1d mt76: reduce tx queue lock hold time
- call txq dequeue without holding txq lock (locking handled by mac80211)
- disable bh around tx queue schedule

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-19 21:44:53 +01:00
Felix Fietkau 104dd5cb0a mt76: mt7915: fix DBDC default band selection on MT7915D
This code was accidentally dropped while adding 6 GHz support

Signed-off-by: Felix Fietkau <[email protected]>
2022-03-19 08:08:29 +01:00
Felix Fietkau 64c74dc93f mt76: fix dfs state issue with 160 MHz channels
When operating on a mix of DFS and non-DFS channels, the driver only checks
the CAC status of the control channel. This causes beacons/tx to fail if the
control channel is on a non-DFS channel.
Fix this by calling cfg80211_reg_can_beacon to determine the DFS status of
all affected channels

Signed-off-by: Felix Fietkau <[email protected]>
2022-02-24 14:34:35 +01:00
Felix Fietkau 4f43095428 mt76: mt7915: only use u32_get_bits with constant value
Fixes invalid unresolved symbols when built on ARM and avoids unnecessary
divisions

Signed-off-by: Felix Fietkau <[email protected]>
2022-02-23 11:33:24 +01:00
Felix Fietkau 378b638c70 mt76: mt7915: fix unused variable with testmode disabled
Signed-off-by: Felix Fietkau <[email protected]>
2022-02-23 11:31:05 +01:00
Felix Fietkau 7fa5229a42 mt76: improve signal strength reporting
Instead of just taking the maximum per-chain signal strength values,
add an approximation for the sum of the combined signal.
This should more accurately reflect the real signal strength, especially
if the per-chain signal strength values are close to each other

Signed-off-by: Felix Fietkau <[email protected]>
2022-02-04 20:13:03 +01:00
Felix Fietkau 822e1135e7 mt76: mt76x02: use mt76_phy_dfs_state to determine radar detector state
Fixes corner cases in enabling/disabling detector

Signed-off-by: Felix Fietkau <[email protected]>
2022-02-03 13:43:35 +01:00
Felix Fietkau e0f9479bf8 mt76: mt7615: fix/rewrite the dfs state handling logic
Copy the updated logic from mt7915 to to fix issues in handling DFS radar
detector states

Signed-off-by: Felix Fietkau <[email protected]>
2022-02-03 13:39:57 +01:00
Felix Fietkau fae295af31 mt76: mt7915: fix/rewrite the dfs state handling logic
Client mode on DFS channels was broken, because the old code was activating
the DFS detector on radar channels while leaving it in CAC state.
This was caused by making the decision based on the channel radar flag,
instead of hw->conf.radar_enabled.
In order to properly deal with the various corner cases, rip out the state
handling code and replace it with something that's much easier to reason
about.

Signed-off-by: Felix Fietkau <[email protected]>
2022-02-03 13:37:57 +01:00
Felix Fietkau 9b2ac62d6f mt76: mt76x02: improve tx hang detection
Instead of checking if any queue has not made progress since the last run,
only trigger hang detection if one of the queues has not made any progress
in 10 subsequent runs. This should reduce false positive firmware restarts

Signed-off-by: Felix Fietkau <[email protected]>
2022-01-31 15:05:57 +01:00
Felix Fietkau 20d1fed838 mt76x02: improve mac error check/reset reliability
On AP mode devices, check beacon tx counters to detect MAC errors.
When an error is detected, stop the MAC before resetting it

Signed-off-by: Felix Fietkau <[email protected]>
2022-01-31 12:16:26 +01:00
Felix Fietkau 553200cf63 firmware: update mt7662 firmware to version 2.3
Signed-off-by: Felix Fietkau <[email protected]>
2022-01-30 20:35:15 +01:00
Felix Fietkau d11bd7bd83 tools: add support for sending firmware debug data via udp
Signed-off-by: Felix Fietkau <[email protected]>
2022-01-06 10:42:46 +01:00
Felix Fietkau 976ea38797 mt76: mt7915: add support for passing chip/firmware debug data to user space
This can be used to assist in debugging driver or firmware tx/rx issues.
The data is streamed to user space using a relay file in debugfs

Signed-off-by: Felix Fietkau <[email protected]>
2022-01-06 10:42:46 +01:00
Felix Fietkau d42590d8fc mt76: make cipher in struct mt76_vif u8 instead of enum
The correct enum type is from mt76_connac

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-30 10:13:39 +01:00
Felix Fietkau 36e1577cb3 mt76: mt7915: update bss_info with cipher after setting the group key
In some cases, the WA firmware needs to know if encryption is used, in order
to set the protection bit of packets

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-29 12:21:46 +01:00
Felix Fietkau 288e7443e3 mt76: mt7615: update bss_info with cipher after setting the group key
In some cases, the WA firmware needs to know if encryption is used, in order
to set the protection bit of packets

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-29 12:21:02 +01:00
Felix Fietkau 018f98abba mt76: connac: add support for passing the cipher field in bss_info
Initialize it from a field in struct mt76_vif

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-29 12:19:41 +01:00
Felix Fietkau 854c8d076a mt76: mt7915: move pci specific code back to pci.c
This avoids the need to check for the device type in mmio.c and makes the code
cleaner

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-22 23:00:52 +01:00
Felix Fietkau 3edb87cdf1 mt7915: formatting change to sync with upstream
Signed-off-by: Felix Fietkau <[email protected]>
2021-12-20 10:56:31 +01:00
Felix Fietkau c9a4146404 sync with upstream
Signed-off-by: Felix Fietkau <[email protected]>
2021-12-15 20:35:30 +01:00
Felix Fietkau d57dadb8c8 Revert "mt76: only kick tx queue if frames were queued"
This reverts commit fea36e0207.
When reaching that point, a frame has always been enqueued and we need
to kick the queue

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-14 20:07:45 +01:00
Felix Fietkau fea36e0207 mt76: only kick tx queue if frames were queued
Slightly reduces unnecessary device register accesses

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-04 12:44:50 +01:00
Felix Fietkau 047b9a9e78 mt76: mt7615: in debugfs queue stats, skip wmm index 3 on mt7663
The hardware only supports WMM index 0-2 and registers for index 3 return
bogus data.

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-03 20:09:05 +01:00
Felix Fietkau f703084f31 mt76: mt7915: process txfree and txstatus without allocating skbs
Reduces pressure on the memory allocator

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-03 18:02:47 +01:00
Felix Fietkau 833b9d7fcf mt76: allow drivers to drop rx packets early
This can be used to free received events without allocating an extra skb

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-03 18:01:54 +01:00
Felix Fietkau 678071ef70 mt76: mt7615: clear mcu error interrupt status on mt7663
Should fix issues with error recovery

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-03 10:50:10 +01:00
Felix Fietkau 71e08471ab mt76: eeprom: fix return code on corrected bit-flips
Ensure that the return code is 0 when data was read successfully

Signed-off-by: Felix Fietkau <[email protected]>
2021-12-02 17:21:47 +01:00
Felix Fietkau 688e30c7d8 firmware: update mt7921 firmware to version 20211014
Signed-off-by: Felix Fietkau <[email protected]>
2021-11-29 15:08:10 +01:00
Felix Fietkau 094b3d8008 firmware: update mt7663 rebb firmware to 20200904171623
Signed-off-by: Felix Fietkau <[email protected]>
2021-11-28 22:19:44 +01:00
Felix Fietkau 77fc6c439a mt76: mt7603: improve reliability of tx powersave filtering
Leave more time to abort transmissions (which could happen at low CCK rates)
Only warn if the last filter command is stuck

Signed-off-by: Felix Fietkau <[email protected]>
2021-11-25 20:13:29 +01:00
Felix Fietkau 7998a41d13 mt76: clear sta powersave flag after notifying driver
If the driver has configured the hardware to drop packets for a sta that was
in powersave mode, then clearing the flag too early opens up a small race
window during which packets could be dropped on wakeup

Signed-off-by: Felix Fietkau <[email protected]>
2021-11-25 13:42:34 +01:00
Felix Fietkau 1911486414 mt76: mt7915: improve wmm index allocation
Typically all AP interfaces on a PHY will share the same WMM settings, while
sta/mesh interfaces will usually inherit the settings from a remote device.
In order minimize the likelihood of conflicting WMM settings, make all AP
interfaces share one slot, and all non-AP interfaces another one.

Signed-off-by: Felix Fietkau <[email protected]>
2021-11-25 10:50:11 +01:00
Felix Fietkau a6451fea5a mt76: mt7615: improve wmm index allocation
Typically all AP interfaces on a PHY will share the same WMM settings, while
sta/mesh interfaces will usually inherit the settings from a remote device.
In order minimize the likelihood of conflicting WMM settings, make all AP
interfaces share one slot, and all non-AP interfaces another one.

This also fixes running multiple AP interfaces on MT7613, which only has 3
WMM slots.

Signed-off-by: Felix Fietkau <[email protected]>
2021-11-25 10:50:11 +01:00
Felix Fietkau 67f93aa9a2 mt76: mt7615: fix decap offload corner case with 4-addr VLAN frames
With 4-address mode VLAN frames, an internal header translation step fails,
leaving behind an extra 2-byte length field that must be reomved by the driver.
Add a check for this condition to fix receiving such packets

Signed-off-by: Felix Fietkau <[email protected]>
2021-11-23 11:49:04 +01:00
Felix Fietkau f0a5b1118f mt76: mt7915: fix decap offload corner case with 4-addr VLAN frames
With 4-address mode VLAN frames, an internal header translation step fails,
leaving behind an extra 2-byte length field that must be reomved by the driver.
Add a check for this condition to fix receiving such packets

Signed-off-by: Felix Fietkau <[email protected]>
2021-11-23 11:47:30 +01:00
Felix Fietkau f6bde7ba82 mt76: connac: fix unresolved symbols when CONFIG_PM is unset
mt76_connac_mcu_reg_* functions are always needed by connac based drivers

Fixes: 87f9bf24ea84 ("mt76: connac: move mcu reg access utility routines in mt76_connac_lib module")
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-23 13:24:17 +02:00
Felix Fietkau ebf5b23365 mt7615/mt7915: fix hwmon device name
the "-" character is rejected by the subsystem for device names

Signed-off-by: Felix Fietkau <[email protected]>
2021-10-12 15:21:02 +02:00
Felix Fietkau 1af0242d12 mt76: mt7915: replace a 64 bit divsion with a call to div_u64_rem
Fixes a build error on 32 bit targets

Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 21:52:21 +02:00
Felix Fietkau 5560b08f8e mt76: do not access 802.11 header in ccmp check for 802.3 rx skbs
Avoids false positive on detecting frags or encrypted mgmt frames

Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 12:07:49 +02:00
Felix Fietkau 8ee6446075 mt76: disable BH around napi_schedule() calls
napi_schedule() can call __raise_softirq_irqoff(), which can perform softirq
handling, so it must not be called in a pure process context with BH enabled.

Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 17:54:42 +02:00
Felix Fietkau 56b842b72a mt76: mt7915: fix wmm index on DBDC cards
WMM index range needs to be split between both PHYs if a second PHY exists.
The condition for that was accidentally written as checking if the vif PHY
is the secondary one

Signed-off-by: Felix Fietkau <[email protected]>
2021-09-08 17:46:50 +02:00
Felix Fietkau fa6504aceb Revert "mt76: mt7915: checkpatch cleanup"
Will be replaced by updated commits later

This reverts commit 4f48ba4b02.
2021-09-08 16:14:22 +02:00
Felix Fietkau 74dedf9352 mt76: mt7615: fix skb use-after-free on mac reset
When clearing all existing pending tx slots, mt76_tx_complete_skb needs to
be used to free the skbs, to ensure that they are cleared from the status
list as well.

Cc: [email protected]
Signed-off-by: Felix Fietkau <[email protected]>
2021-07-21 07:25:05 +02:00
Felix Fietkau bbebea7d6d Revert "mt76: fix mt76_rates for the multiple devices"
Fix rate values for MT7915 and MT7921

This reverts commit ca64a36908.

Signed-off-by: Felix Fietkau <[email protected]>
2021-07-15 20:09:39 +02:00
Felix Fietkau 7f5ea5e2fd mt7915: check return code of sysfs_create_link
Signed-off-by: Felix Fietkau <[email protected]>
2021-06-18 19:20:50 +02:00
Felix Fietkau 624c681ef0 mt76: mt7921: enable VHT BFee capability
Enables VHT beamformee functionality

Signed-off-by: Leon Yen <[email protected]>
Signed-off-by: Deren Wu <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-06-10 13:26:14 +02:00
Felix Fietkau 22b690334c mt76: mt7915: do not fail if the cooling device could not be registered
Signed-off-by: Felix Fietkau <[email protected]>
2021-06-06 09:39:18 +02:00
Felix Fietkau d1652e8af9 Revert "mt76: connac: do not schedule wake_work if the runtime-pm is disabled"
This reverts commit 53d915a23b.
Superseded by "mt76: mt7615: do not set MT76_STATE_PM at bootstrap"

Signed-off-by: Felix Fietkau <[email protected]>
2021-06-02 08:30:26 +02:00
Felix Fietkau 10548aef1f mt76: mt7915: improve error recovery reliability
- Remove no-op code for queue lock/unlock, which is no longer needed
- Set a missing DMA flag
- Wait for full completion of error recovery before restarting tx
- Schedule IRQ tasklet to ensure that IRQ mask gets written

Signed-off-by: Felix Fietkau <[email protected]>
2021-06-01 23:06:50 +02:00
Felix Fietkau 757b93f4b1 mt76: mt7921: remove leftover 80+80 HE capability
Fixes interop issues with some APs that disable HE Tx if this is present

Signed-off-by: Felix Fietkau <[email protected]>
2021-05-28 13:56:23 +02:00
Felix Fietkau bddc1db76d mt76: mt7915: drop the use of repeater entries for station interfaces
There are firmware or hardware issues, which are currently causing tx hangs
when attempting to use these interfaces

Signed-off-by: Felix Fietkau <[email protected]>
2021-05-25 18:45:09 +02:00
Felix Fietkau 9d736545bb mt76: mt7915: disable pre-calibration support for now
It needs more testing and more bugfixes until it is ready

Signed-off-by: Felix Fietkau <[email protected]>
2021-05-15 09:09:22 +02:00
Felix Fietkau 28b162366d mt76: fix calling mt76_get_of_eeprom with an offset for pre-cal data
The device tree partition offset needs to be added to the function argument,
instead of overwriting it.
Fixes an issue where wrong EEPROM data was sent to the firmware as
pre-calibration data on MT7915.

Fixes: 495184ac91bb ("mt76: mt7915: add support for applying pre-calibration data")
Signed-off-by: Felix Fietkau <[email protected]>
2021-05-15 08:07:54 +02:00
Felix Fietkau 3511fd4303 mt76: validate rx A-MSDU subframes
Mitigate A-MSDU injection attacks (CVE-2020-24588) by detecting if the
destination address of a subframe equals an RFC1042 (i.e., LLC/SNAP)
header, and if so dropping the complete A-MSDU frame. This mitigates
known attacks, although new (unknown) aggregation-based attacks may
remain possible.

This defense works because in A-MSDU aggregation injection attacks, a
normal encrypted Wi-Fi frame is turned into an A-MSDU frame. This means
the first 6 bytes of the first A-MSDU subframe correspond to an RFC1042
header. In other words, the destination MAC address of the first A-MSDU
subframe contains the start of an RFC1042 header during an aggregation
attack. We can detect this and thereby prevent this specific attack.
For details, see Section 7.2 of "Fragment and Forge: Breaking Wi-Fi
Through Frame Aggregation and Fragmentation".

Signed-off-by: Felix Fietkau <[email protected]>
2021-05-13 09:00:04 +02:00
Felix Fietkau c7dd54a22e mt76: connac: skip wtbl reset on sta disconnect
It should only be done on adding entries

Signed-off-by: Felix Fietkau <[email protected]>
2021-05-10 14:10:54 +02:00
Felix Fietkau a9bc4d94b7 mt76: intialize tx queue entry wcid to 0xffff by default
Avoid accidentally mapping them to WCID 0 on completion

Signed-off-by: Felix Fietkau <[email protected]>
2021-05-09 22:49:09 +02:00