From 3fd40dad57b28da176fd62dabfcd3d63578879ed Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 6 Jan 2011 20:16:10 -0800 Subject: [PATCH] video: tegra: host: 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 is to disable 3d block power gating. Change-Id: I10efad1f7d3dada7cd3fe18e268f06d60bdbab67 Signed-off-by: Colin Cross --- drivers/video/tegra/host/nvhost_acm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/video/tegra/host/nvhost_acm.c b/drivers/video/tegra/host/nvhost_acm.c index c4ac035a26ec..a4bbce2b6f1d 100644 --- a/drivers/video/tegra/host/nvhost_acm.c +++ b/drivers/video/tegra/host/nvhost_acm.c @@ -30,6 +30,8 @@ #define ACM_TIMEOUT 1*HZ +#define DISABLE_3D_POWERGATING + void nvhost_module_busy(struct nvhost_module *mod) { mutex_lock(&mod->lock); @@ -139,6 +141,21 @@ int nvhost_module_init(struct nvhost_module *mod, const char *name, mod->parent = parent; mod->powered = false; mod->powergate_id = get_module_powergate_id(name); + +#ifdef 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 + * is to disable 3d block power gating. + */ + if (mod->powergate_id == TEGRA_POWERGATE_3D) { + tegra_powergate_sequence_power_up(mod->powergate_id, + mod->clk[0]); + clk_disable(mod->clk[0]); + mod->powergate_id = -1; + } +#endif + mutex_init(&mod->lock); init_waitqueue_head(&mod->idle); INIT_DELAYED_WORK(&mod->powerdown, powerdown_handler); -- 2.34.1