Hi Stanislaw, > Stanislaw Gruszka <sgruszka@xxxxxxxxxx> hat am 15. Februar 2019 um 08:12 geschrieben: > > > On Thu, Feb 14, 2019 at 10:48:15AM +0100, Stefan Wahren wrote: > > Hi Stanislaw, > > > > Am 14.02.19 um 10:25 schrieb Stanislaw Gruszka: > > > On Thu, Feb 14, 2019 at 07:49:57AM +0100, Stefan Wahren wrote: > > >> Hi Stanislaw, > > >> > > >>> Stanislaw Gruszka <sgruszka@xxxxxxxxxx> hat am 12. Februar 2019 um 10:30 geschrieben: > > >>> > > >>> > > >>> > > >>> In usb_sg_init() urb->num_sgs is set 0 for sg_tablesize = 0 controllers. > > >>> In mt76 we set urb->num_sgs to 1. I thought it is fine, but now I think > > >>> this is bug. We can fix that without changing allocation method and > > >>> still use SG allocation. Attached patch do this, please check if it works > > >>> on rpi. Patch is on top of your error path fixes. > > >> your patch didn't apply cleanly to yesterdays next. After some minor manual fixup, i was able to build them and here are the results starting from boot (please ignore the invalid time in the kernel log): > > >> https://gist.github.com/lategoodbye/33bd5bc75b9fc935faa231bc472defa8 > > > I think this is due to urb->transfer_length and sg[0]->length mismatch, > > > which should be addressed by my other patch. I'm attaching the patch > > > rebased on -next with this line integrated, please test. > > > > > > But there could be other bug's in mt76-usb SG code. > > I found another bug in mt76usb SG code. We set sg->offset bigger than > PAGE_SIZE that actually make sg point to memory in different page than > sg->page. Correcting this with another patch that avoid using sg > mapping with sg->length > PAGE_SIZE, fixed mt76x0u with AMD IOMMU: > https://bugzilla.kernel.org/show_bug.cgi?id=202241 > > I'm attaching 3 patches, they should also fix issue on rpi. > It's also possible that only 2 patches are sufficient: > > 0001-mt76usb-do-not-set-urb-num_sgs-to-1-for-non-SG-usb-h.patch > 0003-mt76usb-do-not-use-compound-head-page-for-SG-I-O.patch > > to fix the issue, if doing dma_map_{page,sg} is fine with > sg->offset == 0 and sg->length bigger than one page. > > Please test, thanks. > sorry for the delay, but i do this all in my spare time. The results for your recent patch series are better (no firmware timeout), but still no working wifi and still a warning: https://gist.github.com/lategoodbye/c4864e446821717419cbe65df07f8d8d I've identified the reason for the warning in dwc2: /* * We assume that DMA is always aligned in non-split * case or split out case. Warn if not. */ WARN_ON_ONCE(hsotg->params.host_dma && (chan->xfer_dma & 0x3)); Btw i can confirm a regression was introduced after 4.19, because in 4.19 there was no firmware timeout but even no working wifi: Feb 15 19:10:51 raspberrypi kernel: [ 79.818414] usb 1-1.3: new high-speed USB device number 6 using dwc2 Feb 15 19:10:51 raspberrypi kernel: [ 80.178470] usb 1-1.3: reset high-speed USB device number 6 using dwc2 Feb 15 19:10:51 raspberrypi kernel: [ 80.314388] mt76x0 1-1.3:1.0: ASIC revision: 76100002 MAC revision: 76502000 Feb 15 19:10:52 raspberrypi kernel: [ 81.118751] BBP version f000f200 Feb 15 19:10:52 raspberrypi kernel: [ 81.152995] mt76x0 1-1.3:1.0: EEPROM ver:02 fae:01 Feb 15 19:10:52 raspberrypi kernel: [ 81.153232] mt76x0 1-1.3:1.0: EEPROM country region 01 (channels 1-13) Feb 15 19:10:52 raspberrypi kernel: [ 81.176968] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht' Feb 15 19:10:52 raspberrypi kernel: [ 81.178255] usbcore: registered new interface driver mt76x0 Feb 15 19:10:53 raspberrypi kernel: [ 81.578982] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready Stefan > Stanislaw