Commit graph

900422 commits

Author SHA1 Message Date
Lorenzo Bianconi
bae76a1eef mt76: mt76x02: fix coverage_class type
Fix coverage_class type in mt76x02_dev data structure since
coverage_class can be negative to enable dynack (just supported by
ath9k). Set 0 as minimum value for coverage_class

Fixes: 7bc04215a6 ("mt76: add driver code for MT76x2e")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Lorenzo Bianconi
175b4d58b9 mt76: mt7615: report firmware version using ethtool
Print fw_ver and build_date members of struct mt7615_fw_trailer
similarly to what appears in the output of 'dmesg' when the MCU firmware
is loaded.

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Pablo Greco
f53300fdaa mt76: mt7615: Fix build with older compilers
Some compilers (tested with 4.8.5 from CentOS 7) fail properly process
FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON.
Convert inline function to a macro.

Fixes commit bf92e76851 ("mt76: mt7615: add support for per-chain
signal strength reporting")
Reported in https://lkml.org/lkml/2019/9/21/146

Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Pablo Greco <pgreco@centosproject.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Lorenzo Bianconi
1a874afbbf dt-bindings: net: wireless: mt76: introduce big-endian property
Introduce big-endian property to specify mtd radio partition endianness

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Lorenzo Bianconi
b3c6d6388b mt76: eeprom: add support for big endian eeprom partition
mt76x0e users reported some devices (e.g TP-Link Archer VR200v) have
been flashed with big endian radio partition. Add the possibility to
specify eeprom endianness using big-endian dts property and in case
covert eeprom data in little endian

Tested-by: Kevin Schmidt <kevin.patrick.schmidt@googlemail.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Lorenzo Bianconi
00c29ab2f6 mt76: mt7603: reset STA_CCA counter setting the channel
Reset MT_MIB_STAT_CCA after channel switch since it is used to track busy
time starting from 'commit dcff8d4dc3 ("mt76: mt7603: switch to a
different counter for survey busy time")'

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Shayne Chen
eba571683b mt76: fix possible undetected invalid MAC address
Make sure the MAC address is checked before function returns.

If CONFIG_OF is set and the device node is null, the function will
return directly, and an invalid MAC address will not be checked.

Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Felix Fietkau
37a68e0015 mt76: disable bh in mt76_dma_rx_poll
Fixes potential RCU issues and avoids calling ieee80211_rx_napi with softirq
enabled.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Felix Fietkau
2703bafcdb mt76: fix rx dma ring descriptor state on reset
To avoid having the hardware potentially write to memory behind stale
descriptors, set the dma-done flag on all of them before cleaning up
allocated rx buffers

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Felix Fietkau
3e3848280f mt7615: replace sta_state callback with sta_add/sta_remove
The MT7615 firmware needs to know the association id at creation time,
which is unavailable during the transition from notexist to none in
.sta_state.
This can cause a number of issues, probably also breaking powersave
support.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Felix Fietkau
c3c25d09d4 mt76: mt7615: defer mcu initialization via workqueue
Loading the mcu firmware and waiting for it to boot takes a long time,
which adds a significant amount to the system boot time.
Fix this by running the mcu init from a workqueue and waiting for it to
complete before starting the phy or issuing mcu commands via debugfs

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:06:00 +01:00
Felix Fietkau
f0305d182c mt76: mt7615: update beacon contents on BSS_CHANGED_BEACON
Beacon changes need to be sent to the firmware, otherwise it will
keep sending stale data

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
0f2173f093 mt76: mt7615: add support for registering a second wiphy via debugfs
This is only used for testing for now. In the future it will be possible to
enable the second PHY through an proper API via device tree

Running:
 echo 1 > /sys/kernel/debug/ieee80211/phyX/mt76/dbdc

will register a second wiphy (and limit the primary one to 2 spatial streams).
The second wiphy will only be able to run on 5 GHz, while the primary one can
operate in both bands (if supported by the device).

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
9ce2f7fa94 mt76: mt7615: select the correct tx queue for frames sent to the second phy
Beacons and management frames need to explicitly select the alternate tx
queues in order to be sent out on the right phy

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
b0b5426ee7 mt76: mt7615: move radio/mac initialization to .start/stop callbacks
Run initialization per phy

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
ac3ef85ceb mt76: mt7615: initialize dbdc settings on interface add
Use the first two WMM slots for the primary phy and the second two for the
secondary phy.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
27ae721932 mt76: mt7615: add multiple wiphy support to the rx path
Program the RMAC CHFREQ registers to properly indicate the band that the
frames are received on.
Add some sanity checks to the programmed values, because the firmware
programs these registers differently

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
2bed2a3e90 mt76: mt7615: rework chainmask handling
Move chainmask to struct mt7615_phy and instead of needlessly making the
format similar to values for older chips, make it refer to the actual chain
bits used for the rx/tx path.
This is important for multiple wiphy support, where for a secondary phy,
antenna_mask will start at 0, and chainmask will start at the chain offset
(bit 2)

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:59 +01:00
Felix Fietkau
5dabdf71e9 mt76: mt7615: add multiple wiphy support to the dfs support code
There are two DFS detectors on the chip. When using 160 MHz channel bandwidth
(not supported in dual-wiphy mode), both are used. Otherwise, one detector is
used per wiphy.
Rework the code to start/stop them separately per phy and to indicate the
radar event on the right phy based on the detector index

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:58 +01:00
Felix Fietkau
d23cb96ccf mt76: mt7615: remove useless MT_HW_RDD0/1 enum
Writing 0/1 is shorter and just as clear

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:58 +01:00
Felix Fietkau
f89f58c8fb mt76: mt7615: add missing register init for dual-wiphy support
Initialize low-power beacon mode setting

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:58 +01:00
Felix Fietkau
d446a20f5b mt76: mt7615: add multiple wiphy support for smart carrier sense
Use per-phy radio stats and tuning registers

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:58 +01:00
Felix Fietkau
fdd2e57076 mt76: mt7615: add dual-phy support for mac80211 ops
Allows them to be used by a separately registered wiphy later

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:05:58 +01:00
Shayne Chen
c9619dfaf2 mt76: do not overwrite max_tx_fragments if it has been set
Prevent the overwriting of max_tx_fragments if it has already been set
in chip-specific init routine.

Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:10 +01:00
Felix Fietkau
30684481e6 mt76: move ampdu_ref from mt76_dev to driver struct
It is only used by the driver

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:10 +01:00
Felix Fietkau
c7d2d63109 mt76: add ext_phy field to struct mt76_wcid
Will be used to determine the phy from within the driver

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:10 +01:00
Felix Fietkau
c89d362541 mt76: add function for allocating an extra wiphy
Unlike the core phy, this will have extra allocated memory for a driver
private struct.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:09 +01:00
Felix Fietkau
a3d0103871 mt76: add priv pointer to struct mt76_phy
Will be used for per-phy driver private data

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:09 +01:00
Felix Fietkau
8af63fed33 mt76: add multiple wiphy support to mt76_get_min_avg_rssi
Allow tracking clients of both wiphys separately

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:09 +01:00
Felix Fietkau
beaaeb6b68 mt76: move txpower and antenna mask to struct mt76_phy
Adds multiple wiphy support to mt76_get_txpower

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:09 +01:00
Felix Fietkau
9e5f6dd7a5 mt76: move txpower_conf back to driver specific structs
Nothing in the core uses it

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:09 +01:00
Felix Fietkau
db7aa18862 mt76: move chainmask back to driver specific structs
Nothing in the core uses it

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:09 +01:00
Felix Fietkau
011849e0fc mt76: move state from struct mt76_dev to mt76_phy
Allows keeping per-wiphy state separate

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:08 +01:00
Felix Fietkau
5a95ca4122 mt76: keep a set of software tx queues per phy
Allows tracking tx scheduling separately per phy

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:08 +01:00
Felix Fietkau
96747a51fe mt76: move channel state to struct mt76_phy
Add support for an extra wiphy in mt76_set_channel and mt76_get_survey
This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:08 +01:00
Felix Fietkau
426e8e413c mt76: add support for an extra wiphy in mt76_sta_state()
This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:08 +01:00
Felix Fietkau
e394b5757b mt76: add support for an extra wiphy in the tx status path
This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 10:03:08 +01:00
Felix Fietkau
9fba6d077f mt76: add support for an extra wiphy in the main tx path
This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 07:49:59 +01:00
Felix Fietkau
bfc394dd65 mt76: add support for an extra wiphy in the rx path
This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 07:49:59 +01:00
Felix Fietkau
ac24dd3502 mt76: introduce struct mt76_phy
This is preparation for supporting multiple wiphys per device to support the
concurrent dual-band feature of MT7615D

On the first wiphy, hw->priv will point to struct mt76_dev, which contains a
struct mt76_phy at the start. For the secondary wiphy, hw->priv will point
to a mt76_phy encapsulated in a driver specific struct

To simplify access to struct mt76_phy members from drivers, the driver specific
device struct is changed to add a union of struct mt76_dev and struct mt76_phy
as the first element

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 07:49:59 +01:00
Felix Fietkau
e54432563b mt76: move initialization of some struct members to mt76_alloc_device
Reduces duplication and prepares for further rework

Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14 07:49:59 +01:00
Tzu-En Huang
aa7619a39a rtw88: Fix incorrect beamformee role setting
In associating and configuring beamformee, bfee->role is not
correctly set before rtw_chip_ops::config_bfee().
Fix it by setting it correctly.

Signed-off-by: Tzu-En Huang <tehuang@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Reviewed-by: Chris Chiu <chiu@endlessm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-13 12:07:25 +02:00
Joe Perches
d49f2c5063 rtw88: 8822[bc]: Make tables const, reduce data object size
Reduce the data size 2kb or 3kb by making tables const.
Add const to pointer declarations to make compilation work too.

(x86-64 defconfig)
$ size drivers/net/wireless/realtek/rtw88/rtw8822?.o*
   text	   data	    bss	    dec	    hex	filename
  25054	    672	      8	  25734	   6486	drivers/net/wireless/realtek/rtw88/rtw8822b.o.new
  23870	   1872	      8	  25750	   6496	drivers/net/wireless/realtek/rtw88/rtw8822b.o.old
  53646	    828	      0	  54474	   d4ca	drivers/net/wireless/realtek/rtw88/rtw8822c.o.new
  52846	   1652	      0	  54498	   d4e2	drivers/net/wireless/realtek/rtw88/rtw8822c.o.old

(x86-64 allyesconfig)
$ size drivers/net/wireless/realtek/rtw88/rtw8822?.o*
   text	   data	    bss	    dec	    hex	filename
  45811	   6280	    128	  52219	   cbfb	drivers/net/wireless/realtek/rtw88/rtw8822b.o.new
  44211	   7880	    128	  52219	   cbfb	drivers/net/wireless/realtek/rtw88/rtw8822b.o.old
 100195	   8128	      0	 108323	  1a723	drivers/net/wireless/realtek/rtw88/rtw8822c.o.new
  98947	   9376	      0	 108323	  1a723	drivers/net/wireless/realtek/rtw88/rtw8822c.o.old

Signed-off-by: Joe Perches <joe@perches.com>
Acked-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:22:33 +02:00
Yan-Hsuan Chuang
74c3d72cc1 rtw88: disable TX-AMSDU on 2.4G band
Some tests shows that using AMSDU to aggregate TCP ACKs to specific
APs will degrade the throughput on 2.4G band in 20MHz bandwidth
(< 10 Mbps, should be ~100 Mbps for 2x2). Also found that there's
barely no negative impact if we disable TX AMSDU on 2.4G to connect
to other APs. So it seems like we can just tell mac80211 to not to
aggregate MSDUs when transmitting on 2.4G band.

Note that we still can TX AMSDU on 5G band and benefit from it by
having 50 ~ 70 Mbps throughput improvement.

Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Reviewed-by: Chris Chiu <chiu@endlessm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:22:01 +02:00
Chien-Hsun Liao
9c714b7caa rtw88: 8822c: modify rf protection setting
According to some experiments, the original RF register protection
setting of 8822c cannot perfectly make sure that there is no hardware
PI write (direct) during direct write. Modify the setting so that the
hardware block of PI would be turned off via rtw8822c_rstb_3wire()
during the direct write, to avoid RF register racing.

Note that 8822b uses SIPI write (indirect), so 8822b does not
have such problem.

Signed-off-by: Chien-Hsun Liao <ben.liao@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Reviewed-by: Chris Chiu <chiu@endlessm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:20:40 +02:00
Ping-Ke Shih
40fb04b22f rtw88: Use secondary channel offset enumeration
The hardware value of secondary channel offset isn't very intuitive. This
commit adds enumeration, so we can easier to check the logic with the
suffix of enumeration name, likes _UPPER or _LOWER.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Reviewed-by: Chris Chiu <chiu@endlessm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:20:39 +02:00
Dan Carpenter
bafbc6f0b5 rtw88: Use kfree_skb() instead of kfree()
sk_buff structs need to be freed with kfree_skb(), not kfree().

Fixes: b6c12908a3 ("rtw88: Add wowlan net-detect support")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:19:51 +02:00
Martin Kepplinger
16bbc3eb83 rsi: fix null pointer dereference during rsi_shutdown()
Appearently the hw pointer can be NULL while the module is loaded and
in that case rsi_shutdown() crashes due to the unconditional dereference.

Signed-off-by: Martin Kepplinger <martin.kepplinger@puri.sm>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:19:14 +02:00
Tzu-En Huang
8299adec99 rtw88: 8822c: update power sequence to v16
Fix switching xtal mode leads to BT USB error issue.

Signed-off-by: Tzu-En Huang <tehuang@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:18:30 +02:00
Ping-Ke Shih
55cc84421c rtw88: add ciphers to suppress error message
Though hardware isn't implement CCMP-256, GCMP and GCMP-256, it's possible
to fallback to use software de-/en-cryption implemented by mac80211.

Without adding these chipers, kernel log will show something if we connect
to a WPA3 enterprise AP, likes
  wlan0: failed to set key (1, ff:ff:ff:ff:ff:ff) to hardware (-524)

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
2020-02-12 18:18:29 +02:00