summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorPhilip Rakity <prakity@nvidia.com>2013-03-08 17:50:15 -0800
committerSimone Willett <swillett@nvidia.com>2013-04-06 18:16:15 -0700
commitf7a9e88f54e89173da5c00c083569846742855f6 (patch)
treee857ba517be86f2583fcd193242a1a0d13981602 /drivers/usb/gadget
parentbfccaf63cc6f8d267e06d6378cb52b5b62a22cda (diff)
gadget:tegra decrease uFrame count for interrupt latency
The usb command register defines the minimum time that the usb controller can interrupt the cpu. This is set (by default) to 1ms (8 uFrames). This value was set in the standard a LONG time ago. Reduce the interrupt time to 125uS as tegra is able to handle interrupts at this rate. This change improves the adb throughtput. This change improves the adb throughtput from 1.2 MB/sec to 5.5-5.9 MB/Sec. Bug 1216801 Change-Id: I43957cf23247846e8cab11eea7a9a0d4e4def2e1 Reviewed-on: http://git-master/r/210013 (cherry picked from commit 3fff060f6b127790869025a702ef8094685a95b1) Signed-off-by: Rohith Seelaboyina <rseelaboyina@nvidia.com> Reviewed-on: http://git-master/r/211045 Reviewed-by: Rakesh Bodla <rbodla@nvidia.com> Reviewed-by: Philip Rakity <prakity@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/tegra_udc.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/gadget/tegra_udc.c b/drivers/usb/gadget/tegra_udc.c
index 8577d05aea6f..f5f3e248099d 100644
--- a/drivers/usb/gadget/tegra_udc.c
+++ b/drivers/usb/gadget/tegra_udc.c
@@ -371,8 +371,11 @@ static void dr_controller_run(struct tegra_udc *udc)
temp |= USB_MODE_CTRL_MODE_DEVICE;
udc_writel(udc, temp, USB_MODE_REG_OFFSET);
+ /* set interrupt latency to 125 uS (1 uFrame) */
/* Set controller to Run */
temp = udc_readl(udc, USB_CMD_REG_OFFSET);
+ temp &= ~USB_CMD_ITC;
+ temp |= USB_CMD_ITC_1_MICRO_FRM;
if (can_pullup(udc))
temp |= USB_CMD_RUN_STOP;
else
@@ -1476,7 +1479,10 @@ static int tegra_pullup(struct usb_gadget *gadget, int is_on)
OTG_STATE_B_PERIPHERAL)
return 0;
+ /* set interrupt latency to 125 uS (1 uFrame) */
tmp = udc_readl(udc, USB_CMD_REG_OFFSET);
+ tmp &= ~USB_CMD_ITC;
+ tmp |= USB_CMD_ITC_1_MICRO_FRM;
if (can_pullup(udc)) {
udc_writel(udc, tmp | USB_CMD_RUN_STOP, USB_CMD_REG_OFFSET);
/*
@@ -1491,7 +1497,6 @@ static int tegra_pullup(struct usb_gadget *gadget, int is_on)
if (udc->connect_type == CONNECT_TYPE_SDP)
schedule_delayed_work(&udc->non_std_charger_work,
msecs_to_jiffies(NON_STD_CHARGER_DET_TIME_MS));
-
} else {
udc_writel(udc, (tmp & ~USB_CMD_RUN_STOP), USB_CMD_REG_OFFSET);
}