Commit Graph
326 Commits
Author SHA1 Message Date
Lorenzo BianconiandFelix Fietkau e7883cdc0b mt76: mt7915: improve code readability in mt7915_mcu_sta_bfer_ht
Even if it is a not real issue, add missing brackets in
mt7915_mcu_sta_bfer_ht routine in order to improve code readability

Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-19 10:34:19 +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
Lorenzo BianconiandFelix Fietkau 440e2db8d5 mt76: mt7915: add twt_stats knob in debugfs
Introduce twt_stats knob in debugfs in order to dump established
agreements

Tested-by: Peter Chiu <[email protected]>
Tested-by: Evelyn Tsai <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 11:53:39 +02:00
Lorenzo BianconiandFelix Fietkau 2f9555a2f1 mt76: mt7915: enable twt responder capability
Enable TWT support in AP mode

Tested-by: Peter Chiu <[email protected]>
Tested-by: Evelyn Tsai <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 11:53:39 +02:00
Lorenzo BianconiandFelix Fietkau f44ca79c9a mt76: mt7915: introduce mt7915_mac_add_twt_setup routine
Introduce individual TWT support to mt7915 in AP mode.
Implement the two following mac80211 callbacks:
- add_twt_setup
- twt_teardown_request

Tested-by: Peter Chiu <[email protected]>
Tested-by: Evelyn Tsai <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 11:53:39 +02:00
Lorenzo BianconiandFelix Fietkau 9d49c611a2 mt76: mt7915: introduce mt7915_mcu_twt_agrt_update mcu command
This is a preliminary patch to add TWT support to mt7915

Tested-by: Peter Chiu <[email protected]>
Tested-by: Evelyn Tsai <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 11:53:39 +02:00
Lorenzo BianconiandFelix Fietkau 4c455e8b1a mt76: mt7915: introduce __mt7915_get_tsf routine
Introduce an unlocked verion of mt7915_get_tsf routine.
This is a preliminary patch to add TWT support to mt7915.

Tested-by: Peter Chiu <[email protected]>
Tested-by: Evelyn Tsai <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 11:53:39 +02:00
Sean WangandFelix Fietkau e8e2eae41f mt76: drop MCU header size from buffer size in __mt76_mcu_send_firmware
Each firmware piece with mt7915 and mt7921 do not have the MCU header to
reroute the packet to the internal RAM. So we do not need to consider the
MCU header size in __mt76_mcu_send_firmware.
Move the MCU header overhead calculation to mt76_mcu_send_firmware (for
older chipsets)

Fixes: e57b7901469f ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets")
Fixes: 1c099ab44727 ("mt76: mt7921: add MCU support")
Signed-off-by: Sean Wang <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 09:33:11 +02:00
Lorenzo BianconiandFelix Fietkau bcc8d9e03a mt76: remove mt76_wcid pointer from mt76_tx_status_check signature
Remove mt76_wcid pointer from mt76_tx_status_check signature since it is
always set to NULL

Tested-by: [email protected]
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 09:19:04 +02:00
Lorenzo BianconiandFelix Fietkau f143aedc1d mt76: introduce packet_id idr
Introduce per-wcid idr to manage packet id for txs. This allow fast idr
lookup and skb queueing at the same time.

Tested-by: [email protected]
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 09:19:04 +02:00
Ben GreearandFelix Fietkau 4727415017 mt76: mt7915: add mib counters to ethtool stats
This adds the new mib counters from last patch into ethtool
stats.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 08:03:30 +02:00
Ben GreearandFelix Fietkau 9752bf0643 mt76: mt7915: add more MIB registers
Add register definitions and read & accumulate them in
the mib polling logic.  Note that some registers should not
be read since firmware is already reading them.  If driver
reads those, they will be cleared-on-read, and so the firmware
stats will be incorrect.

