From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pavankumar Kondeti Subject: [PATCH 1/5] USB: gadget: Use Zero Interrupt Threshold Control for ci13xxx_msm Date: Fri, 29 Apr 2011 10:52:08 +0530 Message-ID: <1304054532-3523-1-git-send-email-pkondeti@codeaurora.org> References: <1303977693-18389-1-git-send-email-pkondeti@codeaurora.org> Return-path: Received: from wolverine01.qualcomm.com ([199.106.114.254]:2351 "EHLO wolverine01.qualcomm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751609Ab1D2FW0 (ORCPT ); Fri, 29 Apr 2011 01:22:26 -0400 In-Reply-To: <1303977693-18389-1-git-send-email-pkondeti@codeaurora.org> Sender: linux-arm-msm-owner@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org To: greg@kroah.com, linux-usb@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org, Anji jonnala , Pavankumar Kondeti From: Anji jonnala ITC (Interrupt Threshold Control) field is to set the maximum rate at which the device controller will issue interrupts. The maximum interrupt interval is measured in micro frames. Valid values are 0, 1, 2, 4, 8, 16, 32, 64. The default value is 8 micro frames. Set ITC to zero for MSM to gain performance. Signed-off-by: Anji jonnala Signed-off-by: Pavankumar Kondeti --- drivers/usb/gadget/ci13xxx_msm.c | 3 ++- drivers/usb/gadget/ci13xxx_udc.c | 11 +++++++++++ drivers/usb/gadget/ci13xxx_udc.h | 3 +++ 3 files changed, 16 insertions(+), 1 deletions(-) diff --git a/drivers/usb/gadget/ci13xxx_msm.c b/drivers/usb/gadget/ci13xxx_msm.c index 139ac94..aa8319b 100644 --- a/drivers/usb/gadget/ci13xxx_msm.c +++ b/drivers/usb/gadget/ci13xxx_msm.c @@ -64,7 +64,8 @@ static struct ci13xxx_udc_driver ci13xxx_msm_udc_driver = { .flags = CI13XXX_REGS_SHARED | CI13XXX_REQUIRE_TRANSCEIVER | CI13XXX_PULLUP_ON_VBUS | - CI13XXX_DISABLE_STREAMING, + CI13XXX_DISABLE_STREAMING | + CI13XXX_ZERO_ITC, .notify_event = ci13xxx_msm_notify_event, }; diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c index e09178b..15857e0 100644 --- a/drivers/usb/gadget/ci13xxx_udc.c +++ b/drivers/usb/gadget/ci13xxx_udc.c @@ -318,6 +318,17 @@ static int hw_device_reset(struct ci13xxx *udc) hw_cwrite(CAP_USBMODE, USBMODE_CM, USBMODE_CM_DEVICE); hw_cwrite(CAP_USBMODE, USBMODE_SLOM, USBMODE_SLOM); /* HW >= 2.3 */ + /* + * ITC (Interrupt Threshold Control) field is to set the maximum + * rate at which the device controller will issue interrupts. + * The maximum interrupt interval measured in micro frames. + * Valid values are 0, 1, 2, 4, 8, 16, 32, 64. The default value is + * 8 micro frames. If CPU can handle interrupts at faster rate, ITC + * can be set to lesser value to gain performance. + */ + if (udc->udc_driver->flags & CI13XXX_ZERO_ITC) + hw_cwrite(CAP_USBCMD, USBCMD_ITC_MASK, USBCMD_ITC(0)); + if (hw_cread(CAP_USBMODE, USBMODE_CM) != USBMODE_CM_DEVICE) { pr_err("cannot enter in device mode"); pr_err("lpm = %i", hw_bank.lpm); diff --git a/drivers/usb/gadget/ci13xxx_udc.h b/drivers/usb/gadget/ci13xxx_udc.h index 2370777..a230325 100644 --- a/drivers/usb/gadget/ci13xxx_udc.h +++ b/drivers/usb/gadget/ci13xxx_udc.h @@ -108,6 +108,7 @@ struct ci13xxx_udc_driver { #define CI13XXX_REQUIRE_TRANSCEIVER BIT(1) #define CI13XXX_PULLUP_ON_VBUS BIT(2) #define CI13XXX_DISABLE_STREAMING BIT(3) +#define CI13XXX_ZERO_ITC BIT(4) #define CI13XXX_CONTROLLER_RESET_EVENT 0 #define CI13XXX_CONTROLLER_STOPPED_EVENT 1 @@ -189,6 +190,8 @@ struct ci13xxx { #define USBMODE_CM_HOST (0x03UL << 0) #define USBMODE_SLOM BIT(3) #define USBMODE_SDIS BIT(4) +#define USBCMD_ITC(n) (n << 16) /* n = 0, 1, 2, 4, 8, 16, 32, 64 */ +#define USBCMD_ITC_MASK (0xFF << 16) /* ENDPTCTRL */ #define ENDPTCTRL_RXS BIT(0) -- Sent by a consultant of the Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.