From 10ffb2add8263d57dd7c2c9d89d68fdcb5ca88c0 Mon Sep 17 00:00:00 2001 From: "Miouyouyou (Myy)" Date: Thu, 20 Sep 2018 22:36:50 +0200 Subject: [PATCH] Trying to resolve ath9k issues with a patch from @SolidHal This patch is untested. However it compiles fine. It's supposed to resolve some issues stated in https://github.com/Miouyouyou/RockMyy/issues/3 That said, since I don't have any Veyron Chromebook in hands, I cannot test it directly. Signed-off-by: Miouyouyou (Myy) --- GetPatchAndCompileKernel.sh | 1 + ...verse-do-not-use-bulk-on-EP3-and-EP4.patch | 101 ++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 patches/kernel/v4.19/0007-drivers-wifi-ath9k-reverse-do-not-use-bulk-on-EP3-and-EP4.patch diff --git a/GetPatchAndCompileKernel.sh b/GetPatchAndCompileKernel.sh index cd75dec..24c4683 100644 --- a/GetPatchAndCompileKernel.sh +++ b/GetPatchAndCompileKernel.sh @@ -56,6 +56,7 @@ export KERNEL_PATCHES=" 0004-Remove-the-dependency-to-the-clk_mali-symbol.patch 0005-drivers-mmc-dw-mci-rockchip-Handle-ASUS-Tinkerboard.patch 0006-soc-rockchip-power-domain-export-idle-request.patch +0007-drivers-wifi-ath9k-reverse-do-not-use-bulk-on-EP3-and-EP4.patch 0100-media-Add-JPEG_RAW-format.patch 0101-media-Add-controls-for-JPEG-quantization-tables.patch " diff --git a/patches/kernel/v4.19/0007-drivers-wifi-ath9k-reverse-do-not-use-bulk-on-EP3-and-EP4.patch b/patches/kernel/v4.19/0007-drivers-wifi-ath9k-reverse-do-not-use-bulk-on-EP3-and-EP4.patch new file mode 100644 index 0000000..551c18c --- /dev/null +++ b/patches/kernel/v4.19/0007-drivers-wifi-ath9k-reverse-do-not-use-bulk-on-EP3-and-EP4.patch @@ -0,0 +1,101 @@ +FROM: Solidhal + +This patch reverses commit 2b721118b7821107757eb1d37af4b60e877b27e7, as can bee seen here: +https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2b721118b7821107757eb1d37af4b60e877b27e7 + +This commit caused issues on veyron speedy with ath9k and dwc2 drivers. Any ath9k device (ar9271) +would intermittently work, most of the time ending in errors as can bee seen here: +https://github.com/SolidHal/PrawnOS/issues/38 +This commit fixes that issue. +This is only a temporary work around while a permenant fix is found, as this commit seems to only cause issues +with dwc2 + +diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c +--- b/drivers/net/wireless/ath/ath9k/hif_usb.c ++++ a/drivers/net/wireless/ath/ath9k/hif_usb.c +@@ -115,10 +115,10 @@ + cmd->skb = skb; + cmd->hif_dev = hif_dev; + ++ usb_fill_bulk_urb(urb, hif_dev->udev, ++ usb_sndbulkpipe(hif_dev->udev, USB_REG_OUT_PIPE), +- usb_fill_int_urb(urb, hif_dev->udev, +- usb_sndintpipe(hif_dev->udev, USB_REG_OUT_PIPE), + skb->data, skb->len, ++ hif_usb_regout_cb, cmd); +- hif_usb_regout_cb, cmd, 1); + + usb_anchor_urb(urb, &hif_dev->regout_submitted); + ret = usb_submit_urb(urb, GFP_KERNEL); +@@ -723,11 +723,11 @@ + return; + } + ++ usb_fill_bulk_urb(urb, hif_dev->udev, ++ usb_rcvbulkpipe(hif_dev->udev, +- usb_fill_int_urb(urb, hif_dev->udev, +- usb_rcvintpipe(hif_dev->udev, + USB_REG_IN_PIPE), + nskb->data, MAX_REG_IN_BUF_SIZE, ++ ath9k_hif_usb_reg_in_cb, nskb); +- ath9k_hif_usb_reg_in_cb, nskb, 1); + } + + resubmit: +@@ -909,11 +909,11 @@ + goto err_skb; + } + ++ usb_fill_bulk_urb(urb, hif_dev->udev, ++ usb_rcvbulkpipe(hif_dev->udev, +- usb_fill_int_urb(urb, hif_dev->udev, +- usb_rcvintpipe(hif_dev->udev, + USB_REG_IN_PIPE), + skb->data, MAX_REG_IN_BUF_SIZE, ++ ath9k_hif_usb_reg_in_cb, skb); +- ath9k_hif_usb_reg_in_cb, skb, 1); + + /* Anchor URB */ + usb_anchor_urb(urb, &hif_dev->reg_in_submitted); +@@ -1031,7 +1031,9 @@ + + static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev) + { ++ struct usb_host_interface *alt = &hif_dev->interface->altsetting[0]; ++ struct usb_endpoint_descriptor *endp; ++ int ret, idx; +- int ret; + + ret = ath9k_hif_usb_download_fw(hif_dev); + if (ret) { +@@ -1041,6 +1043,20 @@ + return ret; + } + ++ /* On downloading the firmware to the target, the USB descriptor of EP4 ++ * is 'patched' to change the type of the endpoint to Bulk. This will ++ * bring down CPU usage during the scan period. ++ */ ++ for (idx = 0; idx < alt->desc.bNumEndpoints; idx++) { ++ endp = &alt->endpoint[idx].desc; ++ if ((endp->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ++ == USB_ENDPOINT_XFER_INT) { ++ endp->bmAttributes &= ~USB_ENDPOINT_XFERTYPE_MASK; ++ endp->bmAttributes |= USB_ENDPOINT_XFER_BULK; ++ endp->bInterval = 0; ++ } ++ } ++ + /* Alloc URBs */ + ret = ath9k_hif_usb_alloc_urbs(hif_dev); + if (ret) { +@@ -1252,7 +1268,7 @@ + if (!buf) + return; + ++ ret = usb_bulk_msg(udev, usb_sndbulkpipe(udev, USB_REG_OUT_PIPE), +- ret = usb_interrupt_msg(udev, usb_sndintpipe(udev, USB_REG_OUT_PIPE), + buf, 4, NULL, USB_MSG_TIMEOUT); + if (ret) + dev_err(&udev->dev, "ath9k_htc: USB reboot failed\n"); +