For these 'do-not-read' stats, add them to the registers definition
so that other developers can be aware of these constraints, but do
not actually read them in the driver.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 08:03:30 +02:00
Ben GreearandFelix Fietkau f4dde5f765 mt76: mt7915: add tx mu/su counters to mib
These counters are clear-on-read, so we need to accumulate
them in the update_stats poll logic, and read the accumulated
values instead of directly doing register reads when reporting
to debugfs and ethtool stats.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 08:03:30 +02:00
Ben GreearandFelix Fietkau 1687189d68 mt76: mt7915: add some per-station tx stats to ethtool
The tx status callback is not called for every frame, so
those specific counters under-count, but at least they give
some idea of what is going on.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 08:03:30 +02:00
Ben GreearandFelix Fietkau d1d5e8cd3a mt76: mt7915: add tx stats gathered from tx-status callbacks
Add tx-mode (ofdma, ht, vht, HE) histogram,
tx-ru-idx histogram, and tx-bandwidth histogram.
Also add tx attempts and tx success counters.

All of this is per-station.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 08:03:30 +02:00
Ben GreearandFelix Fietkau c55dedcea2 mt76: mt7915: add ethtool stats support
This exposes some tx-path stats to the ethtool API, so that
ethtool -S wlanX provides some more useful info.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-10-11 08:03:30 +02:00
Lorenzo BianconiandFelix Fietkau 4dfff296ee mt76: mt7915: fix possible infinite loop release semaphore
Fix possible infinite loop in mt7915_load_patch if
mt7915_mcu_patch_sem_ctrl always returns an error.

Fixes: e57b7901469fc ("mt76: add mac80211 driver for MT7915 PCIe-based chipsets")
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 19:32:08 +02:00
Lorenzo BianconiandFelix Fietkau 0eacf41985 mt76: mt7915: honor all possible error conditions in mt7915_mcu_init()
Check all possible errors returned in mt7915_mcu_init routine.

Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 19:28:25 +02:00
Ben GreearandFelix Fietkau c8f0d1d81d mt76: mt7915: fix hwmon temp sensor mem use-after-free
Without this change, garbage is seen in the hwmon name and sensors output
for mt7915 is garbled. It appears that the hwmon logic does not make a
copy of the incoming string, but instead just copies a char* and expects
it to never go away.

Fixes: d6938251bb5b ("mt76: mt7915: add thermal sensor device support")
Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 19:22:14 +02:00
Ryder LeeandFelix Fietkau 80fe40c945 mt76: mt7915: enable configured beacon tx rate
The user is allowed to change beacon tx rate (HT/VHT/HE) from hostapd.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 19:11:08 +02:00
MeiChia ChiuandFelix Fietkau e17d730bf2 mt76: mt7915: add LED support [update to v3]
Initialize brightness_set and blink_set callbacks to enable LED support.
The base 0x7c000000 is MCU space so driver can't touch it, and should
map the LED base to 0x18000000 host's view.

Signed-off-by: MeiChia Chiu <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Money Wang <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 18:03:18 +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
Christophe JAILLETandFelix Fietkau 9dcfba3169 mt76: switch from 'pci_' to 'dma_' API
The wrappers in include/linux/pci-dma-compat.h should go away.

The patch has been generated with the coccinelle script below.

It has been compile tested.

@@
@@
-    PCI_DMA_BIDIRECTIONAL
+    DMA_BIDIRECTIONAL

@@
@@
-    PCI_DMA_TODEVICE
+    DMA_TO_DEVICE

@@
@@
-    PCI_DMA_FROMDEVICE
+    DMA_FROM_DEVICE

@@
@@
-    PCI_DMA_NONE
+    DMA_NONE

@@
expression e1, e2, e3;
@@
-    pci_alloc_consistent(e1, e2, e3)
+    dma_alloc_coherent(&e1->dev, e2, e3, GFP_)

@@
expression e1, e2, e3;
@@
-    pci_zalloc_consistent(e1, e2, e3)
+    dma_alloc_coherent(&e1->dev, e2, e3, GFP_)

