Merge "msm: kgsl: Call adreno_init only once on startup"
diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c
index c7e5717..9b45432 100644
--- a/drivers/gpu/msm/adreno.c
+++ b/drivers/gpu/msm/adreno.c
@@ -1640,6 +1640,8 @@
 	adreno_ringbuffer_close(&adreno_dev->ringbuffer);
 	kgsl_device_platform_remove(device);
 
+	clear_bit(ADRENO_DEVICE_INITIALIZED, &adreno_dev->priv);
+
 	return 0;
 }
 
@@ -1649,6 +1651,12 @@
 	int i;
 
 	kgsl_pwrctrl_set_state(device, KGSL_STATE_INIT);
+	/*
+	 * initialization only needs to be done once initially until
+	 * device is shutdown
+	 */
+	if (test_bit(ADRENO_DEVICE_INITIALIZED, &adreno_dev->priv))
+		return 0;
 
 	/* Power up the device */
 	kgsl_pwrctrl_enable(device);
@@ -1674,6 +1682,7 @@
 		BUG_ON(1);
 	}
 
+	kgsl_pwrctrl_set_state(device, KGSL_STATE_INIT);
 	/*
 	 * Check if firmware supports the sync lock PM4 packets needed
 	 * for IOMMUv1
@@ -1710,6 +1719,8 @@
 	if (adreno_is_a3xx(adreno_dev))
 		adreno_a3xx_pwron_fixup_init(adreno_dev);
 
+	set_bit(ADRENO_DEVICE_INITIALIZED, &adreno_dev->priv);
+
 	return 0;
 }
 
diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h
index 78f1822..6fe3027 100644
--- a/drivers/gpu/msm/adreno.h
+++ b/drivers/gpu/msm/adreno.h
@@ -197,6 +197,7 @@
 enum adreno_device_flags {
 	ADRENO_DEVICE_PWRON = 0,
 	ADRENO_DEVICE_PWRON_FIXUP = 1,
+	ADRENO_DEVICE_INITIALIZED = 2,
 };
 
 #define PERFCOUNTER_FLAG_NONE 0x0