On Wed, Nov 13, 2019 at 01:41:28AM -0500, Brennan Vincent wrote: > Hello, > > I have a Wi-Fi USB adapter. urtwn(4) normally works fine, but it's a bit > flaky... > > The issue happens both on 6.6 and on -current. > > When my adapter gets into the bad state, it appears (from dmesg output) that > the driver is scanning for access points over and over, never > finding any. When I get into this wedged state, I don't know any way > to bring the card back up other than unplugging it and re-inserting. > (`ifconfig urtwn0 down && sleep 10 && sh /etc/netstart urtwn0` > is no help). > > I am attaching the relevant snippets of the dmesg output > (Kernel built with URTWN_DEBUG and urtwn_debug level set to 3). > > Another interesting thing is these "RX status=6" error messages in the > output. Apparently, "6" corresponds to "USBD_CANCELLED" > in sys/dev/usb/usbdi.h . > > I don't think this is a hardware issue because the device is > working fine on Ubuntu. > > Please let me know if there is anything more I can do to help debug this. > I am a beginner with OpenBSD so I'm not sure exactly what is relevant.
Despite our USB issues, there are minor problems with the urtwn(4) for RTL8188C/RTL8192C: - we don't need to enable/disable efuse access protection; it may prevent incorrect mac address read from efuse. - disable BB/RF is not needed. Index: sys/dev/ic/rtwn.c =================================================================== RCS file: /cvs/src/sys/dev/ic/rtwn.c,v retrieving revision 1.46 diff -u -p -u -p -r1.46 rtwn.c --- sys/dev/ic/rtwn.c 25 Apr 2019 01:52:13 -0000 1.46 +++ sys/dev/ic/rtwn.c 16 Nov 2019 09:23:07 -0000 @@ -529,7 +529,9 @@ rtwn_efuse_read(struct rtwn_softc *sc, u uint32_t reg; int i, len; - rtwn_write_1(sc, R92C_EFUSE_ACCESS, R92C_EFUSE_ACCESS_ON); + if (!(sc->chip & (RTWN_CHIP_92C | RTWN_CHIP_88C))) + rtwn_write_1(sc, R92C_EFUSE_ACCESS, R92C_EFUSE_ACCESS_ON); + rtwn_efuse_switch_power(sc); memset(rom, 0xff, size); @@ -571,7 +573,8 @@ rtwn_efuse_read(struct rtwn_softc *sc, u printf("\n"); } #endif - rtwn_write_1(sc, R92C_EFUSE_ACCESS, R92C_EFUSE_ACCESS_OFF); + if (!(sc->chip & (RTWN_CHIP_92C | RTWN_CHIP_88C))) + rtwn_write_1(sc, R92C_EFUSE_ACCESS, R92C_EFUSE_ACCESS_OFF); } void Index: sys/dev/usb/if_urtwn.c =================================================================== RCS file: /cvs/src/sys/dev/usb/if_urtwn.c,v retrieving revision 1.84 diff -u -p -u -p -r1.84 if_urtwn.c --- sys/dev/usb/if_urtwn.c 12 Sep 2019 12:55:07 -0000 1.84 +++ sys/dev/usb/if_urtwn.c 16 Nov 2019 09:23:07 -0000 @@ -1704,21 +1704,6 @@ urtwn_r92c_power_on(struct urtwn_softc * urtwn_write_2(sc, R92C_SYS_ISO_CTRL, urtwn_read_2(sc, R92C_SYS_ISO_CTRL) & ~R92C_SYS_ISO_CTRL_DIOR); - /* Initialize MAC. */ - urtwn_write_1(sc, R92C_APSD_CTRL, - urtwn_read_1(sc, R92C_APSD_CTRL) & ~R92C_APSD_CTRL_OFF); - for (ntries = 0; ntries < 200; ntries++) { - if (!(urtwn_read_1(sc, R92C_APSD_CTRL) & - R92C_APSD_CTRL_OFF_STATUS)) - break; - DELAY(5); - } - if (ntries == 200) { - printf("%s: timeout waiting for MAC initialization\n", - sc->sc_dev.dv_xname); - return (ETIMEDOUT); - } - /* Enable MAC DMA/WMAC/SCHEDULE/SEC blocks. */ reg = urtwn_read_2(sc, R92C_CR); reg |= R92C_CR_HCI_TXDMA_EN | R92C_CR_HCI_RXDMA_EN |