@@
expression e1, e2, e3, e4;
@@
-    pci_free_consistent(e1, e2, e3, e4)
+    dma_free_coherent(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_map_single(e1, e2, e3, e4)
+    dma_map_single(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_unmap_single(e1, e2, e3, e4)
+    dma_unmap_single(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4, e5;
@@
-    pci_map_page(e1, e2, e3, e4, e5)
+    dma_map_page(&e1->dev, e2, e3, e4, e5)

@@
expression e1, e2, e3, e4;
@@
-    pci_unmap_page(e1, e2, e3, e4)
+    dma_unmap_page(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_map_sg(e1, e2, e3, e4)
+    dma_map_sg(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_unmap_sg(e1, e2, e3, e4)
+    dma_unmap_sg(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_single_for_cpu(e1, e2, e3, e4)
+    dma_sync_single_for_cpu(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_single_for_device(e1, e2, e3, e4)
+    dma_sync_single_for_device(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_sg_for_cpu(e1, e2, e3, e4)
+    dma_sync_sg_for_cpu(&e1->dev, e2, e3, e4)

@@
expression e1, e2, e3, e4;
@@
-    pci_dma_sync_sg_for_device(e1, e2, e3, e4)
+    dma_sync_sg_for_device(&e1->dev, e2, e3, e4)

@@
expression e1, e2;
@@
-    pci_dma_mapping_error(e1, e2)
+    dma_mapping_error(&e1->dev, e2)

@@
expression e1, e2;
@@
-    pci_set_dma_mask(e1, e2)
+    dma_set_mask(&e1->dev, e2)

@@
expression e1, e2;
@@
-    pci_set_consistent_dma_mask(e1, e2)
+    dma_set_coherent_mask(&e1->dev, e2)

Signed-off-by: Christophe JAILLET <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 17:42:12 +02:00
Ryder LeeandFelix Fietkau 62ffc31f4d mt76: mt7915: rename debugfs tx-queues
Rename "queues" to "tx-queues" to reflect its meaning.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 17:38:21 +02:00
Ryder LeeandFelix Fietkau 5a0f2382fc mt76: mt7915: rework debugfs queue info
Complete PSE/PLE queue statistics, including per-sta AC queue
information.

Co-developed-by: Sujuan Chen <[email protected]>
Signed-off-by: Sujuan Chen <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 17:36:42 +02:00
Lorenzo BianconiandFelix Fietkau ee01904628 mt76: mt7915: introduce bss coloring support
Introduce mcu APIs to configure bss coloring and to report bss coloring
collisions. Add support to report coloring countdown in beacon sent by
the device.

Co-developed-by: Ryder Lee <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Lorenzo Bianconi <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 17:00:11 +02:00
MeiChia ChiuandFelix Fietkau f7088ebe74 mt76: mt7915: add LED support
Initialize brightness_set and blink_set callbacks to enable LED support.

Signed-off-by: MeiChia Chiu <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Money Wang <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 16:57:49 +02:00
Ben GreearandFelix Fietkau 28da4baec7 mt76: mt7915: fix he_mcs capabilities for 160mhz
At 160, this chip can only do 2x2 NSS.  Fix the features
accordingly, verified it shows up properly in iw phy foo info
now.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 16:57:39 +02:00
Ben GreearandFelix Fietkau 8044311f5d mt76: mt7915: fix potential NPE in TXS processing
If skb is null, then don't try to dereference it.

Signed-off-by: Ben Greear <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-09-24 16:54:59 +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
Ryder LeeandFelix Fietkau e2ee9d0a33 mt76: use IEEE80211_OFFLOAD_ENCAP_ENABLED instead of MT_DRV_AMSDU_OFFLOAD
Drop MT_DRV_AMSDU_OFFLOAD after introducing IEEE80211_OFFLOAD_ENCAP_ENABLED
flag in mac80211. Driver now checks vif->offload_flags to know encap offload
status of each interface.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-27 19:08:21 +02:00
Ryder LeeandFelix Fietkau 0182a5b99a mt76: mt7915: update mac timing settings
1. EIFS has been divided into OFDM/CCK fields after 11ax generation.
2. For 5G/6G SIFS setting, hardware counts extra 6us for OFDM.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-16 13:50:52 +02:00
Ryder LeeandFelix Fietkau bc7ee7d7bd mt76: mt7915: add HE-LTF into fixed rate command
Add HE-LTF control.

Signed-off-by: Shayne Chen <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:54:37 +02:00
Ryder LeeandFelix Fietkau 4f48ba4b02 mt76: mt7915: checkpatch cleanup
Fix reasonable checkpatch warnings and clean up codes.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:54:37 +02:00
Ryder LeeandFelix Fietkau d04814366c mt76: add support for setting mcast rate
Mesh and ad-hoc interfaces allow users to set mcast rate through
NL80211_ATTR_MCAST_RATE, so rework mt76_default_basic_rate() to
adapt that.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:26:54 +02:00
Shayne ChenandFelix Fietkau 222847c3d5 mt76: mt7915: fix bit fields for HT rate idx
The bit fields of tx rate idx should be 6 bits, otherwise it might be
incorrect in HT mode.
For VHT/HE rates, only 4 bits are actually used by rate idx, the other
2 bits are used for other functions.

Fixes: c31d94af1843 ("mt76: mt7915: fix tx rate related fields in tx descriptor")
Signed-off-by: Shayne Chen <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:26:54 +02:00
Shayne ChenandFelix Fietkau e576ddb76d mt76: mt7915: switch proper tx arbiter mode in testmode
Switch proper tx arbiter mode during testmode tx to prevent from
entering the flow of normal tx in FW.
Also, testmode SU and MU tx need to use different arbiter mode.

Signed-off-by: Shayne Chen <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:26:54 +02:00
Shayne ChenandFelix Fietkau ac00fed412 mt76: mt7915: fix potential overflow of eeprom page index [update]
If total eeprom size is divisible by per-page size, the i in for loop
will exceed max page index, which happens in our newer chipset.

Fixes: 26f18380e6ca ("mt76: mt7915: add support for flash mode")
Signed-off-by: Bo Jiao <[email protected]>
Signed-off-by: Shayne Chen <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:26:46 +02:00
Ryder LeeandFelix Fietkau 16f18bab6b mt76: mt7915: send EAPOL frames at lowest rate
The firmware rate control may choose the high rate for EAPOL frames,
so checking IEEE80211_TX_CTL_USE_MINRATE to use the lowest TX rate.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:25:36 +02:00
Ryder LeeandFelix Fietkau 8f8ed44d02 mt76: mt7915: add control knobs for thermal throttling
With this patch, users can set the trigger/restore temperature for
thermal service according to their use cases.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-13 12:25:36 +02:00
Ryder LeeandFelix Fietkau 51d9eb3e6f mt76: mt7915: fix endianness warnings in mu radiotap
Fix sparse: sparse: restricted __le32 degrades to integer

Fixes: e63fadb87f ("mt76: mt7915: report HE MU radiotap")
Signed-off-by: Ryder Lee <[email protected]>
2021-08-13 11:48:33 +02:00
Ryder LeeandFelix Fietkau ca1b57e997 mt76: mt7915: add a missing HT flag for GI parsing
The previous commit missed a HT flag.

Fixes: 14b220c07188 ("mt76: mt7915: report tx rate directly from tx status")
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-08-03 22:45:04 +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
Ryder LeeandFelix Fietkau ddce309775 mt76: mt7915: remove mt7915_sta_stats
mt7915_sta_stats is no longer needed after tx rate reworking.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-07-14 15:54:43 +02:00
Ryder LeeandFelix Fietkau 8e2d383fbd mt76: mt7915: report tx rate directly from tx status
Report tx rate from tx status packets instead of receving periodic mcu
event. This improves flexibility, accuracy and AQL performance, and
simplifies code flow for better readability.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-07-14 15:54:43 +02:00
Ryder LeeandFelix Fietkau 87af8e5c72 mt76: mt7915: cleanup -Wunused-but-set-variable
Cleanup -Wunused-but-set-variable everywhere in driver.

Reported-by: kernel test robot <[email protected]>
Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-07-14 15:54:43 +02:00
Ryder LeeandFelix Fietkau f7da394679 mt76 mt7915: take RCU read lock when calling ieee80211_bss_get_elem()
As ieee80211_bss_get_elem() derefences an RCU to return ie, both
the call to this function and any operation on this variable need
protection by the RCU read lock.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-07-14 15:54:43 +02:00
Ryder LeeandFelix Fietkau f1f6569da4 mt76: mt7915: fix an off-by-one bound check
The bounds check on datalen is off-by-one, so fix it.

Signed-off-by: Ryder Lee <[email protected]>
Signed-off-by: Felix Fietkau <[email protected]>
2021-07-14 15:54:43 +02:00