Skip to content

Commit d2a158d

Browse files
author
Kalle Valo
committed
Merge tag 'mt76-for-kvalo-2023-04-18' of https://github.com/nbd168/wireless
mt76 patches for 6.4 - fixes - connac code unification - mt7921 p2p support - mt7996 mesh a-msdu support - mt7996 eht support - mt7996 coredump support
2 parents 6c6d62a + 3b522ca commit d2a158d

72 files changed

Lines changed: 1710 additions & 1028 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Documentation/devicetree/bindings/net/wireless/mediatek,mt76.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ properties:
111111
$ref: /schemas/leds/common.yaml#
112112
additionalProperties: false
113113
properties:
114+
led-active-low:
115+
description:
116+
LED is enabled with ground signal.
117+
type: boolean
118+
114119
led-sources:
115120
maxItems: 1
116121

drivers/net/wireless/mediatek/mt76/dma.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -402,8 +402,8 @@ mt76_dma_get_buf(struct mt76_dev *dev, struct mt76_queue *q, int idx,
402402
*info = le32_to_cpu(desc->info);
403403

404404
if (mt76_queue_is_wed_rx(q)) {
405-
u32 token = FIELD_GET(MT_DMA_CTL_TOKEN,
406-
le32_to_cpu(desc->buf1));
405+
u32 buf1 = le32_to_cpu(desc->buf1);
406+
u32 token = FIELD_GET(MT_DMA_CTL_TOKEN, buf1);
407407
struct mt76_txwi_cache *t = mt76_rx_token_release(dev, token);
408408

409409
if (!t)
@@ -424,6 +424,8 @@ mt76_dma_get_buf(struct mt76_dev *dev, struct mt76_queue *q, int idx,
424424

425425
*drop = !!(ctrl & (MT_DMA_CTL_TO_HOST_A |
426426
MT_DMA_CTL_DROP));
427+
428+
*drop |= !!(buf1 & MT_DMA_CTL_WO_DROP);
427429
}
428430
} else {
429431
buf = e->buf;
@@ -576,7 +578,9 @@ mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
576578
free_skb:
577579
status.skb = tx_info.skb;
578580
hw = mt76_tx_status_get_hw(dev, tx_info.skb);
581+
spin_lock_bh(&dev->rx_lock);
579582
ieee80211_tx_status_ext(hw, &status);
583+
spin_unlock_bh(&dev->rx_lock);
580584

581585
return ret;
582586
}
@@ -849,7 +853,7 @@ mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
849853
!(dev->drv->rx_check(dev, data, len)))
850854
goto free_frag;
851855

852-
skb = build_skb(data, q->buf_size);
856+
skb = napi_build_skb(data, q->buf_size);
853857
if (!skb)
854858
goto free_frag;
855859

drivers/net/wireless/mediatek/mt76/dma.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#define MT_DMA_CTL_TO_HOST_A BIT(12)
2020
#define MT_DMA_CTL_DROP BIT(14)
2121
#define MT_DMA_CTL_TOKEN GENMASK(31, 16)
22+
#define MT_DMA_CTL_WO_DROP BIT(8)
2223

2324
#define MT_DMA_PPE_CPU_REASON GENMASK(15, 11)
2425
#define MT_DMA_PPE_ENTRY GENMASK(30, 16)

drivers/net/wireless/mediatek/mt76/mac80211.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,8 @@ mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)
418418
SET_IEEE80211_DEV(hw, dev->dev);
419419
SET_IEEE80211_PERM_ADDR(hw, phy->macaddr);
420420

