diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2015-09-10 12:24:35 -0400 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:52:08 -0500 |
commit | d3c12a335d5e04bdfabfe07877695085c4f26612 (patch) | |
tree | 04edbf1283226d3b812aad6558a0b46bc3d3bcbb /drivers | |
parent | d1331bd07d9e9b9c6432ec9406db29e197eabd8a (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')
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/platform_gp10b_tegra.c | 32 |
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 | ||
182 | static 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 | |||
195 | static 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 | |||
181 | struct gk20a_platform t18x_gpu_tegra_platform = { | 208 | struct 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 | }; |