diff mbox series

mt76: mt7615: add support for MT7611N

Message ID 20200412155848.15506-1-dqfext@gmail.com (mailing list archive)
State New, archived
Headers show
Series mt76: mt7615: add support for MT7611N | expand

Commit Message

Qingfang Deng April 12, 2020, 3:58 p.m. UTC
MT7611N is basically the same as MT7615N, except it only supports 5 GHz
It is used by some TP-Link and Mercury wireless routers

Signed-off-by: DENG Qingfang <dqfext@gmail.com>
---
 drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7615/dma.c     | 8 ++++----
 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c  | 7 +++++++
 drivers/net/wireless/mediatek/mt76/mt7615/init.c    | 2 +-
 drivers/net/wireless/mediatek/mt76/mt7615/mac.c     | 8 ++++----
 drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h  | 5 +++++
 drivers/net/wireless/mediatek/mt76/mt7615/pci.c     | 1 +
 7 files changed, 23 insertions(+), 10 deletions(-)

Comments

Lorenzo Bianconi April 13, 2020, 2:44 p.m. UTC | #1
> MT7611N is basically the same as MT7615N, except it only supports 5 GHz
> It is used by some TP-Link and Mercury wireless routers
> 
> Signed-off-by: DENG Qingfang <dqfext@gmail.com>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c | 2 +-
>  drivers/net/wireless/mediatek/mt76/mt7615/dma.c     | 8 ++++----
>  drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c  | 7 +++++++
>  drivers/net/wireless/mediatek/mt76/mt7615/init.c    | 2 +-
>  drivers/net/wireless/mediatek/mt76/mt7615/mac.c     | 8 ++++----
>  drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h  | 5 +++++
>  drivers/net/wireless/mediatek/mt76/mt7615/pci.c     | 1 +
>  7 files changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> index b4d0795154e3..fac705e1621f 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> @@ -264,7 +264,7 @@ int mt7615_init_debugfs(struct mt7615_dev *dev)
>  	if (!dir)
>  		return -ENOMEM;
>  
> -	if (is_mt7615(&dev->mt76))
> +	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
>  		debugfs_create_devm_seqfile(dev->mt76.dev, "queues", dir,
>  					    mt7615_queues_read);
>  	else
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
> index b19f208e3d54..274053311749 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
> @@ -74,7 +74,7 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)
>  	if (ret)
>  		return ret;
>  
> -	if (!is_mt7615(&dev->mt76))
> +	if (!is_mt7615(&dev->mt76) && !is_mt7611(&dev->mt76))
>  		return mt7622_init_tx_queues_multi(dev);
>  
>  	ret = mt7615_init_tx_queue(dev, &dev->mt76.q_tx[0], 0,
> @@ -139,7 +139,7 @@ mt7615_tx_cleanup(struct mt7615_dev *dev)
>  	int i;
>  
>  	mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
> -	if (is_mt7615(&dev->mt76)) {
> +	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
>  		mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);
>  	} else {
>  		for (i = 0; i < IEEE80211_NUM_ACS; i++)
> @@ -250,7 +250,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
>  	mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
>  		       MT_WPDMA_GLO_CFG_MULTI_DMA_EN, 0x3);
>  
> -	if (is_mt7615(&dev->mt76)) {
> +	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
>  		mt76_set(dev, MT_WPDMA_GLO_CFG,
>  			 MT_WPDMA_GLO_CFG_FIRST_TOKEN_ONLY);
>  
> @@ -276,7 +276,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
>  	if (ret)
>  		return ret;
>  
> -	if (!is_mt7615(&dev->mt76))
> +	if (!is_mt7615(&dev->mt76) && !is_mt7611(&dev->mt76))
>  	    rx_ring_size /= 2;
>  
>  	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], 0,
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
> index dfa9a08b896d..bb6f28305733 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
> @@ -109,6 +109,12 @@ mt7615_eeprom_parse_hw_band_cap(struct mt7615_dev *dev)
>  		return;
>  	}
>  
> +	if (is_mt7611(&dev->mt76)) {
> +		/* 5GHz only */
> +		dev->mt76.cap.has_5ghz = true;
> +		return;
> +	}