421-
wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
421+
wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR |
422+
NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE;
422423
wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH |
423424
WIPHY_FLAG_SUPPORTS_TDLS |
424425
WIPHY_FLAG_AP_UAPSD;
@@ -1066,9 +1067,14 @@ mt76_rx_convert(struct mt76_dev *dev, struct sk_buff *skb,
10661067
status->enc_flags = mstat.enc_flags;
10671068
status->encoding = mstat.encoding;
10681069
status->bw = mstat.bw;
1069-
status->he_ru = mstat.he_ru;
1070-
status->he_gi = mstat.he_gi;
1071-
status->he_dcm = mstat.he_dcm;
1070+
if (status->encoding == RX_ENC_EHT) {
1071+
status->eht.ru = mstat.eht.ru;
1072+
status->eht.gi = mstat.eht.gi;
1073+
} else {
1074+
status->he_ru = mstat.he_ru;
1075+
status->he_gi = mstat.he_gi;
1076+
status->he_dcm = mstat.he_dcm;
1077+
}
10721078
status->rate_idx = mstat.rate_idx;
10731079
status->nss = mstat.nss;
10741080
status->band = mstat.band;
@@ -1303,7 +1309,8 @@ mt76_check_sta(struct mt76_dev *dev, struct sk_buff *skb)
13031309
if (ps)
13041310
set_bit(MT_WCID_FLAG_PS, &wcid->flags);
13051311

1306-
dev->drv->sta_ps(dev, sta, ps);
1312+
if (dev->drv->sta_ps)
1313+
dev->drv->sta_ps(dev, sta, ps);
13071314

13081315
if (!ps)
13091316
clear_bit(MT_WCID_FLAG_PS, &wcid->flags);

drivers/net/wireless/mediatek/mt76/mt76.h

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -621,12 +621,22 @@ struct mt76_rx_status {
621621
u16 freq;
622622
u32 flag;
623623
u8 enc_flags;
624-
u8 encoding:2, bw:3, he_ru:3;
625-
u8 he_gi:2, he_dcm:1;
624+
u8 encoding:3, bw:4;
625+
union {
626+
struct {
627+
u8 he_ru:3;
628+
u8 he_gi:2;
629+
u8 he_dcm:1;
630+
};
631+
struct {
632+
u8 ru:4;
633+
u8 gi:2;
634+
} eht;
635+
};
636+
626637
u8 amsdu:1, first_amsdu:1, last_amsdu:1;
627638
u8 rate_idx;
628-
u8 nss;
629-
u8 band;
639+
u8 nss:5, band:3;
630640
s8 signal;
631641
u8 chains;
632642
s8 chain_signal[IEEE80211_MAX_CHAINS];
@@ -778,6 +788,7 @@ struct mt76_dev {
778788
spinlock_t rx_lock;
779789
struct napi_struct napi[__MT_RXQ_MAX];
780790
struct sk_buff_head rx_skb[__MT_RXQ_MAX];
791+
struct tasklet_struct irq_tasklet;
781792

782793
struct list_head txwi_cache;
783794
struct list_head rxwi_cache;

drivers/net/wireless/mediatek/mt76/mt7603/mac.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1279,8 +1279,11 @@ void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data)
12791279
if (wcidx >= MT7603_WTBL_STA || !sta)
12801280
goto out;
12811281

1282-
if (mt7603_fill_txs(dev, msta, &info, txs_data))
1282+
if (mt7603_fill_txs(dev, msta, &info, txs_data)) {
1283+
spin_lock_bh(&dev->mt76.rx_lock);
12831284
ieee80211_tx_status_noskb(mt76_hw(dev), sta, &info);
1285+
spin_unlock_bh(&dev->mt76.rx_lock);
1286+
}
12841287

12851288
out:
12861289
rcu_read_unlock();

drivers/net/wireless/mediatek/mt76/mt7615/dma.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget)
7676

7777
mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
7878
if (napi_complete(napi))
79-
mt7615_irq_enable(dev, mt7615_tx_mcu_int_mask(dev));
79+
mt76_connac_irq_enable(&dev->mt76,
80+
mt7615_tx_mcu_int_mask(dev));
8081

8182
mt76_connac_pm_unref(&dev->mphy, &dev->pm);
8283

@@ -297,7 +298,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
297298
else
298299
mask |= MT_INT_MCU_CMD;
299300

300-
mt7615_irq_enable(dev, mask);
301+
mt76_connac_irq_enable(&dev->mt76, mask);
301302

302303
mt7615_dma_start(dev);
303304

drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ static int mt7615_efuse_init(struct mt7615_dev *dev, u32 base)
4747
void *buf;
4848
u32 val;
4949

50+
if (is_mt7663(&dev->mt76))
51+
len = MT7663_EEPROM_SIZE;
52+
5053
val = mt76_rr(dev, base + MT_EFUSE_BASE_CTRL);
5154
if (val & MT_EFUSE_BASE_CTRL_EMPTY)
5255
return 0;
@@ -72,6 +75,8 @@ static int mt7615_eeprom_load(struct mt7615_dev *dev, u32 addr)
7275
{
7376
int ret;
7477

78+
BUILD_BUG_ON(MT7615_EEPROM_FULL_SIZE < MT7663_EEPROM_SIZE);
79+
7580
ret = mt76_eeprom_init(&dev->mt76, MT7615_EEPROM_FULL_SIZE);
7681
if (ret < 0)
7782
return ret;
@@ -336,7 +341,7 @@ int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr)
336341
ret = mt7615_check_eeprom(&dev->mt76);
337342
if (ret && dev->mt76.otp.data) {
338343
memcpy(dev->mt76.eeprom.data, dev->mt76.otp.data,
339-
MT7615_EEPROM_SIZE);
344+
dev->mt76.otp.size);
340345
} else {
341346
dev->flash_eeprom = true;
342347
mt7615_cal_free_data(dev);

drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ enum mt7615_eeprom_field {
4646

4747
MT7615_EE_MAX = 0x3bf,
4848
MT7622_EE_MAX = 0x3db,
49-
MT7663_EE_MAX = 0x400,
49+
MT7663_EE_MAX = 0x600,
5050
};
5151

5252
#define MT_EE_RATE_POWER_MASK GENMASK(5, 0)

drivers/net/wireless/mediatek/mt76/mt7615/init.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ mt7615_init_wiphy(struct ieee80211_hw *hw)
396396

397397
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);
398398
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
399+
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
399400

400401
ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
401402
ieee80211_hw_set(hw, TX_STATUS_NO_AMPDU_LEN);

0 commit comments

Comments
 (0)