summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2015-09-10 12:24:35 -0400
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:52:08 -0500
commitd3c12a335d5e04bdfabfe07877695085c4f26612 (patch)
tree04edbf1283226d3b812aad6558a0b46bc3d3bcbb /drivers/gpu
parentd1331bd07d9e9b9c6432ec9406db29e197eabd8a (diff)
gpu: nvgpu: implement reset_assert/deassert for gp10b
Implement platform specific reset_assert() and reset_deassert() calls for gp10b These APIs will in turn will use reset_control APIs to do their work Also, set force_reset_in_do_idle = true for gp10b, since railgating is not supported yet Bug 200137963 Change-Id: I2c0fe1273d3ecfd0c46704a44374712052ff51d6 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/797150 (cherry picked from commit 6ac04ca84cee8a4d3b089678c81534799880712d) Reviewed-on: http://git-master/r/808240 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c
index fbca62b0..a4348f6c 100644
--- a/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c
+++ b/drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c
@@ -24,6 +24,7 @@
24#include <linux/dma-buf.h> 24#include <linux/dma-buf.h>
25#include <linux/nvmap.h> 25#include <linux/nvmap.h>
26#include <linux/tegra_pm_domains.h> 26#include <linux/tegra_pm_domains.h>
27#include <linux/reset.h>
27#include "gk20a/platform_gk20a.h" 28#include "gk20a/platform_gk20a.h"
28#include "gk20a/gk20a.h" 29#include "gk20a/gk20a.h"
29#include "platform_tegra.h" 30#include "platform_tegra.h"
@@ -178,6 +179,32 @@ static int gp10b_tegra_suspend(struct device *dev)
178 return 0; 179 return 0;
179} 180}
180 181
182static int gp10b_tegra_reset_assert(struct platform_device *dev)
183{
184 struct gk20a_platform *platform = gk20a_get_platform(dev);
185 int ret = 0;
186
187 if (!platform->reset_control)
188 return -EINVAL;
189
190 ret = reset_control_assert(platform->reset_control);
191
192 return ret;
193}
194
195static int gp10b_tegra_reset_deassert(struct platform_device *dev)
196{
197 struct gk20a_platform *platform = gk20a_get_platform(dev);
198 int ret = 0;
199
200 if (!platform->reset_control)
201 return -EINVAL;
202
203 ret = reset_control_deassert(platform->reset_control);
204
205 return ret;
206}
207
181struct gk20a_platform t18x_gpu_tegra_platform = { 208struct gk20a_platform t18x_gpu_tegra_platform = {
182 .has_syncpoints = true, 209 .has_syncpoints = true,
183 210
@@ -209,4 +236,9 @@ struct gk20a_platform t18x_gpu_tegra_platform = {
209 236
210 .secure_alloc = gk20a_tegra_secure_alloc, 237 .secure_alloc = gk20a_tegra_secure_alloc,
211 .secure_page_alloc = gk20a_tegra_secure_page_alloc, 238 .secure_page_alloc = gk20a_tegra_secure_page_alloc,
239
240 .reset_assert = gp10b_tegra_reset_assert,
241 .reset_deassert = gp10b_tegra_reset_deassert,
242
243 .force_reset_in_do_idle = true,
212}; 244};