diff options
author | Prashant Malani <pmalani@nvidia.com> | 2014-01-24 15:08:05 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:09:01 -0400 |
commit | 9727cf87bc0eeb62c00602ebb479c5f38d1bb30e (patch) | |
tree | 1884265c8bea294077f152d3947a8d62318c9ebb | |
parent | ef4ed26f8b1dd9545b7922def3bfec425cfa0562 (diff) |
video: tegra: host: gk20a: reorder free_irq
Free IRQs before the various subunits are suspended. This is to prevent
potential races between the IRQ thread and the suspend routine.
Bug 1437749
Change-Id: Iffef918feecae0b256be96efd02b01b2677c225d
Signed-off-by: Prashant Malani <pmalani@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c index ad35c9ae..a144e75d 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gk20a.c | |||
@@ -755,14 +755,6 @@ static int gk20a_pm_prepare_poweroff(struct device *_dev) | |||
755 | if (!g->power_on) | 755 | if (!g->power_on) |
756 | return 0; | 756 | return 0; |
757 | 757 | ||
758 | ret |= gk20a_channel_suspend(g); | ||
759 | |||
760 | /* disable elpg before gr or fifo suspend */ | ||
761 | ret |= gk20a_pmu_destroy(g); | ||
762 | ret |= gk20a_gr_suspend(g); | ||
763 | ret |= gk20a_mm_suspend(g); | ||
764 | ret |= gk20a_fifo_suspend(g); | ||
765 | |||
766 | /* | 758 | /* |
767 | * After this point, gk20a interrupts should not get | 759 | * After this point, gk20a interrupts should not get |
768 | * serviced. | 760 | * serviced. |
@@ -773,6 +765,14 @@ static int gk20a_pm_prepare_poweroff(struct device *_dev) | |||
773 | g->irq_requested = false; | 765 | g->irq_requested = false; |
774 | } | 766 | } |
775 | 767 | ||
768 | ret |= gk20a_channel_suspend(g); | ||
769 | |||
770 | /* disable elpg before gr or fifo suspend */ | ||
771 | ret |= gk20a_pmu_destroy(g); | ||
772 | ret |= gk20a_gr_suspend(g); | ||
773 | ret |= gk20a_mm_suspend(g); | ||
774 | ret |= gk20a_fifo_suspend(g); | ||
775 | |||
776 | /* Disable GPCPLL */ | 776 | /* Disable GPCPLL */ |
777 | ret |= gk20a_suspend_clk_support(g); | 777 | ret |= gk20a_suspend_clk_support(g); |
778 | g->power_on = false; | 778 | g->power_on = false; |