From c284516ead33708e135eeaa53672d835849f25fb Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Wed, 12 Oct 2016 15:14:15 +0530 Subject: gpu: nvgpu: support suspend/resume with user disabled railgating We take an extra power refcount when we disable railgating through railgate_enable sysfs And that breaks suspend/resume since we check for power refcount first in gk20a_pm_suspend() Fix this with following : - set a flag user_railgate_disabled when User disables railgating through sysfs railgate_enable - in gk20a_pm_suspend(), drop one power refcount if flag is set - in gk20a_pm_resume(), take one refcount again if flag is set Fix __gk20a_do_idle() to consider this extra refcount as well. Add new variable target_ref_cnt and use it instead of assuming target refcount of 1 In case User has disabled rail gating, set this target refcount as 2 Also, export gk20a_idle_nosuspend() which drop power refcount without triggering suspend Bug 200233570 Change-Id: Ic0e35c73eb74ffefea1cd90d1b152650d9d2043d Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1236047 (cherry picked from commit 6e002d57da4b5c58ed79889728bb678d3aa1f1b1) Reviewed-on: http://git-master/r/1235219 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c index 875a99ce..a79ec201 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c @@ -294,12 +294,14 @@ static ssize_t railgate_enable_store(struct device *dev, /* release extra ref count */ gk20a_idle(dev); platform->can_railgate = true; + platform->user_railgate_disabled = false; } else if (railgate_enable == 0 && platform->can_railgate) { /* take extra ref count */ err = gk20a_busy(dev); if (err) return err; platform->can_railgate = false; + platform->user_railgate_disabled = true; } if (err) return err; -- cgit v1.2.2