Skip to content

Commit

Permalink
USB: cxacru: firmware writes on OHCI are slow, log progress
Browse files Browse the repository at this point in the history
Firmware writing takes 256ms per 4KB with OHCI, which
is very slow compared to 7ms per 4KB with UHCI.

Until I have access to a hardware USB analyser it may
not be possible to determine why this happens.

Instead of appearing to do nothing, log progress when
writing firmware and then log the ATM device information
when finished. Remove an unnecessary 4 second delay.

Signed-off-by: Simon Arlott <simon@fire.lp0.eu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Simon Arlott authored and Greg Kroah-Hartman committed Mar 2, 2010
1 parent c68bb0d commit 885582c
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions drivers/usb/atm/cxacru.c
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,9 @@ static int cxacru_atm_start(struct usbatm_data *usbatm_instance,
mutex_unlock(&instance->poll_state_serialize);
mutex_unlock(&instance->adsl_state_serialize);

printk(KERN_INFO "%s%d: %s %pM\n", atm_dev->type, atm_dev->number,
usbatm_instance->description, atm_dev->esi);

if (start_polling)
cxacru_poll_status(&instance->poll_work.work);
return 0;
Expand Down Expand Up @@ -939,6 +942,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance,
}

/* Firmware */
usb_info(usbatm, "loading firmware\n");
ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, FW_ADDR, fw->data, fw->size);
if (ret) {
usb_err(usbatm, "Firmware upload failed: %d\n", ret);
Expand All @@ -947,6 +951,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance,

/* Boot ROM patch */
if (instance->modem_type->boot_rom_patch) {
usb_info(usbatm, "loading boot ROM patch\n");
ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, BR_ADDR, bp->data, bp->size);
if (ret) {
usb_err(usbatm, "Boot ROM patching failed: %d\n", ret);
Expand All @@ -961,6 +966,7 @@ static void cxacru_upload_firmware(struct cxacru_data *instance,
return;
}

usb_info(usbatm, "starting device\n");
if (instance->modem_type->boot_rom_patch) {
val = cpu_to_le32(BR_ADDR);
ret = cxacru_fw(usb_dev, FW_WRITE_MEM, 0x2, 0x0, BR_STACK_ADDR, (u8 *) &val, 4);
Expand Down Expand Up @@ -1004,8 +1010,6 @@ static void cxacru_upload_firmware(struct cxacru_data *instance,
return;
}
}

msleep_interruptible(4000);
}

static int cxacru_find_firmware(struct cxacru_data *instance,
Expand Down

0 comments on commit 885582c

Please sign in to comment.