Skip to contentSkip to conversation

mt76x0 usb driver

ANN Stanislaw Gruszka 4 participants 15 messages Apr 9, 2018 – Jul 4, 2018 8 messages not in the archive Arm MediaTek

lore
Share & tools
lore
#0 lore raw

Hi

I would like to announce mt76x0 driver for MT7610U USB dongles:

https://github.com/sgruszka/mt76x0

mt76x0 is based on Jakub's mt7601u mac80211 driver and is intended to be integrated in the linux kernel.

Currently only Linksys AE6000 (ID 13b1:003e) in on USB id's list and 5GHz does not work.

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

I would also like to establish some better collaboration with Mediatek in order to having their present and future wireless hardware be supported in the mainline kernel.

Thanks
Stanislaw

#2 lore raw
In reply to a message not in the archive
Quoted 1 line

Hi

Hi Stanislaw,

Quoted 8 lines

I would like to announce mt76x0 driver for MT7610U USB dongles:

https://github.com/sgruszka/mt76x0

mt76x0 is based on Jakub's mt7601u mac80211 driver and is intended to be integrated in the linux kernel.

Thx, very cool work :)

Quoted 8 lines

Currently only Linksys AE6000 (ID 13b1:003e) in on USB id's list and 5GHz does not work.

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Quoted 6 lines

I would also like to establish some better collaboration with Mediatek in order to having their present and future wireless hardware be supported in the mainline kernel.

Thanks
Stanislaw

Regards,
Lorenzo

#4 lore raw
In reply to a message not in the archive
Quoted 11 lines · Lorenzo Bianconi
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Great, I'll start to integrate mt76x0 on top of your tree.

Thanks
Stanislaw

#6 lore raw
In reply to a message not in the archive
Quoted 7 lines · Stanislaw Gruszka
Quoted 6 lines · Lorenzo Bianconi
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

Quoted 7 lines
Quoted 5 lines

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Great, I'll start to integrate mt76x0 on top of your tree.

Cool :) actually this branch is in under development but what is really changing day by day is mt7612u part not usb one so I guess we can use it as common ground for mt76x2u and mt76x0.
Maybe even the mcu code is in common with mt76x2, isn't it?

Regards,
Lorenzo

Quoted 3 lines

Thanks
Stanislaw

#19 lore raw
In reply to a message not in the archive

Hi

Quoted 4 lines · Stanislaw Gruszka

Hi

I would like to announce mt76x0 driver for MT7610U USB dongles:

Quoted 8 lines

https://github.com/sgruszka/mt76x0

mt76x0 is based on Jakub's mt7601u mac80211 driver and is intended to be integrated in the linux kernel.

Currently only Linksys AE6000 (ID 13b1:003e) in on USB id's list and 5GHz does not work.

here are my changes for working 5Ghz band and more USB ID's form my side

phy.c +2 -1
index e1af2b0..460bd4e 100644
@@ -350,7 +350,7 @@ mt76x0_phy_set_band(struct mt76x0_dev *dev, enum nl80211_band band)
 static void
 mt76x0_phy_set_chan_rf_params(struct mt76x0_dev *dev, u8 channel, u16 rf_bw_band)
 {
-	u16 rf_band = rf_bw_band & 0xff00;
+	u16 rf_band;
 	u16 rf_bw = rf_bw_band & 0x00ff;
 	u32 mac_reg;
 	u8 rf_val;
@@ -367,6 +367,7 @@ mt76x0_phy_set_chan_rf_params(struct mt76x0_dev *dev, u8 channel, u16 rf_bw_band
 
 	for (i = 0; i < ARRAY_SIZE(mt76x0_frequency_plan); i++) {
 		if (channel == mt76x0_frequency_plan[i].channel) {
+			rf_band = mt76x0_frequency_plan[i].band;
 
 			if (bSDM)
 				freq_item = &(mt76x0_sdm_frequency_plan[i]);
usb.c +23 -1
index efae0a0..6b9a505 100644
@@ -20,7 +20,29 @@
 #include "trace.h"
 
 static struct usb_device_id mt76x0_device_table[] = {
-	{ USB_DEVICE(0x13b1,0x003e) },
+	{ USB_DEVICE(0x148F, 0x7610) },	/* MT7610U */
+	{ USB_DEVICE(0x13B1, 0x003E) },	/* Linksys AE6000 */
+	{ USB_DEVICE(0x0E8D, 0x7610) },	/* Sabrent NTWLAC */
+	{ USB_DEVICE(0x7392, 0xa711) },	/* Edimax 7711mac */
+	{ USB_DEVICE(0x7392, 0xb711) },	/* Edimax / Elecom  */
+	{ USB_DEVICE(0x148f, 0x761a) },	/* TP-Link TL-WDN5200 */
+	{ USB_DEVICE(0x148f, 0x760a) },	/* TP-Link unknown */
+	{ USB_DEVICE(0x0b05, 0x17d1) },	/* Asus USB-AC51 */
+	{ USB_DEVICE(0x0b05, 0x17db) },	/* Asus USB-AC50 */
+	{ USB_DEVICE(0x0df6, 0x0075) },	/* Sitecom WLA-3100 */
+	{ USB_DEVICE(0x2019, 0xab31) },	/* Planex GW-450D */
+	{ USB_DEVICE(0x2001, 0x3d02) },	/* D-LINK DWA-171 rev B1 */
+	{ USB_DEVICE(0x0586, 0x3425) },	/* Zyxel NWD6505 */
+	{ USB_DEVICE(0x07b8, 0x7610) },	/* AboCom AU7212 */
+	{ USB_DEVICE(0x04bb, 0x0951) },	/* I-O DATA WN-AC433UK */
+	{ USB_DEVICE(0x057c, 0x8502) },	/* AVM FRITZ!WLAN USB Stick AC 430 */
+	{ USB_DEVICE(0x293c, 0x5702) },	/* Comcast Xfinity KXW02AAA  */
+	{ USB_DEVICE(0x20f4, 0x806b) },	/* TRENDnet TEW-806UBH  */
+	{ USB_DEVICE(0x7392, 0xc711) }, /* Devolo Wifi ac Stick */
+	{ USB_DEVICE(0x0df6, 0x0079) }, /* Sitecom Europe B.V. ac  Stick */
+	{ USB_DEVICE(0x2357, 0x0105) }, /* TP-LINK Archer T1U */
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7630, 0xff, 0x2, 0xff)}, /* MT7630U */
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7650, 0xff, 0x2, 0xff)}, /* MT7650U */
 	{ 0, }
 };
 

