summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Hsieh <rhsieh@nvidia.com>2011-07-11 14:42:40 +0800
committerNiket Sirsi <nsirsi@nvidia.com>2011-07-14 13:12:52 -0700
commit7cf8c4eb8e0e38c1e75db9da53b0b3163230275b (patch)
treeaf74081f20039a605ea4cae7da40af747d15f6fd
parentf291523b2976c118ed51bda35b6d9228272df994 (diff)
arm: tegra: correct 3D power gate WAR.
3D power gate should be always disabled to keep the power. Set T20 enabled by default. Bug 843271 Change-Id: I17745e37436414b3d5f905eb01e347743a012830 Reviewed-on: http://git-master/r/40342 Reviewed-by: Ching Kuang (Roger) Hsieh <rhsieh@nvidia.com> Tested-by: Ching Kuang (Roger) Hsieh <rhsieh@nvidia.com> Reviewed-by: Aleksandr Frid <afrid@nvidia.com> Reviewed-by: Karan Jhavar <kjhavar@nvidia.com> Reviewed-by: ChihJen Hsu <chhsu@nvidia.com> Reviewed-by: Yu-Fong (Foster) Cho <ycho@nvidia.com> Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
-rwxr-xr-x[-rw-r--r--]arch/arm/mach-tegra/Kconfig8
-rwxr-xr-x[-rw-r--r--]arch/arm/mach-tegra/common.c2
-rwxr-xr-x[-rw-r--r--]drivers/video/tegra/host/nvhost_acm.c3
3 files changed, 11 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 97419f957321..ea0232944feb 100644..100755
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -14,6 +14,7 @@ config ARCH_TEGRA_2x_SOC
select USB_ARCH_HAS_EHCI if USB_SUPPORT
select USB_ULPI if USB_SUPPORT
select USB_ULPI_VIEWPORT if USB_SUPPORT
+ select DISABLE_3D_POWERGATING
help
Support for NVIDIA Tegra AP20 and T20 processors, based on the
ARM CortexA9MP CPU and the ARM PL310 L2 cache controller
@@ -140,3 +141,10 @@ config TEGRA_MC_PROFILE
When enabled, provides a mechanism to perform statistical
sampling of the memory controller usage on a client-by-client
basis, and report the log through sysfs.
+
+config DISABLE_3D_POWERGATING
+ bool "Disable 3D power gate"
+ depends on ARCH_TEGRA_2x_SOC
+ help
+ This is for silicon errata of 3D power gating. By setting this
+ config, 3D power will never be gated.
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 3d7c047221f8..08378e96f686 100644..100755
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -155,7 +155,9 @@ void __init tegra_init_cache(void)
static void __init tegra_init_power(void)
{
tegra_powergate_power_off(TEGRA_POWERGATE_MPE);
+#if !CONFIG_DISABLE_3D_POWERGATING
tegra_powergate_power_off(TEGRA_POWERGATE_3D);
+#endif
tegra_powergate_power_off(TEGRA_POWERGATE_PCIE);
}
diff --git a/drivers/video/tegra/host/nvhost_acm.c b/drivers/video/tegra/host/nvhost_acm.c
index c2152287506f..b9f4dc5b4b6a 100644..100755
--- a/drivers/video/tegra/host/nvhost_acm.c
+++ b/drivers/video/tegra/host/nvhost_acm.c
@@ -32,7 +32,6 @@
#define ACM_TIMEOUT 1*HZ
-#define DISABLE_3D_POWERGATING
#define DISABLE_MPE_POWERGATING
void nvhost_module_busy(struct nvhost_module *mod)
@@ -151,7 +150,7 @@ int nvhost_module_init(struct nvhost_module *mod, const char *name,
mod->powered = false;
mod->powergate_id = get_module_powergate_id(name);
-#ifdef DISABLE_3D_POWERGATING
+#if CONFIG_DISABLE_3D_POWERGATING
/*
* It is possible for the 3d block to generate an invalid memory
* request during the power up sequence in some cases. Workaround