The usb_*_msg() functions expect a timeout in msecs but are given HZ,
which is ticks per second. If HZ=100, firmware download often times out
when there is modest USB utilization and the device fails to initialize.

Replaces HZ in usb_*_msg timeouts with 1000 msec since HZ is one second
for timeouts in jiffies.

Signed-off-by: Anthony Romano <anthony.rom...@coreos.com>
---
 drivers/net/wireless/ath/ath9k/hif_usb.c | 9 +++++----
 drivers/net/wireless/ath/ath9k/hif_usb.h | 2 ++
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c 
b/drivers/net/wireless/ath/ath9k/hif_usb.c
index e1c338cb9cb5..de2d212f39ec 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -997,7 +997,8 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb 
*hif_dev)
                err = usb_control_msg(hif_dev->udev,
                                      usb_sndctrlpipe(hif_dev->udev, 0),
                                      FIRMWARE_DOWNLOAD, 0x40 | USB_DIR_OUT,
-                                     addr >> 8, 0, buf, transfer, HZ);
+                                     addr >> 8, 0, buf, transfer,
+                                     USB_MSG_TIMEOUT);
                if (err < 0) {
                        kfree(buf);
                        return err;
@@ -1020,7 +1021,7 @@ static int ath9k_hif_usb_download_fw(struct 
hif_device_usb *hif_dev)
        err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0),
                              FIRMWARE_DOWNLOAD_COMP,
                              0x40 | USB_DIR_OUT,
-                             firm_offset >> 8, 0, NULL, 0, HZ);
+                             firm_offset >> 8, 0, NULL, 0, USB_MSG_TIMEOUT);
        if (err)
                return -EIO;
 
@@ -1249,7 +1250,7 @@ static int send_eject_command(struct usb_interface 
*interface)
 
        dev_info(&udev->dev, "Ejecting storage device...\n");
        r = usb_bulk_msg(udev, usb_sndbulkpipe(udev, bulk_out_ep),
-               cmd, 31, NULL, 2000);
+               cmd, 31, NULL, 2 * USB_MSG_TIMEOUT);
        kfree(cmd);
        if (r)
                return r;
@@ -1314,7 +1315,7 @@ static void ath9k_hif_usb_reboot(struct usb_device *udev)
                return;
 
        ret = usb_interrupt_msg(udev, usb_sndintpipe(udev, USB_REG_OUT_PIPE),
-                          buf, 4, NULL, HZ);
+                          buf, 4, NULL, USB_MSG_TIMEOUT);
        if (ret)
                dev_err(&udev->dev, "ath9k_htc: USB reboot failed\n");
 
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h 
b/drivers/net/wireless/ath/ath9k/hif_usb.h
index 7c2ef7ecd98b..7846916aa01d 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.h
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.h
@@ -71,6 +71,8 @@ extern int htc_use_dev_fw;
 #define USB_REG_IN_PIPE   3
 #define USB_REG_OUT_PIPE  4
 
+#define USB_MSG_TIMEOUT 1000 /* (ms) */
+
 #define HIF_USB_MAX_RXPIPES 2
 #define HIF_USB_MAX_TXPIPES 4
 
-- 
2.11.0.rc2

_______________________________________________
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel

Reply via email to