Greetings
Hans

#8 lore raw
In reply to a message not in the archive

Hi

Quoted 14 lines · Lorenzo Bianconi
Quoted 13 lines · Stanislaw Gruszka
Quoted 11 lines · Lorenzo Bianconi
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Quoted 7 lines
Quoted 1 line

Great, I'll start to integrate mt76x0 on top of your tree.

Cool :) actually this branch is in under development but what is really changing day by day is mt7612u part not usb one so I guess we can use it as common ground for mt76x2u and mt76x0.
Maybe even the mcu code is in common with mt76x2, isn't it?

from my POV for "general" commands the MCU on mt76x0 and mt76x2 (doesn't matter if USB or PCIe) are almost the same i.e. CMD_FUN_SET_OP

The only difference is CMD_CALIBRATION_OP, they are for mt76x0 and mt76x2 different calibrate id's.

How about the LED on mt76x2 ?

Greetings
Hans

#9 lore raw
In reply to a message not in the archive
Quoted 14 lines · Lorenzo Bianconi
Quoted 13 lines · Stanislaw Gruszka
Quoted 11 lines · Lorenzo Bianconi
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Quoted 6 lines
Quoted 1 line

Great, I'll start to integrate mt76x0 on top of your tree.

Cool :) actually this branch is in under development but what is really changing day by day is mt7612u part not usb one so I guess we can use it as common ground for mt76x2u and mt76x0.
Maybe even the mcu code is in common with mt76x2, isn't it?

There are some new bits in mcu/mcu_and.c in Mediatek MT7612U driver, compared to MT7610U driver, but most of the code there looks pretty much the same :-)

Regards
Stanislaw

#22 lore raw
In reply to a message not in the archive
Quoted 9 lines · Stanislaw Gruszka

Hi

Quoted 1 line · Hans Ulli Kroll

here are my changes for working 5Ghz band and more USB ID's form my side

I applied the changes and pushed to github repo.

Thanks
Stanislaw

Hi all,

brief update on mt76x2u support in mt76 driver: I added the support for tx/rx data channels and I am able to successfully connect to an unencrypted AP.
I extended the usb utility layer that can be used to support mt76x0 in mt76 driver. Moreover I reused as mach as I can mt76x2 routines since the register map is pretty similar with the one used by mt7612u and similar chipsets (for the moment I just exported requested symbols). Next steps are add encryption support and improve driver stability.

Regards,
Lorenzo

#10 lore raw
In reply to a message not in the archive

Hi all,

Quoted 7 lines · Stanislaw Gruszka
Quoted 6 lines · Lorenzo Bianconi
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

Quoted 7 lines
Quoted 5 lines

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Great, I'll start to integrate mt76x0 on top of your tree.

So I started to do integration here:
https://github.com/sgruszka/wireless-drivers-next/commits/mt76x0-draft

However since driver is self containging, I think better would be just submit the driver into mt76/mt76x0/ dir upstream and do code merging work as follow-up patches posted on the mailing list. Patches then could be reviewed on regular basic. This will provide support for new mt76x0 devices in kernel quicker. Conflicts with mt76x2u and not yet upstreamed mt7603 could be resolved on the fly.

