Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 885582c4 authored by Simon Arlott's avatar Simon Arlott Committed by Greg Kroah-Hartman
Browse files

USB: cxacru: firmware writes on OHCI are slow, log progress



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: default avatarSimon Arlott <simon@fire.lp0.eu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent c68bb0d7
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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);
@@ -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);
@@ -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,