just out of curiosity, what is the value in eeprom[MT_EE_WIFI_CONF]?

Regards,
Lorenzo

> +
>  	val = FIELD_GET(MT_EE_NIC_WIFI_CONF_BAND_SEL,
>  			eeprom[MT_EE_WIFI_CONF]);
>  	switch (val) {
> @@ -260,6 +266,7 @@ static void mt7615_cal_free_data(struct mt7615_dev *dev)
>  		mt7622_apply_cal_free_data(dev);
>  		break;
>  	case 0x7615:
> +	case 0x7611:
>  		mt7615_apply_cal_free_data(dev);
>  		break;
>  	}
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> index 03b1e56534d6..33472a2493e2 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> @@ -349,7 +349,7 @@ mt7615_init_wiphy(struct ieee80211_hw *hw)
>  
>  	ieee80211_hw_set(hw, TX_STATUS_NO_AMPDU_LEN);
>  
> -	if (is_mt7615(&phy->dev->mt76))
> +	if (is_mt7615(&phy->dev->mt76) || is_mt7611(&phy->dev->mt76))
>  		hw->max_tx_fragments = MT_TXP_MAX_BUF_NUM;
>  	else
>  		hw->max_tx_fragments = MT_HW_TXP_MAX_BUF_NUM;
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> index a27a6d164009..b5b760b081cb 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> @@ -427,7 +427,7 @@ void mt7615_tx_complete_skb(struct mt76_dev *mdev, enum mt76_txq_id qid,
>  		dev = container_of(mdev, struct mt7615_dev, mt76);
>  		txp = mt7615_txwi_to_txp(mdev, e->txwi);
>  
> -		if (is_mt7615(&dev->mt76))
> +		if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
>  			token = le16_to_cpu(txp->fw.token);
>  		else
>  			token = le16_to_cpu(txp->hw.msdu_id[0]) &
> @@ -697,7 +697,7 @@ void mt7615_txp_skb_unmap(struct mt76_dev *dev,
>  	struct mt7615_txp_common *txp;
>  
>  	txp = mt7615_txwi_to_txp(dev, t);
> -	if (is_mt7615(dev))
> +	if (is_mt7615(dev) || is_mt7611(dev))
>  		mt7615_txp_skb_unmap_fw(dev, &txp->fw);
>  	else
>  		mt7615_txp_skb_unmap_hw(dev, &txp->hw);
> @@ -1212,7 +1212,7 @@ int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
>  
>  	txp = txwi + MT_TXD_SIZE;
>  	memset(txp, 0, sizeof(struct mt7615_txp_common));
> -	if (is_mt7615(&dev->mt76))
> +	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
>  		mt7615_write_fw_txp(dev, tx_info, txp, id);
>  	else
>  		mt7615_write_hw_txp(dev, tx_info, txp, id);
> @@ -1482,7 +1482,7 @@ void mt7615_mac_tx_free(struct mt7615_dev *dev, struct sk_buff *skb)
>  	u8 i, count;
>  
>  	count = FIELD_GET(MT_TX_FREE_MSDU_ID_CNT, le16_to_cpu(free->ctrl));
> -	if (is_mt7615(&dev->mt76)) {
> +	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
>  		__le16 *token = &free->token[0];
>  
>  		for (i = 0; i < count; i++)
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
> index 676ca622c35a..8daf1027de8a 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
> @@ -353,6 +353,11 @@ static inline bool is_mt7663(struct mt76_dev *dev)
>  	return mt76_chip(dev) == 0x7663;
>  }
>  
> +static inline bool is_mt7611(struct mt76_dev *dev)
> +{
> +	return mt76_chip(dev) == 0x7611;
> +}
> +
>  static inline void mt7615_irq_enable(struct mt7615_dev *dev, u32 mask)
>  {
>  	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
> index c8d0f893a47f..54c0ea2701bd 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
> @@ -14,6 +14,7 @@
>  static const struct pci_device_id mt7615_pci_device_table[] = {
>  	{ PCI_DEVICE(0x14c3, 0x7615) },
>  	{ PCI_DEVICE(0x14c3, 0x7663) },
> +	{ PCI_DEVICE(0x14c3, 0x7611) },
>  	{ },
>  };
>  
> -- 
> 2.26.0
>
Qingfang Deng April 13, 2020, 4:09 p.m. UTC | #2
On Mon, Apr 13, 2020 at 10:43 PM Lorenzo Bianconi <lorenzo@kernel.org> wrote:
>
> > MT7611N is basically the same as MT7615N, except it only supports 5 GHz
> > It is used by some TP-Link and Mercury wireless routers
> >
> > Signed-off-by: DENG Qingfang <dqfext@gmail.com>
> > ---
> >  drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c | 2 +-
> >  drivers/net/wireless/mediatek/mt76/mt7615/dma.c     | 8 ++++----
> >  drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c  | 7 +++++++
> >  drivers/net/wireless/mediatek/mt76/mt7615/init.c    | 2 +-
> >  drivers/net/wireless/mediatek/mt76/mt7615/mac.c     | 8 ++++----
> >  drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h  | 5 +++++
> >  drivers/net/wireless/mediatek/mt76/mt7615/pci.c     | 1 +
> >  7 files changed, 23 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> > index b4d0795154e3..fac705e1621f 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> > @@ -264,7 +264,7 @@ int mt7615_init_debugfs(struct mt7615_dev *dev)
> >       if (!dir)
> >               return -ENOMEM;
> >
> > -     if (is_mt7615(&dev->mt76))
> > +     if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
> >               debugfs_create_devm_seqfile(dev->mt76.dev, "queues", dir,
> >                                           mt7615_queues_read);
> >       else
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
> > index b19f208e3d54..274053311749 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
> > @@ -74,7 +74,7 @@ mt7615_init_tx_queues(struct mt7615_dev *dev)
> >       if (ret)
> >               return ret;
> >
> > -     if (!is_mt7615(&dev->mt76))
> > +     if (!is_mt7615(&dev->mt76) && !is_mt7611(&dev->mt76))
> >               return mt7622_init_tx_queues_multi(dev);
> >
> >       ret = mt7615_init_tx_queue(dev, &dev->mt76.q_tx[0], 0,
> > @@ -139,7 +139,7 @@ mt7615_tx_cleanup(struct mt7615_dev *dev)
> >       int i;
> >
> >       mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
> > -     if (is_mt7615(&dev->mt76)) {
> > +     if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
> >               mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);
> >       } else {
> >               for (i = 0; i < IEEE80211_NUM_ACS; i++)
> > @@ -250,7 +250,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
> >       mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
> >                      MT_WPDMA_GLO_CFG_MULTI_DMA_EN, 0x3);
> >
> > -     if (is_mt7615(&dev->mt76)) {
> > +     if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
> >               mt76_set(dev, MT_WPDMA_GLO_CFG,
> >                        MT_WPDMA_GLO_CFG_FIRST_TOKEN_ONLY);
> >
> > @@ -276,7 +276,7 @@ int mt7615_dma_init(struct mt7615_dev *dev)
> >       if (ret)
> >               return ret;
> >
> > -     if (!is_mt7615(&dev->mt76))
> > +     if (!is_mt7615(&dev->mt76) && !is_mt7611(&dev->mt76))
> >           rx_ring_size /= 2;
> >
> >       ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], 0,
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
> > index dfa9a08b896d..bb6f28305733 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
> > @@ -109,6 +109,12 @@ mt7615_eeprom_parse_hw_band_cap(struct mt7615_dev *dev)
> >               return;
> >       }
> >
> > +     if (is_mt7611(&dev->mt76)) {
> > +             /* 5GHz only */
> > +             dev->mt76.cap.has_5ghz = true;
> > +             return;
> > +     }
>
> just out of curiosity, what is the value in eeprom[MT_EE_WIFI_CONF]?
At 0x3e? It is 0 (MT_EE_DUAL_BAND?) but 2.4G is not working.
>
> Regards,
> Lorenzo
>
> > +
> >       val = FIELD_GET(MT_EE_NIC_WIFI_CONF_BAND_SEL,
> >                       eeprom[MT_EE_WIFI_CONF]);
> >       switch (val) {
> > @@ -260,6 +266,7 @@ static void mt7615_cal_free_data(struct mt7615_dev *dev)
> >               mt7622_apply_cal_free_data(dev);
> >               break;
> >       case 0x7615:
> > +     case 0x7611:
> >               mt7615_apply_cal_free_data(dev);
> >               break;
> >       }
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> > index 03b1e56534d6..33472a2493e2 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
> > @@ -349,7 +349,7 @@ mt7615_init_wiphy(struct ieee80211_hw *hw)
> >
> >       ieee80211_hw_set(hw, TX_STATUS_NO_AMPDU_LEN);
> >
> > -     if (is_mt7615(&phy->dev->mt76))
> > +     if (is_mt7615(&phy->dev->mt76) || is_mt7611(&phy->dev->mt76))
> >               hw->max_tx_fragments = MT_TXP_MAX_BUF_NUM;
> >       else
> >               hw->max_tx_fragments = MT_HW_TXP_MAX_BUF_NUM;
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> > index a27a6d164009..b5b760b081cb 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
> > @@ -427,7 +427,7 @@ void mt7615_tx_complete_skb(struct mt76_dev *mdev, enum mt76_txq_id qid,
> >               dev = container_of(mdev, struct mt7615_dev, mt76);
> >               txp = mt7615_txwi_to_txp(mdev, e->txwi);
> >
> > -             if (is_mt7615(&dev->mt76))
> > +             if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
> >                       token = le16_to_cpu(txp->fw.token);
> >               else
> >                       token = le16_to_cpu(txp->hw.msdu_id[0]) &
> > @@ -697,7 +697,7 @@ void mt7615_txp_skb_unmap(struct mt76_dev *dev,
> >       struct mt7615_txp_common *txp;
> >
> >       txp = mt7615_txwi_to_txp(dev, t);
> > -     if (is_mt7615(dev))
> > +     if (is_mt7615(dev) || is_mt7611(dev))
> >               mt7615_txp_skb_unmap_fw(dev, &txp->fw);
> >       else
> >               mt7615_txp_skb_unmap_hw(dev, &txp->hw);
> > @@ -1212,7 +1212,7 @@ int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
> >
> >       txp = txwi + MT_TXD_SIZE;
> >       memset(txp, 0, sizeof(struct mt7615_txp_common));
> > -     if (is_mt7615(&dev->mt76))
> > +     if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
> >               mt7615_write_fw_txp(dev, tx_info, txp, id);
> >       else
> >               mt7615_write_hw_txp(dev, tx_info, txp, id);
> > @@ -1482,7 +1482,7 @@ void mt7615_mac_tx_free(struct mt7615_dev *dev, struct sk_buff *skb)
> >       u8 i, count;
> >
> >       count = FIELD_GET(MT_TX_FREE_MSDU_ID_CNT, le16_to_cpu(free->ctrl));
> > -     if (is_mt7615(&dev->mt76)) {
> > +     if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
> >               __le16 *token = &free->token[0];
> >
> >               for (i = 0; i < count; i++)
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
> > index 676ca622c35a..8daf1027de8a 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
> > @@ -353,6 +353,11 @@ static inline bool is_mt7663(struct mt76_dev *dev)
> >       return mt76_chip(dev) == 0x7663;
> >  }
> >
> > +static inline bool is_mt7611(struct mt76_dev *dev)
> > +{
> > +     return mt76_chip(dev) == 0x7611;
> > +}
> > +
> >  static inline void mt7615_irq_enable(struct mt7615_dev *dev, u32 mask)
> >  {
> >       mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
> > diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
> > index c8d0f893a47f..54c0ea2701bd 100644
> > --- a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
> > +++ b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
> > @@ -14,6 +14,7 @@
> >  static const struct pci_device_id mt7615_pci_device_table[] = {
> >       { PCI_DEVICE(0x14c3, 0x7615) },
> >       { PCI_DEVICE(0x14c3, 0x7663) },
> > +     { PCI_DEVICE(0x14c3, 0x7611) },
> >       { },
> >  };
> >
> > --
> > 2.26.0
> >
Felix Fietkau April 17, 2020, 9:39 a.m. UTC | #3
On 2020-04-12 17:58, DENG Qingfang wrote:
> MT7611N is basically the same as MT7615N, except it only supports 5 GHz
> It is used by some TP-Link and Mercury wireless routers
> 
> Signed-off-by: DENG Qingfang <dqfext@gmail.com>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c | 2 +-
>  drivers/net/wireless/mediatek/mt76/mt7615/dma.c     | 8 ++++----
>  drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c  | 7 +++++++
>  drivers/net/wireless/mediatek/mt76/mt7615/init.c    | 2 +-
>  drivers/net/wireless/mediatek/mt76/mt7615/mac.c     | 8 ++++----
>  drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h  | 5 +++++
>  drivers/net/wireless/mediatek/mt76/mt7615/pci.c     | 1 +
>  7 files changed, 23 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> index b4d0795154e3..fac705e1621f 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
> @@ -264,7 +264,7 @@ int mt7615_init_debugfs(struct mt7615_dev *dev)
>  	if (!dir)
>  		return -ENOMEM;
>  
> -	if (is_mt7615(&dev->mt76))
> +	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
>  		debugfs_create_devm_seqfile(dev->mt76.dev, "queues", dir,
>  					    mt7615_queues_read);
>  	else
I think it would simplify the patch and driver code if you make
is_mt7615(&dev->mt76) return true for mt7611 as well.

- Felix
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
index b4d0795154e3..fac705e1621f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/debugfs.c
@@ -264,7 +264,7 @@  int mt7615_init_debugfs(struct mt7615_dev *dev)
 	if (!dir)
 		return -ENOMEM;
 
-	if (is_mt7615(&dev->mt76))
+	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
 		debugfs_create_devm_seqfile(dev->mt76.dev, "queues", dir,
 					    mt7615_queues_read);
 	else
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
index b19f208e3d54..274053311749 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/dma.c
@@ -74,7 +74,7 @@  mt7615_init_tx_queues(struct mt7615_dev *dev)
 	if (ret)
 		return ret;
 
-	if (!is_mt7615(&dev->mt76))
+	if (!is_mt7615(&dev->mt76) && !is_mt7611(&dev->mt76))
 		return mt7622_init_tx_queues_multi(dev);
 
 	ret = mt7615_init_tx_queue(dev, &dev->mt76.q_tx[0], 0,
@@ -139,7 +139,7 @@  mt7615_tx_cleanup(struct mt7615_dev *dev)
 	int i;
 
 	mt76_queue_tx_cleanup(dev, MT_TXQ_MCU, false);
-	if (is_mt7615(&dev->mt76)) {
+	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
 		mt76_queue_tx_cleanup(dev, MT_TXQ_BE, false);
 	} else {
 		for (i = 0; i < IEEE80211_NUM_ACS; i++)
@@ -250,7 +250,7 @@  int mt7615_dma_init(struct mt7615_dev *dev)
 	mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
 		       MT_WPDMA_GLO_CFG_MULTI_DMA_EN, 0x3);
 
-	if (is_mt7615(&dev->mt76)) {
+	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
 		mt76_set(dev, MT_WPDMA_GLO_CFG,
 			 MT_WPDMA_GLO_CFG_FIRST_TOKEN_ONLY);
 
@@ -276,7 +276,7 @@  int mt7615_dma_init(struct mt7615_dev *dev)
 	if (ret)
 		return ret;
 
-	if (!is_mt7615(&dev->mt76))
+	if (!is_mt7615(&dev->mt76) && !is_mt7611(&dev->mt76))
 	    rx_ring_size /= 2;
 
 	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], 0,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c b/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
index dfa9a08b896d..bb6f28305733 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
@@ -109,6 +109,12 @@  mt7615_eeprom_parse_hw_band_cap(struct mt7615_dev *dev)
 		return;
 	}
 
+	if (is_mt7611(&dev->mt76)) {
+		/* 5GHz only */
+		dev->mt76.cap.has_5ghz = true;
+		return;
+	}
+
 	val = FIELD_GET(MT_EE_NIC_WIFI_CONF_BAND_SEL,
 			eeprom[MT_EE_WIFI_CONF]);
 	switch (val) {
@@ -260,6 +266,7 @@  static void mt7615_cal_free_data(struct mt7615_dev *dev)
 		mt7622_apply_cal_free_data(dev);
 		break;
 	case 0x7615:
+	case 0x7611:
 		mt7615_apply_cal_free_data(dev);
 		break;
 	}
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/init.c b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
index 03b1e56534d6..33472a2493e2 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/init.c
@@ -349,7 +349,7 @@  mt7615_init_wiphy(struct ieee80211_hw *hw)
 
 	ieee80211_hw_set(hw, TX_STATUS_NO_AMPDU_LEN);
 
-	if (is_mt7615(&phy->dev->mt76))
+	if (is_mt7615(&phy->dev->mt76) || is_mt7611(&phy->dev->mt76))
 		hw->max_tx_fragments = MT_TXP_MAX_BUF_NUM;
 	else
 		hw->max_tx_fragments = MT_HW_TXP_MAX_BUF_NUM;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
index a27a6d164009..b5b760b081cb 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mac.c
@@ -427,7 +427,7 @@  void mt7615_tx_complete_skb(struct mt76_dev *mdev, enum mt76_txq_id qid,
 		dev = container_of(mdev, struct mt7615_dev, mt76);
 		txp = mt7615_txwi_to_txp(mdev, e->txwi);
 
-		if (is_mt7615(&dev->mt76))
+		if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
 			token = le16_to_cpu(txp->fw.token);
 		else
 			token = le16_to_cpu(txp->hw.msdu_id[0]) &
@@ -697,7 +697,7 @@  void mt7615_txp_skb_unmap(struct mt76_dev *dev,
 	struct mt7615_txp_common *txp;
 
 	txp = mt7615_txwi_to_txp(dev, t);
-	if (is_mt7615(dev))
+	if (is_mt7615(dev) || is_mt7611(dev))
 		mt7615_txp_skb_unmap_fw(dev, &txp->fw);
 	else
 		mt7615_txp_skb_unmap_hw(dev, &txp->hw);
@@ -1212,7 +1212,7 @@  int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
 
 	txp = txwi + MT_TXD_SIZE;
 	memset(txp, 0, sizeof(struct mt7615_txp_common));
-	if (is_mt7615(&dev->mt76))
+	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76))
 		mt7615_write_fw_txp(dev, tx_info, txp, id);
 	else
 		mt7615_write_hw_txp(dev, tx_info, txp, id);
@@ -1482,7 +1482,7 @@  void mt7615_mac_tx_free(struct mt7615_dev *dev, struct sk_buff *skb)
 	u8 i, count;
 
 	count = FIELD_GET(MT_TX_FREE_MSDU_ID_CNT, le16_to_cpu(free->ctrl));
-	if (is_mt7615(&dev->mt76)) {
+	if (is_mt7615(&dev->mt76) || is_mt7611(&dev->mt76)) {
 		__le16 *token = &free->token[0];
 
 		for (i = 0; i < count; i++)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
index 676ca622c35a..8daf1027de8a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
@@ -353,6 +353,11 @@  static inline bool is_mt7663(struct mt76_dev *dev)
 	return mt76_chip(dev) == 0x7663;
 }
 
+static inline bool is_mt7611(struct mt76_dev *dev)
+{
+	return mt76_chip(dev) == 0x7611;
+}
+
 static inline void mt7615_irq_enable(struct mt7615_dev *dev, u32 mask)
 {
 	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
index c8d0f893a47f..54c0ea2701bd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
@@ -14,6 +14,7 @@ 
 static const struct pci_device_id mt7615_pci_device_table[] = {
 	{ PCI_DEVICE(0x14c3, 0x7615) },
 	{ PCI_DEVICE(0x14c3, 0x7663) },
+	{ PCI_DEVICE(0x14c3, 0x7611) },
 	{ },
 };