diff options
author | Abhishek Aggarwal <aaggarwal@nvidia.com> | 2010-04-15 16:32:00 +0530 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-04-15 20:26:35 -0700 |
commit | 9b75f26f52e57e0d220c38e92e77443e67204b82 (patch) | |
tree | aad8dd490fe642766496ccf75d9574184f11b445 /arch | |
parent | ba65300ac207e5af406c97bdf78f8eb54ee7ba7b (diff) |
tegra usb: Enabling busy hints for cpu clock
To enhance the USB MSD performance, the busy hints for cpu clock have
been enabled on cable connect and its frequency is being boosted to
300 MHz.
Bug 654486: [whistler/android] - Large difference in USB MSD perf with
DFS OFF
Change-Id: I4471665bd02b7b49b368aec4aac5f1b89038c309
Reviewed-on: http://git-master/r/1114
Tested-by: Abhishek Aggarwal <aaggarwal@nvidia.com>
Reviewed-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Tested-by: Seshendra Gadagottu <sgadagottu@nvidia.com>
Reviewed-by: Narendra Damahe <ndamahe@nvidia.com>
Reviewed-by: Gary King <gking@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/mach-tegra/nvddk/nvddk_usbphy.c | 22 | ||||
-rwxr-xr-x | arch/arm/mach-tegra/nvddk/nvddk_usbphy_priv.h | 5 |
2 files changed, 23 insertions, 4 deletions
diff --git a/arch/arm/mach-tegra/nvddk/nvddk_usbphy.c b/arch/arm/mach-tegra/nvddk/nvddk_usbphy.c index 2ec63f3eae91..95d92d3c66ce 100644 --- a/arch/arm/mach-tegra/nvddk/nvddk_usbphy.c +++ b/arch/arm/mach-tegra/nvddk/nvddk_usbphy.c @@ -244,17 +244,31 @@ UsbPhyDfsBusyHint( NvRmDfsBusyHint pUsbHintOn[] = { { NvRmDfsClockId_Emc, NV_WAIT_INFINITE, USB_HW_MIN_SYSTEM_FREQ_KH, NV_TRUE }, - { NvRmDfsClockId_Ahb, NV_WAIT_INFINITE, USB_HW_MIN_SYSTEM_FREQ_KH, NV_TRUE } + { NvRmDfsClockId_Ahb, NV_WAIT_INFINITE, USB_HW_MIN_SYSTEM_FREQ_KH, NV_TRUE }, + { NvRmDfsClockId_Cpu, NV_WAIT_INFINITE, USB_HW_MIN_CPU_FREQ_KH, NV_TRUE } }; NvRmDfsBusyHint pUsbHintOff[] = { { NvRmDfsClockId_Emc, 0, 0, NV_TRUE }, - { NvRmDfsClockId_Ahb, 0, 0, NV_TRUE } + { NvRmDfsClockId_Ahb, 0, 0, NV_TRUE }, + { NvRmDfsClockId_Cpu, 0, 0, NV_TRUE } }; NvError e = NvSuccess; + NvU32 NumHints; + + if (hUsbPhy->IsHostMode) + { + // Do not enable busy hints for cpu clock in host mode + NumHints = NV_ARRAY_SIZE(pUsbHintOn) - 1; + } + else + { + NumHints = NV_ARRAY_SIZE(pUsbHintOn); + } pUsbHintOn[0].BoostDurationMs = BoostDurationMs; pUsbHintOn[1].BoostDurationMs = BoostDurationMs; + pUsbHintOn[2].BoostDurationMs = BoostDurationMs; if (DfsOn) { @@ -274,7 +288,7 @@ UsbPhyDfsBusyHint( return NvRmPowerBusyHintMulti(hUsbPhy->hRmDevice, hUsbPhy->RmPowerClientId, pUsbHintOn, - NV_ARRAY_SIZE(pUsbHintOn), + NumHints, NvRmDfsBusyHintSyncMode_Async); } else @@ -293,7 +307,7 @@ UsbPhyDfsBusyHint( return NvRmPowerBusyHintMulti(hUsbPhy->hRmDevice, hUsbPhy->RmPowerClientId, pUsbHintOff, - NV_ARRAY_SIZE(pUsbHintOff), + NumHints, NvRmDfsBusyHintSyncMode_Async); } diff --git a/arch/arm/mach-tegra/nvddk/nvddk_usbphy_priv.h b/arch/arm/mach-tegra/nvddk/nvddk_usbphy_priv.h index 885cbc8a431f..83e24c9c28dd 100755 --- a/arch/arm/mach-tegra/nvddk/nvddk_usbphy_priv.h +++ b/arch/arm/mach-tegra/nvddk/nvddk_usbphy_priv.h @@ -61,6 +61,11 @@ extern "C" enum {USB_HW_MIN_SYSTEM_FREQ_KH = 100000}; /** + * Minimum cpu frequency required for USB for optimal performance + */ +enum {USB_HW_MIN_CPU_FREQ_KH = 300000}; + +/** * Wait time(1 second) for controller H/W status to change before giving up. */ enum {USB_PHY_HW_TIMEOUT_US = 1000000}; |