Revert "msm: kgsl: suspend device when the display does off"
This reverts commit 3b7ad9c5764eeef6439b9488c17f5e4d7500f101.
Change-Id: Ie54ad7e14fc297a1275e50957023bf6c614b1e5e
Signed-off-by: Dominic Binks <dbinks@codeaurora.org>
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index 0f8d474..165bbbf 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -329,12 +329,6 @@
KGSL_PWR_WARN(device, "state -> SUSPEND, device %d\n",
device->id);
break;
- case KGSL_STATE_SLUMBER:
- INIT_COMPLETION(device->hwaccess_gate);
- device->state = KGSL_STATE_SUSPEND;
- KGSL_PWR_WARN(device, "state -> SUSPEND, device %d\n",
- device->id);
- break;
default:
KGSL_PWR_ERR(device, "suspend fail, device %d\n",
device->id);
@@ -361,16 +355,28 @@
KGSL_PWR_WARN(device, "resume start\n");
mutex_lock(&device->mutex);
if (device->state == KGSL_STATE_SUSPEND) {
- device->state = KGSL_STATE_SLUMBER;
- status = 0;
- KGSL_PWR_WARN(device,
- "state -> SLUMBER, device %d\n",
- device->id);
+ device->requested_state = KGSL_STATE_ACTIVE;
+ kgsl_pwrctrl_pwrlevel_change(device, KGSL_PWRLEVEL_NOMINAL);
+ status = device->ftbl->start(device, 0);
+ if (status == 0) {
+ device->state = KGSL_STATE_ACTIVE;
+ KGSL_PWR_WARN(device,
+ "state -> ACTIVE, device %d\n",
+ device->id);
+ } else {
+ KGSL_PWR_ERR(device,
+ "resume failed, device %d\n",
+ device->id);
+ device->state = KGSL_STATE_INIT;
+ goto end;
+ }
complete_all(&device->hwaccess_gate);
}
device->requested_state = KGSL_STATE_NONE;
+end:
mutex_unlock(&device->mutex);
+ kgsl_check_idle(device);
KGSL_PWR_WARN(device, "resume end\n");
return status;
}
@@ -411,12 +417,9 @@
{
struct kgsl_device *device = container_of(h,
struct kgsl_device, display_off);
- KGSL_PWR_WARN(device, "early suspend start\n");
mutex_lock(&device->mutex);
- device->requested_state = KGSL_STATE_SLUMBER;
- kgsl_pwrctrl_sleep(device);
+ kgsl_pwrctrl_pwrlevel_change(device, KGSL_PWRLEVEL_NOMINAL);
mutex_unlock(&device->mutex);
- KGSL_PWR_WARN(device, "early suspend end\n");
}
EXPORT_SYMBOL(kgsl_early_suspend_driver);
@@ -439,13 +442,9 @@
{
struct kgsl_device *device = container_of(h,
struct kgsl_device, display_off);
- KGSL_PWR_WARN(device, "late resume start\n");
mutex_lock(&device->mutex);
- kgsl_pwrctrl_wake(device);
- device->pwrctrl.restore_slumber = 0;
+ kgsl_pwrctrl_pwrlevel_change(device, KGSL_PWRLEVEL_TURBO);
mutex_unlock(&device->mutex);
- kgsl_check_idle(device);
- KGSL_PWR_WARN(device, "late resume end\n");
}
EXPORT_SYMBOL(kgsl_late_resume_driver);
diff --git a/drivers/gpu/msm/kgsl_device.h b/drivers/gpu/msm/kgsl_device.h
index b6e79b8..2f369ed 100644
--- a/drivers/gpu/msm/kgsl_device.h
+++ b/drivers/gpu/msm/kgsl_device.h
@@ -46,7 +46,6 @@
#define KGSL_STATE_SUSPEND 0x00000010
#define KGSL_STATE_HUNG 0x00000020
#define KGSL_STATE_DUMP_AND_RECOVER 0x00000040
-#define KGSL_STATE_SLUMBER 0x00000080
#define KGSL_GRAPHICS_MEMORY_LOW_WATERMARK 0x1000000
diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c
index b4f22ee..84f2b33 100644
--- a/drivers/gpu/msm/kgsl_pwrctrl.c
+++ b/drivers/gpu/msm/kgsl_pwrctrl.c
@@ -583,8 +583,7 @@
mutex_lock(&device->mutex);
if (device->ftbl->isidle(device) &&
- (device->requested_state != KGSL_STATE_SLEEP) &&
- (device->requested_state != KGSL_STATE_SLUMBER))
+ (device->requested_state != KGSL_STATE_SLEEP))
kgsl_pwrscale_idle(device);
if (device->state & (KGSL_STATE_ACTIVE | KGSL_STATE_NAP)) {
@@ -623,8 +622,7 @@
void kgsl_pre_hwaccess(struct kgsl_device *device)
{
BUG_ON(!mutex_is_locked(&device->mutex));
- if (device->state & (KGSL_STATE_SLEEP | KGSL_STATE_NAP |
- KGSL_STATE_SLUMBER))
+ if (device->state & (KGSL_STATE_SLEEP | KGSL_STATE_NAP))
kgsl_pwrctrl_wake(device);
}
EXPORT_SYMBOL(kgsl_pre_hwaccess);
@@ -642,40 +640,8 @@
wait_for_completion(&device->recovery_gate);
mutex_lock(&device->mutex);
}
-}
+ }
-static int
-_slumber(struct kgsl_device *device)
-{
- int status = -EINVAL;
- if (!device)
- return -EINVAL;
- KGSL_PWR_WARN(device, "Slumber start\n");
-
- device->requested_state = KGSL_STATE_SLUMBER;
- del_timer(&device->idle_timer);
- switch (device->state) {
- case KGSL_STATE_ACTIVE:
- /* Wait for the device to become idle */
- device->ftbl->idle(device, KGSL_TIMEOUT_DEFAULT);
- case KGSL_STATE_NAP:
- case KGSL_STATE_SLEEP:
- device->ftbl->suspend_context(device);
- device->ftbl->stop(device);
- device->state = KGSL_STATE_SLUMBER;
- device->pwrctrl.restore_slumber = 1;
- KGSL_PWR_WARN(device, "state -> SLUMBER, device %d\n",
- device->id);
- break;
- default:
- break;
- }
- status = 0;
- /* Don't set requested state to NONE
- It's done in kgsl_pwrctrl_sleep*/
- KGSL_PWR_WARN(device, "Done going to slumber\n");
- return status;
-}
/******************************************************************/
/* Caller must hold the device mutex. */
@@ -690,24 +656,13 @@
goto nap;
} else if (device->requested_state == KGSL_STATE_SLEEP) {
if (device->state == KGSL_STATE_NAP ||
- device->ftbl->isidle(device)) {
- if (!device->pwrctrl.restore_slumber)
- goto sleep;
- else
- goto slumber;
- }
- } else if (device->requested_state == KGSL_STATE_SLUMBER) {
- if (device->ftbl->isidle(device))
- goto slumber;
+ device->ftbl->isidle(device))
+ goto sleep;
}
device->requested_state = KGSL_STATE_NONE;
return -EBUSY;
-
-slumber:
- _slumber(device);
-
sleep:
kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF);
kgsl_pwrctrl_axi(device, KGSL_PWRFLAGS_OFF);
@@ -739,24 +694,6 @@
}
EXPORT_SYMBOL(kgsl_pwrctrl_sleep);
-static int
-_wake_from_slumber(struct kgsl_device *device)
-{
- int status = -EINVAL;
- if (!device)
- return -EINVAL;
-
- KGSL_PWR_WARN(device, "wake from slumber start\n");
-
- device->requested_state = KGSL_STATE_ACTIVE;
- kgsl_pwrctrl_pwrlevel_change(device, KGSL_PWRLEVEL_NOMINAL);
- status = device->ftbl->start(device, 0);
- device->requested_state = KGSL_STATE_NONE;
-
- KGSL_PWR_WARN(device, "Done waking from slumber\n");
- return status;
-}
-
/******************************************************************/
/* Caller must hold the device mutex. */
void kgsl_pwrctrl_wake(struct kgsl_device *device)
@@ -764,9 +701,6 @@
if (device->state == KGSL_STATE_SUSPEND)
return;
- if (device->state == KGSL_STATE_SLUMBER)
- _wake_from_slumber(device);
-
if (device->state != KGSL_STATE_NAP) {
kgsl_pwrctrl_axi(device, KGSL_PWRFLAGS_ON);
kgsl_pwrscale_wake(device);
diff --git a/drivers/gpu/msm/kgsl_pwrctrl.h b/drivers/gpu/msm/kgsl_pwrctrl.h
index 17dab76..127a19b 100644
--- a/drivers/gpu/msm/kgsl_pwrctrl.h
+++ b/drivers/gpu/msm/kgsl_pwrctrl.h
@@ -56,7 +56,6 @@
const char *src_clk_name;
s64 time;
struct kgsl_busy busy;
- unsigned int restore_slumber;
};
void kgsl_pwrctrl_clk(struct kgsl_device *device, int state);