All of lore.kernel.org
 help / color / mirror / Atom feed
From: DENG Qingfang <dqfext@gmail.com>
To: linux-wireless@vger.kernel.org
Cc: Felix Fietkau <nbd@nbd.name>,
	Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>,
	Ryder Lee <ryder.lee@mediatek.com>, Roy Luo <royluo@google.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	linux-mediatek@lists.infradead.org,
	Kalle Valo <kvalo@codeaurora.org>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH] mt76: mt7615: add support for MT7611N
Date: Sun, 12 Apr 2020 23:58:48 +0800	[thread overview]
Message-ID: <20200412155848.15506-1-dqfext@gmail.com> (raw)

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;
+	}
+
 	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


WARNING: multiple messages have this Message-ID (diff)
From: DENG Qingfang <dqfext@gmail.com>
To: linux-wireless@vger.kernel.org
Cc: Ryder Lee <ryder.lee@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org, Roy Luo <royluo@google.com>,
	Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>,
	Kalle Valo <kvalo@codeaurora.org>, Felix Fietkau <nbd@nbd.name>
Subject: [PATCH] mt76: mt7615: add support for MT7611N
Date: Sun, 12 Apr 2020 23:58:48 +0800	[thread overview]
Message-ID: <20200412155848.15506-1-dqfext@gmail.com> (raw)

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;
+	}
+
 	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


_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: DENG Qingfang <dqfext@gmail.com>
To: linux-wireless@vger.kernel.org
Cc: Ryder Lee <ryder.lee@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	linux-mediatek@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org, Roy Luo <royluo@google.com>,
	Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>,
	Kalle Valo <kvalo@codeaurora.org>, Felix Fietkau <nbd@nbd.name>
Subject: [PATCH] mt76: mt7615: add support for MT7611N
Date: Sun, 12 Apr 2020 23:58:48 +0800	[thread overview]
Message-ID: <20200412155848.15506-1-dqfext@gmail.com> (raw)

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;
+	}
+
 	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


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

             reply	other threads:[~2020-04-12 16:08 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-12 15:58 DENG Qingfang [this message]
2020-04-12 15:58 ` [PATCH] mt76: mt7615: add support for MT7611N DENG Qingfang
2020-04-12 15:58 ` DENG Qingfang
2020-04-13 14:44 ` Lorenzo Bianconi
2020-04-13 14:44   ` Lorenzo Bianconi
2020-04-13 14:44   ` Lorenzo Bianconi
2020-04-13 16:09   ` DENG Qingfang
2020-04-13 16:09     ` DENG Qingfang
2020-04-13 16:09     ` DENG Qingfang
2020-04-17  9:39 ` Felix Fietkau
2020-04-17  9:39   ` Felix Fietkau
2020-04-17  9:39   ` Felix Fietkau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200412155848.15506-1-dqfext@gmail.com \
    --to=dqfext@gmail.com \
    --cc=kvalo@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=lorenzo.bianconi83@gmail.com \
    --cc=matthias.bgg@gmail.com \
    --cc=nbd@nbd.name \
    --cc=royluo@google.com \
    --cc=ryder.lee@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.