Another issue is firmware submission, how it was done for mt7601u and mt76x2 ?

Thanks
Stanislaw

#12 lore raw
In reply to a message not in the archive
Quoted 2 lines

Hi all,

Hi Stanislaw,

Quoted 20 lines · Stanislaw Gruszka
Quoted 7 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

Quoted 7 lines
Quoted 5 lines

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Great, I'll start to integrate mt76x0 on top of your tree.

So I started to do integration here:
https://github.com/sgruszka/wireless-drivers-next/commits/mt76x0-draft

Quoted 6 lines

However since driver is self containging, I think better would be just submit the driver into mt76/mt76x0/ dir upstream and do code merging work as follow-up patches posted on the mailing list. Patches then could be reviewed on regular basic. This will provide support for new mt76x0 devices in kernel quicker. Conflicts with mt76x2u and not yet upstreamed mt7603 could be resolved on the fly.

I did a quick review of the code and it seems (please correct me if I am wrong) there is
a lot of duplicated code with mt76/mt76x2u and mt7601u drivers (i.e:
mcu/eeprom/mac code
is quite the same of the ones used in mt76x2u). Moreover mt76/mt76x2u has been refactored in order to expose usb and mt76x2_common modules where you can use better
802.11 aggregation (using mac80211 per-sta queuing) and A-MSDU support (using tx/rx usb scatter-gather). Moreover mt76x2u has been tested/used by various users till now.
So since mt76x0 will be deeply modified I guess it would be better to start integrating the driver with
mt76/mt76x2u before been merged upstream otherwise will end-up with a lot of integration commits.
What do you think?

Quoted 3 lines

Another issue is firmware submission, how it was done for mt7601u and mt76x2 ?

I guess the fw submission has to be approved by mtk before been pushed to linux-firmware

Quoted 2 lines

Thanks
Stanislaw

Regards,
Lorenzo

Signature · 3 lines
UNIX is Sexy: who | grep -i blonde | talk; cd ~; wine; talk; touch;
unzip; touch; strip; gasp; finger; gasp; mount; fsck; more; yes; gasp;
umount; make clean; sleep
#14 lore raw
In reply to a message not in the archive
Quoted 32 lines · Lorenzo Bianconi
Quoted 2 lines

Hi all,

Hi Stanislaw,

Quoted 20 lines · Stanislaw Gruszka
Quoted 7 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

Quoted 7 lines
Quoted 5 lines

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Great, I'll start to integrate mt76x0 on top of your tree.

So I started to do integration here:
https://github.com/sgruszka/wireless-drivers-next/commits/mt76x0-draft

Quoted 6 lines

However since driver is self containging, I think better would be just submit the driver into mt76/mt76x0/ dir upstream and do code merging work as follow-up patches posted on the mailing list. Patches then could be reviewed on regular basic. This will provide support for new mt76x0 devices in kernel quicker. Conflicts with mt76x2u and not yet upstreamed mt7603 could be resolved on the fly.

Quoted 4 lines

I did a quick review of the code and it seems (please correct me if I am wrong) there is
a lot of duplicated code with mt76/mt76x2u and mt7601u drivers (i.e:
mcu/eeprom/mac code

Yes, however there are some subtle differences too.

Quoted 10 lines

is quite the same of the ones used in mt76x2u). Moreover mt76/mt76x2u has been refactored in order to expose usb and mt76x2_common modules where you can use better
802.11 aggregation (using mac80211 per-sta queuing) and A-MSDU support (using tx/rx usb scatter-gather). Moreover mt76x2u has been tested/used by various users till now.
So since mt76x0 will be deeply modified I guess it would be better to start integrating the driver with
mt76/mt76x2u before been merged upstream otherwise will end-up with a lot of integration commits.

Not sure why many integration commits in upstream is a problem. I think having patches posted on mailing list is better than doing them in my "private" tree without any review.

Quoted 1 line

What do you think?

I was thinking about posting mt76x0 driver in a subdir (there is sill some cleanup work need to be done there), wait for upstream mt76x2u integration, then post patches that remove duplication between mt76x2 and mt76x0 and add support for mt76x0e on the way.

Thanks
Stanislaw

#16 lore raw
In reply to a message not in the archive
Quoted 56 lines · Lorenzo Bianconi
Quoted 32 lines
Quoted 2 lines

Hi all,

Hi Stanislaw,

Quoted 20 lines · Stanislaw Gruszka
Quoted 7 lines · Lorenzo Bianconi
Quoted 6 lines
Quoted 5 lines

I would like to integrate the driver to kernel via mt76 driver, i.e. add USB hooks and mt76x0 mac/phy code to mt76. This will open possibility to develop support for mt76x2 USB devices as well as mt76x0 PCIe devices in mt76.

