mt7915: introduce dbdc support
Subsystems (3)
Lorenzo Bianconi
maintainercover mt7915: introduce dbdc support
Similar to mt7615 devices, mt7915d chipset supports dbdc mode where the hw exports a primary phy on 2.4GHz band and a secondary phy on 5GHz band.
This series is based on "mt76: move hw data queues in mt76_phy"
https://patchwork.kernel.org/project/linux-wireless/list/?series=382083
Lorenzo Bianconi (6):
mt76: move band capabilities in mt76_phy
mt76: rely on mt76_phy in mt76_init_sband_2g and mt76_init_sband_5g
mt76: move band allocation in mt76_register_phy
mt76: move hw mac_addr in mt76_phy
mt76: mt7915: introduce dbdc support
mt76: mt7915: get rid of dbdc debugfs knob
drivers/net/wireless/mediatek/mt76/eeprom.c | 12 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 106 +++-- drivers/net/wireless/mediatek/mt76/mt76.h | 11 +- .../wireless/mediatek/mt76/mt7603/eeprom.c | 6 +- .../net/wireless/mediatek/mt76/mt7615/dma.c | 2 +- .../wireless/mediatek/mt76/mt7615/eeprom.c | 20 +- .../net/wireless/mediatek/mt76/mt7615/init.c | 6 +- .../wireless/mediatek/mt76/mt76x0/eeprom.c | 12 +- .../net/wireless/mediatek/mt76/mt76x0/init.c | 4 +- .../net/wireless/mediatek/mt76/mt76x0/phy.c | 4 +- .../wireless/mediatek/mt76/mt76x02_eeprom.c | 8 +- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 16 +- .../net/wireless/mediatek/mt76/mt76x02_util.c | 8 +- .../wireless/mediatek/mt76/mt76x2/eeprom.c | 6 +- .../wireless/mediatek/mt76/mt76x2/pci_init.c | 2 +- .../wireless/mediatek/mt76/mt7915/debugfs.c | 40 +- .../net/wireless/mediatek/mt76/mt7915/dma.c | 19 +- .../wireless/mediatek/mt76/mt7915/eeprom.c | 51 ++- .../wireless/mediatek/mt76/mt7915/eeprom.h | 1 + .../net/wireless/mediatek/mt76/mt7915/init.c | 386 +++++++++--------- .../net/wireless/mediatek/mt76/mt7915/mac.c | 19 +- .../net/wireless/mediatek/mt76/mt7915/main.c | 3 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 4 +- .../wireless/mediatek/mt76/mt7915/mt7915.h | 5 +- .../net/wireless/mediatek/mt76/mt7915/pci.c | 19 +- .../net/wireless/mediatek/mt76/mt7915/regs.h | 13 +- drivers/net/wireless/mediatek/mt76/testmode.c | 17 +- 27 files changed, 398 insertions(+), 402 deletions(-)
Signature · 1 line
2.26.2
Lorenzo Bianconi
maintainerPATCH 1/6 mt76: move band capabilities in mt76_phy
This is a preliminary patch to move properly support mt7915 dbdc
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 8 ++++---- drivers/net/wireless/mediatek/mt76/mt76.h | 2 +- .../net/wireless/mediatek/mt76/mt7603/eeprom.c | 2 +- drivers/net/wireless/mediatek/mt76/mt7615/dma.c | 2 +- .../net/wireless/mediatek/mt76/mt7615/eeprom.c | 16 ++++++++-------- .../net/wireless/mediatek/mt76/mt76x0/eeprom.c | 6 +++--- drivers/net/wireless/mediatek/mt76/mt76x0/init.c | 4 ++-- drivers/net/wireless/mediatek/mt76/mt76x0/phy.c | 4 ++-- .../net/wireless/mediatek/mt76/mt76x02_eeprom.c | 8 ++++---- .../net/wireless/mediatek/mt76/mt7915/eeprom.c | 8 ++++---- drivers/net/wireless/mediatek/mt76/mt7915/init.c | 5 ++--- 11 files changed, 32 insertions(+), 33 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +4 -4
@@ -159,9 +159,9 @@ static void mt76_init_stream_cap(struct mt76_phy *phy,void mt76_set_stream_caps (struct mt76_phy *phy,bool vht) { -if (phy->dev->cap.has_2ghz) +if (phy->cap.has_2ghz)mt76_init_stream_cap (phy, &phy->sband_2g.sband, false); -if (phy->dev->cap.has_5ghz) +if (phy->cap.has_5ghz)mt76_init_stream_cap (phy, &phy->sband_5g.sband, vht); }EXPORT_SYMBOL_GPL (mt76_set_stream_caps);
@@ -461,13 +461,13 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,dev_set_drvdata (dev->dev, dev);mt76_phy_init (dev, hw); -if (dev->cap.has_2ghz) { +if (phy->cap.has_2ghz) { ret =mt76_init_sband_2g (dev, rates, n_rates);if (ret)return ret; } -if (dev->cap.has_5ghz) { +if (phy->cap.has_5ghz) { ret =mt76_init_sband_5g (dev, rates +4 , n_rates -4 , vht);if (ret)return ret;
drivers/net/wireless/mediatek/mt76/mt76.h +1 -1
@@ -569,6 +569,7 @@ struct mt76_phy {struct mt76_channel_state *chan_state;ktime_t survey_time; +struct mt76_hw_cap cap;struct mt76_sband sband_2g;struct mt76_sband sband_5g;
@@ -638,7 +639,6 @@ struct mt76_dev {struct debugfs_blob_wrapper eeprom;struct debugfs_blob_wrapper otp; -struct mt76_hw_cap cap;struct mt76_rate_power rate_power;
drivers/net/wireless/mediatek/mt76/mt7603/eeprom.c +1 -1
@@ -171,7 +171,7 @@ int mt7603_eeprom_init(struct mt7603_dev *dev) } eeprom = (u8 *)dev->mt76.eeprom.data; - dev->mt76.cap.has_2ghz = true; + dev->mphy.cap.has_2ghz = true;memcpy (dev->mt76.macaddr, eeprom +MT_EE_MAC_ADDR ,ETH_ALEN );/* Check for 1SS devices */
drivers/net/wireless/mediatek/mt76/mt7615/dma.c +1 -1
@@ -183,7 +183,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)int ret;/* Increase buffer size to receive large VHT MPDUs */ -if (dev->mt76.cap.has_5ghz) +if (dev->mphy.cap.has_5ghz) rx_buf_size *=2 ;mt76_dma_attach (&dev->mt76);
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +8 -8
@@ -99,20 +99,20 @@ mt7615_eeprom_parse_hw_band_cap(struct mt7615_dev *dev)if (is_mt7663 (&dev->mt76)) {/* dual band */ - dev->mt76.cap.has_2ghz = true; - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_2ghz = true; + dev->mphy.cap.has_5ghz = true;return ; }if (is_mt7622 (&dev->mt76)) {/* 2GHz only */ - dev->mt76.cap.has_2ghz = true; + dev->mphy.cap.has_2ghz = true;return ; }if (is_mt7611 (&dev->mt76)) {/* 5GHz only */ - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_5ghz = true;return ; }
@@ -120,17 +120,17 @@ mt7615_eeprom_parse_hw_band_cap(struct mt7615_dev *dev) eeprom[MT_EE_WIFI_CONF]);switch (val) {case MT_EE_5GHZ : - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_5ghz = true;break ;case MT_EE_2GHZ : - dev->mt76.cap.has_2ghz = true; + dev->mphy.cap.has_2ghz = true;break ;case MT_EE_DBDC : dev->dbdc_support = true;/* fall through */ default : - dev->mt76.cap.has_2ghz = true; - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_2ghz = true; + dev->mphy.cap.has_5ghz = true;break ; } }
drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c +3 -3
@@ -52,15 +52,15 @@ static void mt76x0_set_chip_cap(struct mt76x02_dev *dev)mt76x02_eeprom_parse_hw_cap (dev);dev_dbg (dev->mt76.dev,"2GHz %d 5GHz %d\n" , - dev->mt76.cap.has_2ghz, dev->mt76.cap.has_5ghz); + dev->mphy.cap.has_2ghz, dev->mphy.cap.has_5ghz);if (dev->no_2ghz) { - dev->mt76.cap.has_2ghz = false; + dev->mphy.cap.has_2ghz = false;dev_dbg (dev->mt76.dev,"mask out 2GHz support\n" ); }if (is_mt7630 (dev)) { - dev->mt76.cap.has_5ghz = false; + dev->mphy.cap.has_5ghz = false;dev_dbg (dev->mt76.dev,"mask out 5GHz support\n" ); }
drivers/net/wireless/mediatek/mt76/mt76x0/init.c +2 -2
@@ -245,7 +245,7 @@ int mt76x0_register_device(struct mt76x02_dev *dev)if (ret)return ret; -if (dev->mt76.cap.has_5ghz) { +if (dev->mphy.cap.has_5ghz) {struct ieee80211_supported_band *sband; sband = &dev->mphy.sband_5g.sband;
@@ -253,7 +253,7 @@ int mt76x0_register_device(struct mt76x02_dev *dev)mt76x0_init_txpower (dev, sband); } -if (dev->mt76.cap.has_2ghz) +if (dev->mphy.cap.has_2ghz)mt76x0_init_txpower (dev, &dev->mphy.sband_2g.sband);mt76x02_init_debugfs (dev);
drivers/net/wireless/mediatek/mt76/mt76x0/phy.c +2 -2
@@ -447,11 +447,11 @@ static void mt76x0_phy_ant_select(struct mt76x02_dev *dev)else coex3 |=BIT (4 ); coex3 |=BIT (3 ); -if (dev->mt76.cap.has_2ghz) +if (dev->mphy.cap.has_2ghz) wlan |=BIT (6 ); }else {/* sigle antenna mode */ -if (dev->mt76.cap.has_5ghz) { +if (dev->mphy.cap.has_5ghz) { coex3 |=BIT (3 ) |BIT (4 ); }else { wlan |=BIT (6 );
drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.c +4 -4
@@ -75,14 +75,14 @@ void mt76x02_eeprom_parse_hw_cap(struct mt76x02_dev *dev)switch (FIELD_GET (MT_EE_NIC_CONF_0_BOARD_TYPE , val)) {case BOARD_TYPE_5GHZ : - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_5ghz = true;break ;case BOARD_TYPE_2GHZ : - dev->mt76.cap.has_2ghz = true; + dev->mphy.cap.has_2ghz = true;break ;default : - dev->mt76.cap.has_2ghz = true; - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_2ghz = true; + dev->mphy.cap.has_5ghz = true;break ; } }
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c +4 -4
@@ -52,14 +52,14 @@ static void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev) val =FIELD_GET (MT_EE_WIFI_CONF_BAND_SEL , val);switch (val) {case MT_EE_5GHZ : - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_5ghz = true;break ;case MT_EE_2GHZ : - dev->mt76.cap.has_2ghz = true; + dev->mphy.cap.has_2ghz = true;break ;default : - dev->mt76.cap.has_2ghz = true; - dev->mt76.cap.has_5ghz = true; + dev->mphy.cap.has_2ghz = true; + dev->mphy.cap.has_5ghz = true;break ; }
drivers/net/wireless/mediatek/mt76/mt7915/init.c +2 -3
@@ -521,10 +521,9 @@ void mt7915_set_stream_he_caps(struct mt7915_phy *phy) {struct ieee80211_sband_iftype_data *data;struct ieee80211_supported_band *band; -struct mt76_dev *mdev = &phy->dev->mt76;int n; -if (mdev->cap.has_2ghz) { +if (phy->mt76->cap.has_2ghz) { data = phy->iftype[NL80211_BAND_2GHZ ]; n =mt7915_init_he_caps (phy,NL80211_BAND_2GHZ , data);
@@ -533,7 +532,7 @@ void mt7915_set_stream_he_caps(struct mt7915_phy *phy) band->n_iftype_data = n; } -if (mdev->cap.has_5ghz) { +if (phy->mt76->cap.has_5ghz) { data = phy->iftype[NL80211_BAND_5GHZ ]; n =mt7915_init_he_caps (phy,NL80211_BAND_5GHZ , data);
Signature · 1 line
2.26.2
Lorenzo Bianconi
maintainerPATCH 2/6 mt76: rely on mt76_phy in mt76_init_sband_2g and mt76_init_sband_5g
In reply to Lorenzo BianconiThis is a preliminary patch to move properly support mt7915 dbdc
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +16 -17
@@ -167,13 +167,14 @@ void mt76_set_stream_caps(struct mt76_phy *phy, bool vht)EXPORT_SYMBOL_GPL (mt76_set_stream_caps);static int -mt76_init_sband (struct mt76_dev *dev,struct mt76_sband *msband, +mt76_init_sband (struct mt76_phy *phy,struct mt76_sband *msband,const struct ieee80211_channel *chan,int n_chan,struct ieee80211_rate *rates,int n_rates,bool vht) {struct ieee80211_supported_band *sband = &msband->sband; -struct ieee80211_sta_ht_cap *ht_cap;struct ieee80211_sta_vht_cap *vht_cap; +struct ieee80211_sta_ht_cap *ht_cap; +struct mt76_dev *dev = phy->dev;void *chanlist;int size;
@@ -203,7 +204,7 @@ mt76_init_sband(struct mt76_dev *dev, struct mt76_sband *msband, ht_cap->mcs.tx_params =IEEE80211_HT_MCS_TX_DEFINED ; ht_cap->ampdu_factor =IEEE80211_HT_MAX_AMPDU_64K ; -mt76_init_stream_cap (&dev->phy, sband, vht); +mt76_init_stream_cap (phy, sband, vht);if (!vht)return 0 ;
@@ -221,27 +222,25 @@ mt76_init_sband(struct mt76_dev *dev, struct mt76_sband *msband, }static int -mt76_init_sband_2g (struct mt76_dev *dev,struct ieee80211_rate *rates, +mt76_init_sband_2g (struct mt76_phy *phy,struct ieee80211_rate *rates,int n_rates) { - dev->hw->wiphy->bands[NL80211_BAND_2GHZ ] = &dev->phy.sband_2g.sband; + phy->hw->wiphy->bands[NL80211_BAND_2GHZ ] = &phy->sband_2g.sband; -return mt76_init_sband (dev, &dev->phy.sband_2g, - mt76_channels_2ghz, -ARRAY_SIZE (mt76_channels_2ghz), - rates, n_rates, false); +return mt76_init_sband (phy, &phy->sband_2g, mt76_channels_2ghz, +ARRAY_SIZE (mt76_channels_2ghz), rates, + n_rates, false); }static int -mt76_init_sband_5g (struct mt76_dev *dev,struct ieee80211_rate *rates, +mt76_init_sband_5g (struct mt76_phy *phy,struct ieee80211_rate *rates,int n_rates,bool vht) { - dev->hw->wiphy->bands[NL80211_BAND_5GHZ ] = &dev->phy.sband_5g.sband; + phy->hw->wiphy->bands[NL80211_BAND_5GHZ ] = &phy->sband_5g.sband; -return mt76_init_sband (dev, &dev->phy.sband_5g, - mt76_channels_5ghz, -ARRAY_SIZE (mt76_channels_5ghz), - rates, n_rates, vht); +return mt76_init_sband (phy, &phy->sband_5g, mt76_channels_5ghz, +ARRAY_SIZE (mt76_channels_5ghz), rates, + n_rates, vht); } static void
@@ -462,13 +461,13 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,mt76_phy_init (dev, hw);if (phy->cap.has_2ghz) { - ret =mt76_init_sband_2g (dev, rates, n_rates); + ret =mt76_init_sband_2g (phy, rates, n_rates);if (ret)return ret; }if (phy->cap.has_5ghz) { - ret =mt76_init_sband_5g (dev, rates +4 , n_rates -4 , vht); + ret =mt76_init_sband_5g (phy, rates +4 , n_rates -4 , vht);if (ret)return ret; }
Signature · 1 line
2.26.2
Lorenzo Bianconi
maintainerPATCH 3/6 mt76: move band allocation in mt76_register_phy
In reply to Lorenzo BianconiThis is a preliminary patch to introduce dbdc support to mt7915 devices
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 56 ++++++++----------- drivers/net/wireless/mediatek/mt76/mt76.h | 3 +- .../net/wireless/mediatek/mt76/mt7615/init.c | 6 +- .../net/wireless/mediatek/mt76/mt7915/init.c | 3 +- 4 files changed, 31 insertions(+), 37 deletions(-)
drivers/net/wireless/mediatek/mt76/mac80211.c +24 -32
@@ -332,65 +332,57 @@ mt76_alloc_phy(struct mt76_dev *dev, unsigned int size, const struct ieee80211_ops *ops) {struct ieee80211_hw *hw; +unsigned int phy_size;struct mt76_phy *phy; -unsigned int phy_size, chan_size; -unsigned int size_2g, size_5g; -void *priv; phy_size =ALIGN (sizeof (*phy),8 ); - chan_size =sizeof (dev->phy.sband_2g.chan[0 ]); - size_2g =ALIGN (ARRAY_SIZE (mt76_channels_2ghz) * chan_size,8 ); - size_5g =ALIGN (ARRAY_SIZE (mt76_channels_5ghz) * chan_size,8 ); - - size += phy_size + size_2g + size_5g; - hw =ieee80211_alloc_hw (size, ops); + hw =ieee80211_alloc_hw (size + phy_size, ops);if (!hw)return NULL ; phy = hw->priv; phy->dev = dev; phy->hw = hw; + phy->priv = hw->priv + phy_size; -mt76_phy_init (dev, hw); - - priv = hw->priv + phy_size; +return phy; +} +EXPORT_SYMBOL_GPL (mt76_alloc_phy); - phy->sband_2g = dev->phy.sband_2g; - phy->sband_2g.chan = priv; - priv += size_2g; +int mt76_register_phy (struct mt76_phy *phy,bool vht, +struct ieee80211_rate *rates,int n_rates) +{ +int ret; - phy->sband_5g = dev->phy.sband_5g; - phy->sband_5g.chan = priv; - priv += size_5g; +mt76_phy_init (phy->dev, phy->hw); - phy->priv = priv; +if (phy->cap.has_2ghz) { + ret =mt76_init_sband_2g (phy, rates, n_rates); +if (ret) +return ret; + } - hw->wiphy->bands[NL80211_BAND_2GHZ ] = &phy->sband_2g.sband; - hw->wiphy->bands[NL80211_BAND_5GHZ ] = &phy->sband_5g.sband; +if (phy->cap.has_5ghz) { + ret =mt76_init_sband_5g (phy, rates +4 , n_rates -4 , vht); +if (ret) +return ret; + } +wiphy_read_of_freq_limits (phy->hw->wiphy);mt76_check_sband (phy, &phy->sband_2g,NL80211_BAND_2GHZ );mt76_check_sband (phy, &phy->sband_5g,NL80211_BAND_5GHZ ); -return phy; -} -EXPORT_SYMBOL_GPL (mt76_alloc_phy); - -int -mt76_register_phy (struct mt76_phy *phy) -{ -int ret; - ret =ieee80211_register_hw (phy->hw);if (ret)return ret; phy->dev->phy2 = phy; +return 0 ; }EXPORT_SYMBOL_GPL (mt76_register_phy); -void -mt76_unregister_phy (struct mt76_phy *phy) +void mt76_unregister_phy (struct mt76_phy *phy) {struct mt76_dev *dev = phy->dev;
drivers/net/wireless/mediatek/mt76/mt76.h +2 -1
@@ -775,7 +775,8 @@ void mt76_unregister_phy(struct mt76_phy *phy);struct mt76_phy *mt76_alloc_phy (struct mt76_dev *dev,unsigned int size,const struct ieee80211_ops *ops); -int mt76_register_phy (struct mt76_phy *phy); +int mt76_register_phy (struct mt76_phy *phy,bool vht, +struct ieee80211_rate *rates,int n_rates);struct dentry *mt76_register_debugfs (struct mt76_dev *dev);int mt76_queues_read (struct seq_file *s,void *data);
drivers/net/wireless/mediatek/mt76/mt7615/init.c +3 -3
@@ -426,14 +426,14 @@ int mt7615_register_ext_phy(struct mt7615_dev *dev) mphy->hw->wiphy->perm_addr[0 ] ^=BIT (7 );/* second phy can only handle 5 GHz */ - mphy->sband_2g.sband.n_channels =0 ; - mphy->hw->wiphy->bands[NL80211_BAND_2GHZ ] =NULL ; + mphy->cap.has_5ghz = true;/* mt7615 second phy shares the same hw queues with the primary one */ for (i =0 ; i <=MT_TXQ_PSD ; i++) mphy->q_tx[i] = dev->mphy.q_tx[i]; - ret =mt76_register_phy (mphy); + ret =mt76_register_phy (mphy, true, mt7615_rates, +ARRAY_SIZE (mt7615_rates));if (ret)ieee80211_free_hw (mphy->hw);
drivers/net/wireless/mediatek/mt76/mt7915/init.c +2 -1
@@ -620,7 +620,8 @@ int mt7915_register_ext_phy(struct mt7915_dev *dev) mphy->hw->wiphy->perm_addr[0 ] |=2 ; mphy->hw->wiphy->perm_addr[0 ] ^=BIT (7 ); - ret =mt76_register_phy (mphy); + ret =mt76_register_phy (mphy, true, mt7915_rates, +ARRAY_SIZE (mt7915_rates));if (ret)ieee80211_free_hw (mphy->hw);
Signature · 1 line
2.26.2
Lorenzo Bianconi
maintainerPATCH 4/6 mt76: move hw mac_addr in mt76_phy
In reply to Lorenzo BianconiThis is a preliminary patch to properly support mt7915 dbdc
--- drivers/net/wireless/mediatek/mt76/eeprom.c | 12 +++++++----- drivers/net/wireless/mediatek/mt76/mac80211.c | 11 ++++++----- drivers/net/wireless/mediatek/mt76/mt76.h | 5 +++-- .../net/wireless/mediatek/mt76/mt7603/eeprom.c | 4 ++-- .../net/wireless/mediatek/mt76/mt7615/eeprom.c | 4 ++-- .../net/wireless/mediatek/mt76/mt76x0/eeprom.c | 6 +++--- .../net/wireless/mediatek/mt76/mt76x02_mac.c | 16 ++++++++-------- .../net/wireless/mediatek/mt76/mt76x02_util.c | 8 ++++---- .../net/wireless/mediatek/mt76/mt76x2/eeprom.c | 6 +++--- .../wireless/mediatek/mt76/mt76x2/pci_init.c | 2 +- .../net/wireless/mediatek/mt76/mt7915/eeprom.c | 4 ++-- drivers/net/wireless/mediatek/mt76/testmode.c | 17 +++++++++-------- 12 files changed, 50 insertions(+), 45 deletions(-)
drivers/net/wireless/mediatek/mt76/eeprom.c +7 -5
@@ -88,8 +88,10 @@ mt76_get_of_eeprom(struct mt76_dev *dev, int len) }void -mt76_eeprom_override (struct mt76_dev *dev) +mt76_eeprom_override (struct mt76_phy *phy) { +struct mt76_dev *dev = phy->dev; +#ifdef CONFIG_OF struct device_node *np = dev->dev->of_node;const u8 *mac =NULL ;
@@ -97,14 +99,14 @@ mt76_eeprom_override(struct mt76_dev *dev)if (np) mac =of_get_mac_address (np);if (!IS_ERR_OR_NULL (mac)) -ether_addr_copy (dev->macaddr, mac); +ether_addr_copy (phy->macaddr, mac);#endif -if (!is_valid_ether_addr (dev->macaddr)) { -eth_random_addr (dev->macaddr); +if (!is_valid_ether_addr (phy->macaddr)) { +eth_random_addr (phy->macaddr);dev_info (dev->dev,"Invalid MAC address, using random address %pM\n" , - dev->macaddr); + phy->macaddr); } }EXPORT_SYMBOL_GPL (mt76_eeprom_override);
drivers/net/wireless/mediatek/mt76/mac80211.c +6 -5
@@ -273,12 +273,13 @@ mt76_check_sband(struct mt76_phy *phy, struct mt76_sband *msband, }static void -mt76_phy_init (struct mt76_dev *dev,struct ieee80211_hw *hw) +mt76_phy_init (struct mt76_phy *phy,struct ieee80211_hw *hw) { +struct mt76_dev *dev = phy->dev;struct wiphy *wiphy = hw->wiphy;SET_IEEE80211_DEV (hw, dev->dev); -SET_IEEE80211_PERM_ADDR (hw, dev->macaddr); +SET_IEEE80211_PERM_ADDR (hw, phy->macaddr); wiphy->features |=NL80211_FEATURE_ACTIVE_MONITOR ; wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH |
@@ -354,7 +355,7 @@ int mt76_register_phy(struct mt76_phy *phy, bool vht, {int ret; -mt76_phy_init (phy->dev, phy->hw); +mt76_phy_init (phy, phy->hw);if (phy->cap.has_2ghz) { ret =mt76_init_sband_2g (phy, rates, n_rates);
@@ -450,7 +451,7 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,int ret;dev_set_drvdata (dev->dev, dev); -mt76_phy_init (dev, hw); +mt76_phy_init (phy, hw);if (phy->cap.has_2ghz) { ret =mt76_init_sband_2g (phy, rates, n_rates);
@@ -830,7 +831,7 @@ mt76_airtime_check(struct mt76_dev *dev, struct sk_buff *skb)return ;if (!wcid || !wcid->sta) { -if (!ether_addr_equal (hdr->addr1, dev->macaddr)) +if (!ether_addr_equal (hdr->addr1, dev->phy.macaddr))return ; wcid =NULL ;
drivers/net/wireless/mediatek/mt76/mt76.h +3 -2
@@ -573,6 +573,8 @@ struct mt76_phy {struct mt76_sband sband_2g;struct mt76_sband sband_5g; +u8 macaddr[ETH_ALEN ]; +u32 vif_mask;int txpower_cur;
@@ -628,7 +630,6 @@ struct mt76_dev {struct mt76_wcid global_wcid;struct mt76_wcid __rcu *wcid[MT76_N_WCIDS ]; -u8 macaddr[ETH_ALEN ];u32 rev;u32 aggr_stats[32 ];
@@ -784,7 +785,7 @@ void mt76_seq_puts_array(struct seq_file *file, const char *str, s8 *val, int len);int mt76_eeprom_init (struct mt76_dev *dev,int len); -void mt76_eeprom_override (struct mt76_dev *dev); +void mt76_eeprom_override (struct mt76_phy *phy);struct mt76_queue * mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
drivers/net/wireless/mediatek/mt76/mt7603/eeprom.c +2 -2
@@ -172,7 +172,7 @@ int mt7603_eeprom_init(struct mt7603_dev *dev) eeprom = (u8 *)dev->mt76.eeprom.data; dev->mphy.cap.has_2ghz = true; -memcpy (dev->mt76.macaddr, eeprom +MT_EE_MAC_ADDR ,ETH_ALEN ); +memcpy (dev->mphy.macaddr, eeprom +MT_EE_MAC_ADDR ,ETH_ALEN );/* Check for 1SS devices */ dev->mphy.antenna_mask =3 ;
@@ -181,7 +181,7 @@ int mt7603_eeprom_init(struct mt7603_dev *dev) is_mt7688(dev)) dev->mphy.antenna_mask =1 ; -mt76_eeprom_override (&dev->mt76); +mt76_eeprom_override (&dev->mphy);return 0 ; }
drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c +2 -2
@@ -342,10 +342,10 @@ int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr) }mt7615_eeprom_parse_hw_cap (dev); -memcpy (dev->mt76.macaddr, dev->mt76.eeprom.data +MT_EE_MAC_ADDR , +memcpy (dev->mphy.macaddr, dev->mt76.eeprom.data +MT_EE_MAC_ADDR ,ETH_ALEN ); -mt76_eeprom_override (&dev->mt76); +mt76_eeprom_override (&dev->mphy);return 0 ; }
drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c +3 -3
@@ -342,10 +342,10 @@ int mt76x0_eeprom_init(struct mt76x02_dev *dev)dev_info (dev->mt76.dev,"EEPROM ver:%02hhx fae:%02hhx\n" , version, fae); -memcpy (dev->mt76.macaddr, (u8 *)dev->mt76.eeprom.data +MT_EE_MAC_ADDR , +memcpy (dev->mphy.macaddr, (u8 *)dev->mt76.eeprom.data +MT_EE_MAC_ADDR ,ETH_ALEN ); -mt76_eeprom_override (&dev->mt76); -mt76x02_mac_setaddr (dev, dev->mt76.macaddr); +mt76_eeprom_override (&dev->mphy); +mt76x02_mac_setaddr (dev, dev->mphy.macaddr);mt76x0_set_chip_cap (dev);mt76x0_set_freq_offset (dev);
drivers/net/wireless/mediatek/mt76/mt76x02_mac.c +8 -8
@@ -727,24 +727,24 @@ void mt76x02_mac_setaddr(struct mt76x02_dev *dev, const u8 *addr)static const u8 null_addr[ETH_ALEN ] = {};int i; -ether_addr_copy (dev->mt76.macaddr, addr); +ether_addr_copy (dev->mphy.macaddr, addr); -if (!is_valid_ether_addr (dev->mt76.macaddr)) { -eth_random_addr (dev->mt76.macaddr); +if (!is_valid_ether_addr (dev->mphy.macaddr)) { +eth_random_addr (dev->mphy.macaddr);dev_info (dev->mt76.dev,"Invalid MAC address, using random address %pM\n" , - dev->mt76.macaddr); + dev->mphy.macaddr); } -mt76_wr (dev,MT_MAC_ADDR_DW0 ,get_unaligned_le32 (dev->mt76.macaddr)); +mt76_wr (dev,MT_MAC_ADDR_DW0 ,get_unaligned_le32 (dev->mphy.macaddr));mt76_wr (dev,MT_MAC_ADDR_DW1 , -get_unaligned_le16 (dev->mt76.macaddr +4 ) | +get_unaligned_le16 (dev->mphy.macaddr +4 ) |FIELD_PREP (MT_MAC_ADDR_DW1_U2ME_MASK ,0xff ));mt76_wr (dev,MT_MAC_BSSID_DW0 , -get_unaligned_le32 (dev->mt76.macaddr)); +get_unaligned_le32 (dev->mphy.macaddr));mt76_wr (dev,MT_MAC_BSSID_DW1 , -get_unaligned_le16 (dev->mt76.macaddr +4 ) | +get_unaligned_le16 (dev->mphy.macaddr +4 ) |FIELD_PREP (MT_MAC_BSSID_DW1_MBSS_MODE ,3 ) |/* 8 APs + 8 STAs */ MT_MAC_BSSID_DW1_MBSS_LOCAL_BIT );/* enable 7 additional beacon slots and control them with bypass mask */
drivers/net/wireless/mediatek/mt76/mt76x02_util.c +4 -4
@@ -305,12 +305,12 @@ mt76x02_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)/* Allow to change address in HW if we create first interface. */ if (!dev->mphy.vif_mask && - (((vif->addr[0 ] ^ dev->mt76.macaddr[0 ]) & ~GENMASK (4 ,1 )) || -memcmp (vif->addr +1 , dev->mt76.macaddr +1 ,ETH_ALEN -1 ))) + (((vif->addr[0 ] ^ dev->mphy.macaddr[0 ]) & ~GENMASK (4 ,1 )) || +memcmp (vif->addr +1 , dev->mphy.macaddr +1 ,ETH_ALEN -1 )))mt76x02_mac_setaddr (dev, vif->addr);if (vif->addr[0 ] &BIT (1 )) - idx =1 + (((dev->mt76.macaddr[0 ] ^ vif->addr[0 ]) >>2 ) &7 ); + idx =1 + (((dev->mphy.macaddr[0 ] ^ vif->addr[0 ]) >>2 ) &7 );/* * Client mode typically only has one configurable BSSID register,
@@ -678,7 +678,7 @@ void mt76x02_config_mac_addr_list(struct mt76x02_dev *dev)for (i =0 ; i <ARRAY_SIZE (dev->macaddr_list); i++) {u8 *addr = dev->macaddr_list[i].addr; -memcpy (addr, dev->mt76.macaddr,ETH_ALEN ); +memcpy (addr, dev->mphy.macaddr,ETH_ALEN );if (!i)continue ;
drivers/net/wireless/mediatek/mt76/mt76x2/eeprom.c +3 -3
@@ -16,7 +16,7 @@ mt76x2_eeprom_get_macaddr(struct mt76x02_dev *dev) {void *src = dev->mt76.eeprom.data +MT_EE_MAC_ADDR ; -memcpy (dev->mt76.macaddr, src,ETH_ALEN ); +memcpy (dev->mphy.macaddr, src,ETH_ALEN );return 0 ; }
@@ -502,8 +502,8 @@ int mt76x2_eeprom_init(struct mt76x02_dev *dev)mt76x02_eeprom_parse_hw_cap (dev);mt76x2_eeprom_get_macaddr (dev); -mt76_eeprom_override (&dev->mt76); - dev->mt76.macaddr[0 ] &= ~BIT (1 ); +mt76_eeprom_override (&dev->mphy); + dev->mphy.macaddr[0 ] &= ~BIT (1 );return 0 ; }
drivers/net/wireless/mediatek/mt76/mt76x2/pci_init.c +1 -1
@@ -69,7 +69,7 @@ mt76x2_fixup_xtal(struct mt76x02_dev *dev)int mt76x2_mac_reset (struct mt76x02_dev *dev,bool hard) { -const u8 *macaddr = dev->mt76.macaddr; +const u8 *macaddr = dev->mphy.macaddr;u32 val;int i, k;
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c +2 -2
@@ -87,10 +87,10 @@ int mt7915_eeprom_init(struct mt7915_dev *dev)return ret;mt7915_eeprom_parse_hw_cap (dev); -memcpy (dev->mt76.macaddr, dev->mt76.eeprom.data +MT_EE_MAC_ADDR , +memcpy (dev->mphy.macaddr, dev->mt76.eeprom.data +MT_EE_MAC_ADDR ,ETH_ALEN ); -mt76_eeprom_override (&dev->mt76); +mt76_eeprom_override (&dev->mphy);return 0 ; }
drivers/net/wireless/mediatek/mt76/testmode.c +9 -8
@@ -59,13 +59,14 @@ static int mt76_testmode_tx_init(struct mt76_dev *dev) {struct mt76_testmode_data *td = &dev->test; +struct mt76_phy *phy = &dev->phy;struct ieee80211_tx_info *info;struct ieee80211_hdr *hdr;struct sk_buff *skb;u16 fc =IEEE80211_FTYPE_DATA |IEEE80211_STYPE_DATA |IEEE80211_FCTL_FROMDS ;struct ieee80211_tx_rate *rate; -u8 max_nss =hweight8 (dev->phy.antenna_mask); +u8 max_nss =hweight8 (phy->antenna_mask);if (td->tx_antenna_mask) max_nss =min_t (u8, max_nss,hweight8 (td->tx_antenna_mask));
@@ -78,9 +79,9 @@ mt76_testmode_tx_init(struct mt76_dev *dev) td->tx_skb = skb; hdr =__skb_put_zero (skb, td->tx_msdu_len); hdr->frame_control =cpu_to_le16 (fc); -memcpy (hdr->addr1, dev->macaddr,sizeof (dev->macaddr)); -memcpy (hdr->addr2, dev->macaddr,sizeof (dev->macaddr)); -memcpy (hdr->addr3, dev->macaddr,sizeof (dev->macaddr)); +memcpy (hdr->addr1, phy->macaddr,sizeof (phy->macaddr)); +memcpy (hdr->addr2, phy->macaddr,sizeof (phy->macaddr)); +memcpy (hdr->addr3, phy->macaddr,sizeof (phy->macaddr)); info =IEEE80211_SKB_CB (skb); info->flags = IEEE80211_TX_CTL_INJECTED |
@@ -96,14 +97,14 @@ mt76_testmode_tx_init(struct mt76_dev *dev)switch (td->tx_rate_mode) {case MT76_TM_TX_MODE_CCK : -if (dev->phy.chandef.chan->band !=NL80211_BAND_2GHZ ) +if (phy->chandef.chan->band !=NL80211_BAND_2GHZ )return -EINVAL ;if (rate->idx >4 )return -EINVAL ;break ;case MT76_TM_TX_MODE_OFDM : -if (dev->phy.chandef.chan->band !=NL80211_BAND_2GHZ ) +if (phy->chandef.chan->band !=NL80211_BAND_2GHZ )break ;if (rate->idx >8 )
@@ -114,7 +115,7 @@ mt76_testmode_tx_init(struct mt76_dev *dev)case MT76_TM_TX_MODE_HT :if (rate->idx >8 * max_nss && !(rate->idx ==32 && - dev->phy.chandef.width >=NL80211_CHAN_WIDTH_40 )) + phy->chandef.width >=NL80211_CHAN_WIDTH_40 ))return -EINVAL ; rate->flags |=IEEE80211_TX_RC_MCS ;
@@ -143,7 +144,7 @@ mt76_testmode_tx_init(struct mt76_dev *dev) info->flags |=IEEE80211_TX_CTL_STBC ;if (td->tx_rate_mode >=MT76_TM_TX_MODE_HT ) { -switch (dev->phy.chandef.width) { +switch (phy->chandef.width) {case NL80211_CHAN_WIDTH_40 : rate->flags |=IEEE80211_TX_RC_40_MHZ_WIDTH ;break ;
Signature · 1 line
2.26.2
Lorenzo Bianconi
maintainerPATCH 5/6 mt76: mt7915: introduce dbdc support
In reply to Lorenzo BianconiIntroduce mt7915 dbdc support. If dbdc is available, mt7915 primary phy will work on 2.4GHz band, while secondary one on 5GHz band.
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../wireless/mediatek/mt76/mt7915/debugfs.c | 13 ++- .../net/wireless/mediatek/mt76/mt7915/dma.c | 19 ++-- .../wireless/mediatek/mt76/mt7915/eeprom.c | 47 +++++--- .../wireless/mediatek/mt76/mt7915/eeprom.h | 1 + .../net/wireless/mediatek/mt76/mt7915/init.c | 102 +++++++----------- .../net/wireless/mediatek/mt76/mt7915/mac.c | 19 ++-- .../net/wireless/mediatek/mt76/mt7915/main.c | 3 +- .../net/wireless/mediatek/mt76/mt7915/mcu.c | 4 +- .../wireless/mediatek/mt76/mt7915/mt7915.h | 3 + .../net/wireless/mediatek/mt76/mt7915/pci.c | 19 +++- .../net/wireless/mediatek/mt76/mt7915/regs.h | 13 ++- 12 files changed, 136 insertions(+), 108 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -80,6 +80,7 @@ enum mt76_rxq_id {MT_RXQ_MAIN ,MT_RXQ_MCU ,MT_RXQ_MCU_WA , +MT_RXQ_EXT , __MT_RXQ_MAX };
drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c +10 -3
@@ -280,13 +280,17 @@ static int mt7915_queues_read(struct seq_file *s, void *data) { struct mt7915_dev *dev = dev_get_drvdata(s->private); +struct mt76_phy *mphy_ext = dev->mt76.phy2; +struct mt76_queue *ext_q = mphy_ext ? mphy_ext->q_tx[MT_TXQ_BE ] :NULL ;struct {struct mt76_queue *q;char *queue; } queue_map[] = { - { dev->mphy.q_tx[MT_TXQ_BE ],"WFDMA0" }, - { dev->mt76.q_mcu[MT_MCUQ_WM ],"MCUWM" }, - { dev->mt76.q_mcu[MT_MCUQ_WA ],"MCUWA" }, + { dev->mphy.q_tx[MT_TXQ_BE ],"WFDMA0" }, + { ext_q,"WFDMA1" }, + { dev->mphy.q_tx[MT_TXQ_BE ],"WFDMA0" }, + { dev->mt76.q_mcu[MT_MCUQ_WM ],"MCUWM" }, + { dev->mt76.q_mcu[MT_MCUQ_WA ],"MCUWA" }, { dev->mt76.q_mcu[MT_MCUQ_FWDL ],"MCUFWQ" }, };int i;
@@ -294,6 +298,9 @@ mt7915_queues_read(struct seq_file *s, void *data)for (i =0 ; i <ARRAY_SIZE (queue_map); i++) {struct mt76_queue *q = queue_map[i].q; +if (!q) +continue ; + seq_printf(s, "%s: queued=%d head=%d tail=%d\n", queue_map[i].queue, q->queued, q->head,
drivers/net/wireless/mediatek/mt76/mt7915/dma.c +13 -6
@@ -5,8 +5,7 @@#include "../dma.h" #include "mac.h" -static int -mt7915_init_tx_queues (struct mt7915_phy *phy,int idx,int n_desc) +int mt7915_init_tx_queues (struct mt7915_phy *phy,int idx,int n_desc) {int i, err;
@@ -274,13 +273,21 @@ int mt7915_dma_init(struct mt7915_dev *dev)if (ret)return ret; -/* rx data */ - ret =mt76_queue_alloc (dev, &dev->mt76.q_rx[MT_RXQ_MAIN ],0 , -MT7915_RX_RING_SIZE , rx_buf_size, -MT_RX_DATA_RING_BASE ); +/* rx data queue */ + ret =mt76_queue_alloc (dev, &dev->mt76.q_rx[MT_RXQ_MAIN ], +MT7915_RXQ_BAND0 ,MT7915_RX_RING_SIZE , + rx_buf_size,MT_RX_DATA_RING_BASE );if (ret)return ret; +if (dev->dbdc_support) { + ret =mt76_queue_alloc (dev, &dev->mt76.q_rx[MT_RXQ_EXT ], +MT7915_RXQ_BAND1 ,MT7915_RX_RING_SIZE , + rx_buf_size,MT_RX_DATA_RING_BASE ); +if (ret) +return ret; + } + ret =mt76_init_queues (dev);if (ret <0 )return ret;
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.c +31 -16
66 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/eeprom.h +1 -0
@@ -15,6 +15,7 @@ enum mt7915_eeprom_field {MT_EE_CHIP_ID =0x000 ,MT_EE_VERSION =0x002 ,MT_EE_MAC_ADDR =0x004 , +MT_EE_MAC_ADDR2 =0x00a ,MT_EE_DDIE_FT_VERSION =0x050 ,MT_EE_WIFI_CONF =0x190 , MT_EE_TX0_POWER_2G = 0x2fc,
drivers/net/wireless/mediatek/mt76/mt7915/init.c +41 -61
173 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +12 -7
@@ -1077,6 +1077,7 @@ void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb) {struct mt7915_tx_free *free = (struct mt7915_tx_free *)skb->data;struct mt76_dev *mdev = &dev->mt76; +struct mt76_phy *mphy_ext = mdev->phy2;struct mt76_txwi_cache *txwi;struct ieee80211_sta *sta =NULL ;LIST_HEAD (free_list);
@@ -1086,6 +1087,10 @@ void mt7915_mac_tx_free(struct mt7915_dev *dev, struct sk_buff *skb)/* clean DMA queues and unmap buffers first */ mt76_queue_tx_cleanup (dev, dev->mphy.q_tx[MT_TXQ_PSD ], false);mt76_queue_tx_cleanup (dev, dev->mphy.q_tx[MT_TXQ_BE ], false); +if (mphy_ext) { +mt76_queue_tx_cleanup (dev, mphy_ext->q_tx[MT_TXQ_PSD ], false); +mt76_queue_tx_cleanup (dev, mphy_ext->q_tx[MT_TXQ_BE ], false); + }/* * TODO: MT_TX_FREE_LATENCY is msdu time from the TXD is queued into PLE,
@@ -1321,9 +1326,8 @@ mt7915_phy_get_nf(struct mt7915_phy *phy, int idx)u32 val, sum =0 , n =0 ;int nss, i; -/* TODO: DBDC: 0,1 for 2.4G, 2,3 for 5G */ for (nss =0 ; nss <hweight8 (phy->chainmask); nss++) { -u32 reg =MT_WF_IRPI (nss); +u32 reg =MT_WF_IRPI (nss + (idx << dev->dbdc_support));for (i =0 ; i <ARRAY_SIZE (nf_power); i++, reg +=4 ) { val =mt7915_l2_rr (dev, reg);
@@ -1332,10 +1336,7 @@ mt7915_phy_get_nf(struct mt7915_phy *phy, int idx) } } -if (!n) -return 0 ; - -return sum / n; +return n ? sum / n :0 ; } static void
@@ -1425,6 +1426,7 @@ static void mt7915_dma_reset(struct mt7915_phy *phy) {struct mt7915_dev *dev = phy->dev; +struct mt76_phy *mphy_ext = dev->mt76.phy2;int i; mt76_clear(dev, MT_WFDMA0_GLO_CFG,
@@ -1434,8 +1436,11 @@ mt7915_dma_reset(struct mt7915_phy *phy)usleep_range (1000 ,2000 );mt76_queue_tx_cleanup (dev, dev->mt76.q_mcu[MT_MCUQ_WA ], true); -for (i =0 ; i < __MT_TXQ_MAX; i++) +for (i =0 ; i < __MT_TXQ_MAX; i++) {mt76_queue_tx_cleanup (dev, phy->mt76->q_tx[i], true); +if (mphy_ext) +mt76_queue_tx_cleanup (dev, mphy_ext->q_tx[i], true); + }mt76_for_each_q_rx (&dev->mt76, i) {mt76_queue_rx_reset (dev, i);
drivers/net/wireless/mediatek/mt76/mt7915/main.c +2 -1
@@ -394,7 +394,8 @@ static int mt7915_config(struct ieee80211_hw *hw, u32 changed)else phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC ; -mt76_rmw_field (dev,MT_DMA_DCR0 ,MT_DMA_DCR0_RXD_G5_EN , enabled); +mt76_rmw_field (dev,MT_DMA_DCR0 (band),MT_DMA_DCR0_RXD_G5_EN , + enabled);mt76_testmode_reset (&dev->mt76, true);mt76_wr (dev,MT_WF_RFCR (band), phy->rxfilter); }
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c +2 -2
@@ -962,7 +962,7 @@ mt7915_mcu_muar_config(struct mt7915_phy *phy, struct ieee80211_vif *vif, .mode = !!mask || enable, .entry_count = 1, .write = 1, - + .band = phy != &dev->phy, .index = idx * 2 + bssid, };
@@ -3146,7 +3146,7 @@ int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd) .center_ch = ieee80211_frequency_to_channel(freq1), .bw = mt7915_mcu_chan_bw(chandef), .tx_streams_num = hweight8(phy->mt76->antenna_mask), - .rx_streams = phy->chainmask, + .rx_streams = phy->mt76->antenna_mask, .band_idx = phy != &dev->phy, .channel_band = chandef->chan->band, };
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +3 -0
@@ -165,6 +165,7 @@ struct mt7915_dev {s8 **rate_power;/* TODO: use mt76_rate_power */ +bool dbdc_support;bool fw_debug;#ifdef CONFIG_NL80211_TESTMODE
@@ -278,6 +279,7 @@ void mt7915_unregister_device(struct mt7915_dev *dev);int mt7915_register_ext_phy (struct mt7915_dev *dev);void mt7915_unregister_ext_phy (struct mt7915_dev *dev);int mt7915_eeprom_init (struct mt7915_dev *dev); +void mt7915_eeprom_parse_band_config (struct mt7915_phy *phy);int mt7915_eeprom_get_target_power (struct mt7915_dev *dev,struct ieee80211_channel *chan,u8 chain_idx);
@@ -461,6 +463,7 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,struct ieee80211_sta *sta, struct mt76_tx_info *tx_info);void mt7915_tx_complete_skb (struct mt76_dev *mdev,struct mt76_queue_entry *e); +int mt7915_init_tx_queues (struct mt7915_phy *phy,int idx,int n_desc);void mt7915_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb);void mt7915_sta_ps (struct mt76_dev *mdev,struct ieee80211_sta *sta,bool ps);
drivers/net/wireless/mediatek/mt76/mt7915/pci.c +14 -5
@@ -21,8 +21,14 @@ static void mt7915_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q) { struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76); +static const u32 rx_irq_mask[] = { + [MT_RXQ_MAIN ] =MT_INT_RX_DONE_DATA0 , + [MT_RXQ_EXT ] =MT_INT_RX_DONE_DATA1 , + [MT_RXQ_MCU ] =MT_INT_RX_DONE_WM , + [MT_RXQ_MCU_WA ] =MT_INT_RX_DONE_WA , + }; -mt7915_irq_enable (dev,MT_INT_RX_DONE (q)); +mt7915_irq_enable (dev, rx_irq_mask[q]); }/* TODO: support 2/4/6/8 MSI-X vectors */
@@ -49,14 +55,17 @@ static irqreturn_t mt7915_irq_handler(int irq, void *dev_instance)if (intr &MT_INT_TX_DONE_MCU )napi_schedule (&dev->mt76.tx_napi); -if (intr &MT_INT_RX_DONE_DATA ) -napi_schedule (&dev->mt76.napi[0 ]); +if (intr &MT_INT_RX_DONE_DATA0 ) +napi_schedule (&dev->mt76.napi[MT_RXQ_MAIN ]); + +if (intr &MT_INT_RX_DONE_DATA1 ) +napi_schedule (&dev->mt76.napi[MT_RXQ_EXT ]);if (intr &MT_INT_RX_DONE_WM ) -napi_schedule (&dev->mt76.napi[1 ]); +napi_schedule (&dev->mt76.napi[MT_RXQ_MCU ]);if (intr &MT_INT_RX_DONE_WA ) -napi_schedule (&dev->mt76.napi[2 ]); +napi_schedule (&dev->mt76.napi[MT_RXQ_MCU_WA ]);if (intr &MT_INT_MCU_CMD ) {u32 val =mt76_rr (dev,MT_MCU_CMD );
drivers/net/wireless/mediatek/mt76/mt7915/regs.h +6 -7
@@ -73,11 +73,10 @@#define MT_TMAC_TRCR0 (_band) MT_WF_TMAC(_band, 0x09c)#define MT_TMAC_TFCR0 (_band) MT_WF_TMAC(_band, 0x1e0) -/* DMA Band 0 */ -#define MT_WF_DMA_BASE 0x21e00 -#define MT_WF_DMA (ofs) (MT_WF_DMA_BASE + (ofs)) +#define MT_WF_DMA_BASE (_band) ((_band) ? 0xa1e00 : 0x21e00) +#define MT_WF_DMA (_band, ofs) (MT_WF_DMA_BASE(_band) + (ofs)) -#define MT_DMA_DCR0 MT_WF_DMA(0x000) +#define MT_DMA_DCR0 (_band) MT_WF_DMA(_band, 0x000)#define MT_DMA_DCR0_MAX_RX_LEN GENMASK(15, 3)#define MT_DMA_DCR0_RXD_G5_EN BIT(23)
@@ -339,11 +338,11 @@#define MT_INT_SOURCE_CSR MT_WFDMA_EXT_CSR(0x10)#define MT_INT_MASK_CSR MT_WFDMA_EXT_CSR(0x14) -#define MT_INT_RX_DONE_DATA BIT(16) +#define MT_INT_RX_DONE_DATA0 BIT(16) +#define MT_INT_RX_DONE_DATA1 BIT(17)#define MT_INT_RX_DONE_WM BIT(0)#define MT_INT_RX_DONE_WA BIT(1) -#define MT_INT_RX_DONE (_n) ((_n) ? BIT((_n) - 1) : BIT(16)) -#define MT_INT_RX_DONE_ALL (BIT(0) | BIT(1) | BIT(16)) +#define MT_INT_RX_DONE_ALL (BIT(0) | BIT(1) | GENMASK(17, 16))#define MT_INT_TX_DONE_MCU_WA BIT(15)#define MT_INT_TX_DONE_FWDL BIT(26)#define MT_INT_TX_DONE_MCU_WM BIT(27)
Signature · 1 line
2.26.2
Lorenzo Bianconi
maintainerPATCH 6/6 mt76: mt7915: get rid of dbdc debugfs knob
In reply to Lorenzo Bianconimt7915 automatically detects dbdc feature so drop debugfs knob
--- .../wireless/mediatek/mt76/mt7915/debugfs.c | 27 -- .../net/wireless/mediatek/mt76/mt7915/init.c | 324 +++++++++--------- .../wireless/mediatek/mt76/mt7915/mt7915.h | 2 - 3 files changed, 162 insertions(+), 191 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c +0 -27
@@ -47,32 +47,6 @@ mt7915_radar_trigger(void *data, u64 val)DEFINE_DEBUGFS_ATTRIBUTE (fops_radar_trigger,NULL , mt7915_radar_trigger,"%lld\n" ); -static int -mt7915_dbdc_set (void *data,u64 val) -{ -struct mt7915_dev *dev = data; - -if (val) -mt7915_register_ext_phy (dev); -else -mt7915_unregister_ext_phy (dev); - -return 0 ; -} - -static int -mt7915_dbdc_get (void *data,u64 *val) -{ -struct mt7915_dev *dev = data; - - *val = !!mt7915_ext_phy (dev); - -return 0 ; -} - -DEFINE_DEBUGFS_ATTRIBUTE (fops_dbdc, mt7915_dbdc_get, - mt7915_dbdc_set,"%lld\n" ); -static int mt7915_fw_debug_set (void *data,u64 val) {
@@ -380,7 +354,6 @@ int mt7915_init_debugfs(struct mt7915_dev *dev)debugfs_create_devm_seqfile (dev->mt76.dev,"acq" , dir, mt7915_queues_acq);debugfs_create_file ("tx_stats" ,0400 , dir, dev, &fops_tx_stats); -debugfs_create_file ("dbdc" ,0600 , dir, dev, &fops_dbdc);debugfs_create_file ("fw_debug" ,0600 , dir, dev, &fops_fw_debug);debugfs_create_u32 ("dfs_hw_pattern" ,0400 , dir, &dev->hw_pattern);/* test knobs */
drivers/net/wireless/mediatek/mt76/mt7915/init.c +162 -162
348 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +0 -2
@@ -276,8 +276,6 @@ u32 mt7915_reg_map(struct mt7915_dev *dev, u32 addr);int mt7915_register_device (struct mt7915_dev *dev);void mt7915_unregister_device (struct mt7915_dev *dev); -int mt7915_register_ext_phy (struct mt7915_dev *dev); -void mt7915_unregister_ext_phy (struct mt7915_dev *dev);int mt7915_eeprom_init (struct mt7915_dev *dev);void mt7915_eeprom_parse_band_config (struct mt7915_phy *phy); int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
Signature · 1 line
2.26.2