summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorAbhishek Aggarwal <aaggarwal@nvidia.com>2010-04-15 16:32:00 +0530
committerGary King <gking@nvidia.com>2010-04-15 20:26:35 -0700
commit9b75f26f52e57e0d220c38e92e77443e67204b82 (patch)
treeaad8dd490fe642766496ccf75d9574184f11b445 /arch
parentba65300ac207e5af406c97bdf78f8eb54ee7ba7b (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.c22
-rwxr-xr-xarch/arm/mach-tegra/nvddk/nvddk_usbphy_priv.h5
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};