summaryrefslogtreecommitdiffstats
path: root/drivers
Commit message (Collapse)AuthorAgeFilesLines
* mt76: remove qid argument to drv->tx_complete_skbFelix Fietkau2020-09-2414-28/+14
| | | | | | It is not needed Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: unify queue tx cleanup codeFelix Fietkau2020-09-245-67/+41
| | | | | | Cleanup and preparation for changing tx scheduling behavior Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: sdio: fix use of q->head and q->tailFelix Fietkau2020-09-242-18/+18
| | | | | | | Their use is reversed compared to DMA. The order for DMA makes more sense, so let's use that Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: usb: fix use of q->head and q->tailFelix Fietkau2020-09-241-15/+15
| | | | | | | Their use is reversed compared to DMA. The order for DMA makes more sense, so let's use that Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7603: check for single-stream EEPROM configurationFelix Fietkau2020-09-243-7/+18
| | | | | | | | Some devices using MT7628 or MT7603 have only one antenna chain connected. Detect these using the EEPROM rx/tx path settings Reported-by: Qin Wei <me@vonger.cn> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: add memory barrier to DMA queue kickFelix Fietkau2020-09-241-0/+1
| | | | | | | Ensure that descriptor memory has been fully written before letting the hardware read it Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: add support for accessing mapped registers via bus opsFelix Fietkau2020-09-242-0/+109
| | | | | | Makes it possible to read/write them via debugfs, similar to mt7615/7603 Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: significantly reduce interrupt loadFelix Fietkau2020-09-244-25/+20
| | | | | | | | | | | | On 7615 and newer, DMA completion only triggers unmap, but not free of queued skbs, since pointers to packets are queued internally. Because of that, there is no need to process the main data queue immediately on DMA completion. To improve performance, mask out the DMA data queue completion interrupt and process the queue only when we receive a txfree event. This brings the number of interrupts under load down to a small fraction. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: significantly reduce interrupt loadFelix Fietkau2020-09-244-8/+18
| | | | | | | | | | | | On 7615 and newer, DMA completion only triggers unmap, but not free of queued skbs, since pointers to packets are queued internally. Because of that, there is no need to process the main data queue immediately on DMA completion. To improve performance, mask out the DMA data queue completion interrupt and process the queue only when we receive a txfree event. This brings the number of interrupts under load down to a small fraction. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: schedule tx tasklet in mt7915_mac_tx_freeFelix Fietkau2020-09-242-2/+1
| | | | | | | The previous scheduling round may have been limited by AQL. More frames might be available after the tx free run. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: dma: update q->queued immediately on cleanupFelix Fietkau2020-09-241-25/+14
| | | | | | | Tx cleanup and tx enqueuing can run in parallel. In order to avoid queue starvation issues under load, update q->queued immediately. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: optimize mt7915_mac_sta_pollFelix Fietkau2020-09-243-5/+10
| | | | | | | | | | Since DMA completion does not imply tx completion, it makes more sense to poll for airtime from mt7915_mac_tx_free. Reduce the runtime of the function by moving all items from dev->sta_poll_list to a local list once and process any stations that were added afterwards on the next run Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: fix reading airtime statisticsFelix Fietkau2020-09-241-11/+14
| | | | | | | - change the WTBL LMAC access function to set the mapping window only once - use ac * 2 as offset, since each AC has separate words for rx and tx Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7663u: fix dma header initializationLorenzo Bianconi2020-09-242-3/+8
| | | | | | | | | Fix length field corruption in usb dma header introduced adding sdio support Fixes: 75b10f0cbd0b ("mt76: mt76u: add mt76_skb_adjust_pad utility routine") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: fix a possible NULL pointer dereference in mt76_testmode_dumpLorenzo Bianconi2020-09-241-2/+6
| | | | | | | | | Fix a possible NULL pointer dereference in mt76_testmode_dump() since nla_nest_start returns NULL in case of error Fixes: f0efa8621550e ("mt76: add API for testmode support") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: fix a possible NULL pointer dereference in mt7615_pm_wake_workLorenzo Bianconi2020-09-241-1/+2
| | | | | | | | | Initialize wcid to global_wcid if msta is NULL in mt7615_pm_wake_work routine since wcid will be dereferenced running mt76_tx() Fixes: 2b8cdfb28d340 ("mt76: mt7615: wake device before pushing frames in mt7615_tx") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: fix possible memory leak in mt7615_tm_set_tx_powerLorenzo Bianconi2020-09-241-2/+4
| | | | | | | | | | Fix a memory leak in mt7615_tm_set_tx_power routine if mt7615_eeprom_get_target_power_index fails. Moreover do not account req_header twice in mcu skb allocation. Fixes: 4f0bce1c88882 ("mt76: mt7615: implement testmode support") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7663s: fix unable to handle kernel paging requestSean Wang2020-09-243-9/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use buffer allocated with kmalloc instead of with stack to fix kernel crash due to Unable to handle kernel paging request at virtual address ffffffc0095cbce8. [ 156.977349] Unable to handle kernel paging request at virtual address ffffffc0095cbce8 [ 156.985270] Mem abort info: [ 156.988059] ESR = 0x96000045 [ 156.991104] Exception class = DABT (current EL), IL = 32 bits [ 156.997013] SET = 0, FnV = 0 [ 157.000057] EA = 0, S1PTW = 0 [ 157.003190] Data abort info: [ 157.006061] ISV = 0, ISS = 0x00000045 [ 157.009887] CM = 0, WnR = 1 [ 157.012850] swapper pgtable: 4k pages, 39-bit VAs, pgdp = 0000000042adcba2 [ 157.019715] [ffffffc0095cbce8] pgd=0000000000000000, pud=0000000000000000 [ 157.026499] Internal error: Oops: 96000045 [#1] PREEMPT SMP [ 157.032065] Modules linked in: mt7663s mt7663_usb_sdio_common mt7615_common ... [ 157.073007] Process CompositorTileW (pid: 1625, stack limit = 0x000000003f2389fc) [ 157.080484] CPU: 0 PID: 1625 Comm: CompositorTileW Not tainted 4.19.137 #36 [ 157.092219] pstate: 80000085 (Nzcv daIf -PAN -UAO) [ 157.097012] pc : __memcpy+0xc0/0x180 [ 157.100585] lr : swiotlb_tbl_unmap_single+0x84/0x14c [ 157.105540] sp : ffffff8008003cb0 [ 157.108845] x29: ffffff8008003cb0 x28: ffffff9c1a211f60 [ 157.114149] x27: ffffff9c19ecc018 x26: 0000000000001000 [ 157.119452] x25: ffffff9c1a378000 x24: 0000000000000001 [ 157.124755] x23: ffffff9c1a378000 x22: 00000000000001ff [ 157.130058] x21: 0000000000000000 x20: 00000000fbefe800 [ 157.135360] x19: 0000000000000070 x18: 0000000000000000 [ 157.140663] x17: 0000000000000000 x16: 0000000000000000 [ 157.145965] x15: 0000000000000000 x14: 0000000000000000 [ 157.151267] x13: 0000000000000000 x12: 000000000000000d [ 157.156569] x11: 000000000000000c x10: 0000000a7befe800 [ 157.161873] x9 : fffffff680000000 x8 : 0000000000000000 [ 157.167175] x7 : 0000000100000003 x6 : ffffffc0095cbce8 [ 157.172479] x5 : 0000000000000000 x4 : 0000000000000000 [ 157.177781] x3 : 0000000000000002 x2 : fffffffffffffff0 [ 157.183085] x1 : ffffffca7befe810 x0 : ffffffc0095cbce8 [ 157.188389] Call trace: [ 157.190832] __memcpy+0xc0/0x180 [ 157.194053] swiotlb_unmap_sg_attrs+0xa8/0xb0 [ 157.198406] __swiotlb_unmap_sg_attrs+0x8c/0xa4 [ 157.202931] msdc_unprepare_data+0x6c/0x84 [ 157.207019] msdc_request_done+0x58/0x98 [ 157.210934] msdc_data_xfer_done+0x1a8/0x1d0 [ 157.215195] msdc_irq+0x12c/0x17c [ 157.218505] __handle_irq_event_percpu+0xd8/0x298 [ 157.223202] handle_irq_event+0x60/0xdc [ 157.227031] handle_fasteoi_irq+0xa4/0x1d4 [ 157.231120] __handle_domain_irq+0x84/0xc4 [ 157.235210] gic_handle_irq+0x124/0x1a4 [ 157.239038] el0_irq_naked+0x4c/0x54 [ 157.242608] Code: 14000028 f1020042 5400024a a8c12027 (a88120c7) [ 157.248693] ---[ end trace 28b8090135b0a2e1 ]--- [ 157.265589] Kernel panic - not syncing: Fatal exception in interrupt [ 157.271944] SMP: stopping secondary CPUs [ 157.275865] Kernel Offset: 0x1c10e00000 from 0xffffff8008000000 [ 157.281779] CPU features: 0x0,2188200c [ 157.285519] Memory Limit: none Fixes: a66cbdd6573d ("mt76: mt7615: introduce mt7663s support") Co-developed-by: YN Chen <YN.Chen@mediatek.com> Signed-off-by: YN Chen <YN.Chen@mediatek.com> Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7663s: fix resume failureSean Wang2020-09-241-0/+2
| | | | | | | | | | | | | | MT7663s have to rely on MMC_PM_KEEP_POWER in pm_flags for to avoid SDIO power is being shut off. To fix sdio access failure like "mt7663s mmc1:0001:1: sdio write failed: -22" for the first sdio command to access the bus in the resume handler. Fixes: a66cbdd6573d ("mt76: mt7615: introduce mt7663s support") Co-developed-by: YN Chen <YN.Chen@mediatek.com> Signed-off-by: YN Chen <YN.Chen@mediatek.com> Signed-off-by: Sean Wang <sean.wang@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7663s: use NULL instead of 0 in sdio codeLorenzo Bianconi2020-09-242-4/+4
| | | | | | | | | | | | | | | | | Fix the following sparse warnings in mt7663s driver: drivers/net/wireless/mediatek/mt76/mt7615/sdio_mcu.c:78:62: warning: Using plain integer as NULL pointer drivers/net/wireless/mediatek/mt76/mt7615/sdio_mcu.c:110:62: warning: Using plain integer as NULL pointer drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c:229:64: warning: Using plain integer as NULL pointer drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c:263:64: warning: Using plain integer as NULL pointer Fixes: a66cbdd6573d ("mt76: mt7615: introduce mt7663s support") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: release mutex in mt7615_reset_test_setLorenzo Bianconi2020-09-241-3/+2
| | | | | | | | | | | | | | Reduce scope of mutex_acquire/mutex_release in mt7615_reset_test_set routine in order to fix the following static checker warning: drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c:179 mt7615_reset_test_set() warn: inconsistent returns 'dev->mt76.mutex'. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Fixes: ea4906c4be49 ("mt76: mt7615: wake device before accessing regmap in debugfs") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: add Tx A-MSDU offloading supportRyder Lee2020-09-246-5/+89
| | | | | | | | | | | | This disables the software A-MSDU aggregation in mac80211 and enables hardware offloading Suggested-by: Yiwei Chung <yiwei.chung@mediatek.com> Suggested-by: YF Luo <yf.luo@mediatek.com> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Co-developed-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: add missing flags in WMM parameter settingsFelix Fietkau2020-09-241-0/+1
| | | | | | Indicate the filled parameter to the firmware Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: simplify aggregation session checkFelix Fietkau2020-09-243-52/+19
| | | | | | | Use the txwi data as primary source information to avoid touching skb data Use bitfield instead of state variable + spinlock Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: remove mtxq->agg_ssn assignmentFelix Fietkau2020-09-241-1/+0
| | | | | | It is not used anywhere for this driver Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: move mt76_check_agg_ssn to driver tx_prepare callsFelix Fietkau2020-09-244-25/+18
| | | | | | | mt7615 and newer drivers do not need this, since they use sequence number offload Moving this code also reduces the number of callsites to make it easier to review Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: enable offloading of sequence number assignmentFelix Fietkau2020-09-242-17/+33
| | | | | | Preparation for supporting more offload features Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: increase tx retry countFelix Fietkau2020-09-241-1/+1
| | | | | | Set it to 15 to match reference driver Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: clean up station stats polling and rate control updateFelix Fietkau2020-09-245-39/+88
| | | | | | | | | | | | | | | | Queueing a per-sta work item from the tx free path can become very expensive under load. This work is only supposed to pull rate control stats every second and deal with rate control changes. Additionally, the rate control update code was wrong, because it was confusing bit masks and bit numbers in test_bit. Fix this by introducing a dedicated device work item for rate control updates, and by polling station stats from the phy mac work. Stations requiring polling or rate control updates are added to lists protected by dev->sta_poll_lock. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: do not do any work in napi poll after calling napi_complete_done()Felix Fietkau2020-09-241-6/+3
| | | | | | | Fixes a race condition where multiple tx cleanup or sta poll tasks could run in parallel. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: do not do any work in napi poll after calling napi_complete_done()Felix Fietkau2020-09-241-5/+3
| | | | | | Fixes a race condition where multiple tx cleanup tasks could run in parallel Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt76x02: clean up and fix interrupt masking in the irq handlerFelix Fietkau2020-09-241-14/+11
| | | | | | | | | Only clear unmasked interrupts. If an interrupt is temporarily masked, its pending events need to be processed later, even if another interrupt happened in the mean time. Disable interrupts in one call before scheduling Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: only clear unmasked interrupts in irq taskletFelix Fietkau2020-09-241-11/+8
| | | | | | | If an interrupt is temporarily masked, its pending events need to be processed later, even if another interrupt happened in the mean time. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: clean up and fix interrupt masking in the irq handlerFelix Fietkau2020-09-241-14/+11
| | | | | | | | Only clear unmasked interrupts. If an interrupt is temporarily masked, its pending events need to be processed later, even if another interrupt happened in the mean time. Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: set interrupt mask register to 0 before requesting irqFelix Fietkau2020-09-246-0/+12
| | | | | | Avoids spurious interrupts in case the hardware was running already Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: fix double DMA unmap of the first buffer on 7615/7915Felix Fietkau2020-09-244-2/+12
| | | | | | | | | A small part of the first skb buffer is passed to the firmware for parsing via DMA, while the full buffer is passed as part of the TXP. Avoid calling DMA unmap on the first part (with a different length than map) Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: fix crash on tx rate report for invalid stationsFelix Fietkau2020-09-241-0/+3
| | | | | | Check wcid RCU pointer before using it Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7915: enable U-APSD on AP sideRyder Lee2020-09-242-2/+49
| | | | | | | Enable U-APSD support for AP interface. Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt76s: get rid of unused variableLorenzo Bianconi2020-09-241-2/+0
| | | | | | | Remove unused state variable in mt76_sdio structure Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt76s: move tx/rx processing in 2 separate worksLorenzo Bianconi2020-09-244-29/+46
| | | | | | | | In order to maximize parallelism, split status work in tx status work and rx net work Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt76s: move status processing in txrx wqLorenzo Bianconi2020-09-243-41/+25
| | | | | | | | As it has been done for tx and rx processing, move tx/rx status processing into mt76s_txrx_wq workqueue Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7663s: move rx processing in txrx wqLorenzo Bianconi2020-09-245-29/+57
| | | | | | | | Move rx processing to mt76s_txrx_wq in order to minimize the interval when the sdio bus is locked during rx Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt76s: move tx processing in a dedicated wqLorenzo Bianconi2020-09-245-48/+39
| | | | | | | | Introduce mt76s_txrx_wq workqueue and move tx processing from kthread to a dedicated work. This is preliminary patch to improve mt7663s throughput Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt76s: fix oom in mt76s_tx_queue_skb_rawLorenzo Bianconi2020-09-241-4/+9
| | | | | | | Free the mcu skb in case of error in mt76s_tx_queue_skb_raw routine Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: reschedule runtime-pm receiving a tx interruptLorenzo Bianconi2020-09-243-0/+7
| | | | | | | | Reschedule runtime-pm after receiving a tx interrupt. Update runtime-pm last activity before injecting packets Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: do not inject packets if MT76_STATE_PM is setLorenzo Bianconi2020-09-241-2/+4
| | | | | | | | | Do not tx packets in mt76_txq_send_burst() or mt76_txq_schedule_list() if the device is in runtime-pm Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: hold mt76 lock queueing wd in mt7615_queue_key_updateLorenzo Bianconi2020-09-241-0/+3
| | | | | | | | | | wq queue is always updated holding mt76 spinlock. Grab mt76 lock in mt7615_queue_key_update() before putting a new element at the end of the queue. Fixes: eb99cc95c3b65 ("mt76: mt7615: introduce mt7663u support") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7663s: move drv_own/fw_own in mt7615_mcu_opsLorenzo Bianconi2020-09-243-7/+15
| | | | | | | | | Initialize set_drv_ctrl and set_fw_ctrl function pointers in mt7663s_mcu_init. This is a preliminary patch to enable runtime-pm for mt7663s chipset. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: move drv_own/fw_own in mt7615_mcu_opsLorenzo Bianconi2020-09-244-83/+89
| | | | | | | | | Introduce set_drv_ctrl and set_fw_ctrl function pointers in mt7615_mcu_ops data structure. This is a preliminary patch to enable runtime-pm for non-pci chipsets Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
* mt76: mt7615: register ext_phy if DBDC is detectedShayne Chen2020-09-243-0/+7
| | | | | | | | MT_EE_WIFI_CONF field can be used to detect if the chipset is MT7615D. Thus, add support to automatically register ext_phy if DBDC is detected. Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>