From c3661adef806869a7e0df884fc621c48436961d4 Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Mon, 3 Nov 2014 14:35:53 +0530 Subject: gpu: nvgpu: fix reset clock in gm20b To assert reset on GPU, we store "gpu_ref" clock in platform->clk[0] and use it to assert/deassert reset But for gm20b, "gpu_ref" is no longer resettable. To fix this, add two callbacks in gk20a_platform : .reset_assert and .reset_deassert Also, add a pointer "clk_reset" to store the clock which needs to be reset For gk20a specific implementation, we continue to reset platform->clk[0] For gm20b specific implementation, we first request "gpu_gate" clock, store it and use it to assert reset Bug 1513685 Bug 1517584 Change-Id: I15a583a4a07eb663b442084be8b8c7d0c7c7a142 Signed-off-by: Deepak Nibade --- drivers/gpu/nvgpu/gk20a/gk20a.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index d411d011..c7d40fcd 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c @@ -1671,10 +1671,14 @@ int __gk20a_do_idle(struct platform_device *pdev) else goto fail_timeout; } else { + if (!platform->reset_assert || !platform->reset_deassert) + goto fail_timeout; + pm_runtime_get_sync(&pdev->dev); gk20a_pm_prepare_poweroff(&pdev->dev); - tegra_periph_reset_assert(platform->clk[0]); + platform->reset_assert(pdev); + udelay(10); g->forced_reset = true; @@ -1717,7 +1721,7 @@ int __gk20a_do_unidle(struct platform_device *pdev) struct gk20a_platform *platform = dev_get_drvdata(&pdev->dev); if (g->forced_reset) { - tegra_periph_reset_deassert(platform->clk[0]); + platform->reset_deassert(pdev); gk20a_pm_finalize_poweron(&pdev->dev); pm_runtime_put_sync(&pdev->dev); -- cgit v1.2.2