diff options
author | Philip Rakity <prakity@nvidia.com> | 2013-03-08 17:50:15 -0800 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2013-04-06 18:16:15 -0700 |
commit | f7a9e88f54e89173da5c00c083569846742855f6 (patch) | |
tree | e857ba517be86f2583fcd193242a1a0d13981602 /drivers/usb/gadget | |
parent | bfccaf63cc6f8d267e06d6378cb52b5b62a22cda (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.c | 7 |
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); } |