From dac6ee4b1a6c15e200377c66e0036744e0b35eaf Mon Sep 17 00:00:00 2001
From: Andrew Bresticker <abrestic@chromium.org>
Date: Wed, 27 Jan 2016 13:40:19 -0800
Subject: [PATCH] Revert "Revert "drm/nouveau: pmu: Change the init value of
 elpg_disable_depth to 1""

This reverts commit 41b5f71a3a131dd25967631d8eb9481d6e692558.

Nouveau ELPG appears to be causing hangs at reboot time.  Disable it for
now until the root cause is found.

BUG=b:26544917
TEST=reboot-cycle.sh on Smaug.

Change-Id: Ie682aceeb62af98392180d41208a1aa905700651
Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
Reviewed-on: https://chrome-internal-review.googlesource.com/246296
Reviewed-by: David Riley <davidriley@google.com>
Commit-Queue: Andrew Bresticker <abrestic@google.com>
Tested-by: Andrew Bresticker <abrestic@google.com>
---
 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c | 10 +++++-----
 drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c |  9 +++++----
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c
index 1c15b73efc6f2..d3cb4ba83731f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c
@@ -3182,7 +3182,11 @@ gk20a_pmu_init(struct nvkm_object *object)
 	nvkm_timer_alarm(priv, PMU_DVFS_INTERVAL, &priv->alarm);
 
 	mutex_lock(&priv->elpg_mutex);
-	priv->elpg_disable_depth = 0;
+	/*
+	 * ELPG will be enabled when PMU finishes booting, so setting the
+	 * counter to 1 initialy.
+	 */
+	priv->elpg_disable_depth = 1;
 	mutex_unlock(&priv->elpg_mutex);
 
 	mutex_lock(&priv->clk_gating_mutex);
@@ -3204,10 +3208,6 @@ gk20a_pmu_fini(struct nvkm_object *object, bool suspend)
 	cancel_work_sync(&priv->base.recv.work);
 	cancel_work_sync(&priv->pg_init);
 
-	mutex_lock(&priv->elpg_mutex);
-	priv->elpg_disable_depth = 0;
-	mutex_unlock(&priv->elpg_mutex);
-
 	mutex_lock(&priv->clk_gating_mutex);
 	priv->clk_gating_disable_depth = 0;
 	mutex_unlock(&priv->clk_gating_mutex);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c
index a0507655c4b65..450b14220b728 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.c
@@ -2613,9 +2613,6 @@ gm20b_pmu_fini(struct nvkm_object *object, bool suspend)
 		gk20a_pmu_enable(priv, pmc, false);
 		priv->isr_enabled = false;
 		mutex_unlock(&priv->isr_mutex);
-		mutex_lock(&priv->elpg_mutex);
-		priv->elpg_disable_depth = 0;
-		mutex_unlock(&priv->elpg_mutex);
 		priv->pmu_state = PMU_STATE_OFF;
 		mutex_lock(&priv->clk_gating_mutex);
 		priv->clk_gating_disable_depth = 0;
@@ -2694,7 +2691,11 @@ gm20b_pmu_init(struct nvkm_object *object) {
 	priv->pmu_setup_elpg = gm20b_pmu_setup_elpg;
 
 	mutex_lock(&priv->elpg_mutex);
-	priv->elpg_disable_depth = 0;
+	/*
+	 * ELPG will be enabled when PMU finishes booting, so setting the
+	 * counter to 1 initialy.
+	 */
+	priv->elpg_disable_depth = 1;
 	mutex_unlock(&priv->elpg_mutex);
 
 	mutex_lock(&priv->clk_gating_mutex);