gpu: nvgpu: force CAR reset in do_idle() for gm20b

In gk20a_do_idle(), we wait for platform->railgate_delay
to allow GPU to go into rail gate

But sometimes we set platform->railgate_delay = INT_MAX
to disable GPU rail gating but allow it to suspend during
low power state
Due to this, force_idle API fails (it waits for INT_MAX)

To fix this, allow forcing CAR reset instead of rail gating
with flag "force_reset_in_do_idle" defined in gk20a_platform
Set this flag for gm20b until we fix the railgate_delay

Bug 1517584

Change-Id: I031aa56f87d4db3727e2c3a3e5eeaf18503dd449
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/593704
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
Deepak Nibade
2014-11-05 11:55:29 +05:30
committed by Dan Willemsen
parent 1d0e302b53
commit 0e89e42318
3 changed files with 13 additions and 1 deletions

View File

@@ -1659,7 +1659,7 @@ int __gk20a_do_idle(struct platform_device *pdev)
*/
pm_runtime_put_sync(&pdev->dev);
if (platform->can_railgate) {
if (platform->can_railgate && !platform->force_reset_in_do_idle) {
/* add sufficient delay to allow GPU to rail gate */
msleep(platform->railgate_delay);

View File

@@ -76,6 +76,12 @@ struct gk20a_platform {
/* Adaptative ELPG: true = enable flase = disable */
bool enable_aelpg;
/*
* gk20a_do_idle() API can take GPU either into rail gate or CAR reset
* This flag can be used to force CAR reset case instead of rail gate
*/
bool force_reset_in_do_idle;
/* Default big page size 64K or 128K */
u32 default_big_page_size;

View File

@@ -485,6 +485,8 @@ static struct gk20a_platform t132_gk20a_tegra_platform = {
.enable_elpg = true,
.enable_aelpg = true,
.force_reset_in_do_idle = false,
.default_big_page_size = SZ_128K,
.probe = gk20a_tegra_probe,
@@ -526,6 +528,8 @@ struct gk20a_platform gk20a_tegra_platform = {
.enable_elpg = true,
.enable_aelpg = true,
.force_reset_in_do_idle = false,
.default_big_page_size = SZ_128K,
.probe = gk20a_tegra_probe,
@@ -568,6 +572,8 @@ struct gk20a_platform gm20b_tegra_platform = {
.enable_elpg = true,
.enable_aelpg = true,
.force_reset_in_do_idle = true,
.default_big_page_size = SZ_128K,
.probe = gk20a_tegra_probe,