Quoted 7 lines
Quoted 5 lines

I have already started supporting mt76x2 USB devices in mt76 since register map is pretty similar to PCIe devices:
https://github.com/LorenzoBianconi/wireless-drivers-next/tree/mt76x2u
I added some usb utility routines so I think we can integrate mt76x0 in mt76 as well

Great, I'll start to integrate mt76x0 on top of your tree.

So I started to do integration here:
https://github.com/sgruszka/wireless-drivers-next/commits/mt76x0-draft

Quoted 6 lines

However since driver is self containging, I think better would be just submit the driver into mt76/mt76x0/ dir upstream and do code merging work as follow-up patches posted on the mailing list. Patches then could be reviewed on regular basic. This will provide support for new mt76x0 devices in kernel quicker. Conflicts with mt76x2u and not yet upstreamed mt7603 could be resolved on the fly.

Quoted 4 lines

I did a quick review of the code and it seems (please correct me if I am wrong) there is
a lot of duplicated code with mt76/mt76x2u and mt7601u drivers (i.e:
mcu/eeprom/mac code

Yes, however there are some subtle differences too.

Quoted 10 lines

is quite the same of the ones used in mt76x2u). Moreover mt76/mt76x2u has been refactored in order to expose usb and mt76x2_common modules where you can use better
802.11 aggregation (using mac80211 per-sta queuing) and A-MSDU support (using tx/rx usb scatter-gather). Moreover mt76x2u has been tested/used by various users till now.
So since mt76x0 will be deeply modified I guess it would be better to start integrating the driver with
mt76/mt76x2u before been merged upstream otherwise will end-up with a lot of integration commits.

Not sure why many integration commits in upstream is a problem. I think having patches posted on mailing list is better than doing them in my "private" tree without any review.

Quoted 7 lines
Quoted 1 line

What do you think?

I was thinking about posting mt76x0 driver in a subdir (there is sill some cleanup work need to be done there), wait for upstream mt76x2u integration, then post patches that remove duplication between mt76x2 and mt76x0 and add support for mt76x0e on the way.

Ack, fine. I modified a little bit mt76x2u/usb architecture moving some parts in common with mt76x0u
in mt76-usb module (e.g. mt76_queue management in tx_status data path, tx_stats workqueue,
some mcu utility routines). In this way the integration will be easier I guess

Regards,
Lorenzo

Quoted 2 lines

Thanks
Stanislaw

#17 lore raw

Hi

Quoted 15 lines · Lorenzo Bianconi
Quoted 5 lines

Not sure why many integration commits in upstream is a problem. I think having patches posted on mailing list is better than doing them in my "private" tree without any review.

Quoted 7 lines
Quoted 1 line

What do you think?

I was thinking about posting mt76x0 driver in a subdir (there is sill some cleanup work need to be done there), wait for upstream mt76x2u integration, then post patches that remove duplication between mt76x2 and mt76x0 and add support for mt76x0e on the way.

Quoted 12 lines

Ack, fine. I modified a little bit mt76x2u/usb architecture moving some parts in common with mt76x0u
in mt76-usb module (e.g. mt76_queue management in tx_status data path, tx_stats workqueue,
some mcu utility routines). In this way the integration will be easier I guess

Regards,
Lorenzo

Quoted 2 lines

Thanks
Stanislaw

I'm currrently working mt76x0u on top of Lorenzo's mt76x2u driver.

Ulli

#18 lore raw

Hi

Quoted 20 lines · Hans Ulli Kroll
Quoted 20 lines · Lorenzo Bianconi
Quoted 5 lines

Not sure why many integration commits in upstream is a problem. I think having patches posted on mailing list is better than doing them in my "private" tree without any review.

Quoted 7 lines
Quoted 1 line

What do you think?

I was thinking about posting mt76x0 driver in a subdir (there is sill some cleanup work need to be done there), wait for upstream mt76x2u integration, then post patches that remove duplication between mt76x2 and mt76x0 and add support for mt76x0e on the way.

Ack, fine. I modified a little bit mt76x2u/usb architecture moving some parts in common with mt76x0u
in mt76-usb module (e.g. mt76_queue management in tx_status data path, tx_stats workqueue,
some mcu utility routines). In this way the integration will be easier I guess

Quoted 8 lines
Quoted 6 lines

Regards,
Lorenzo

Quoted 2 lines

Thanks
Stanislaw

I'm currrently working mt76x0u on top of Lorenzo's mt76x2u driver.

Hmm, I think efforts should be somehow synchronized here.

I have almost ready for post patches adding mt76x0 driver to the kernel. Some cleanup work is probably needed, but I think they can be reviewed and merged. They do not conflict with patches currently posted Lorenzo except small changes in mt76.h and Makefile files, what can be easy to resolve.

Thanks
Stanislaw