summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorKonsta Holtta <kholtta@nvidia.com>2017-06-05 09:22:30 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-06-15 08:23:19 -0400
commitf6c921ec97323c1eab7d3b8a0cda73abf041a00f (patch)
treeb2607a51e09dd88ffff5ccf47e44c9076e34391a /drivers/gpu/nvgpu/gk20a
parent7680fd689ecf7d11bf2dfdba41dc2f33cde2bbe7 (diff)
gpu: nvgpu: bring back tegra idle registration
To make do_idle work when nvgpu is built as a module, reverse the order of call dependencies for do_idle. Don't provide visible gk20a_do_{idle,unidle}() functions for the kernel but instead call the kernel for registering and unregistering pointers to them when the driver loads and unloads. Refactor the internal __gk20a_do_{idle,unidle} functions to take a struct gk20a * instead of struct device *, and use the callback api for providing that g instead of retrieving the plat device from device tree. Bug 200290850 Change-Id: Ibef8b069302e547b298069cbb97734f461a10cc3 Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: http://git-master/r/1493774 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c2
-rw-r--r--drivers/gpu/nvgpu/gk20a/fence_gk20a.c1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h6
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c5
4 files changed, 4 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
index 3d313ce8..1b650cdd 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c
@@ -13,8 +13,6 @@
13 * more details. 13 * more details.
14 */ 14 */
15 15
16#include <linux/gk20a.h>
17
18#include <linux/version.h> 16#include <linux/version.h>
19 17
20#include <nvgpu/semaphore.h> 18#include <nvgpu/semaphore.h>
diff --git a/drivers/gpu/nvgpu/gk20a/fence_gk20a.c b/drivers/gpu/nvgpu/gk20a/fence_gk20a.c
index 5392e77c..51363059 100644
--- a/drivers/gpu/nvgpu/gk20a/fence_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fence_gk20a.c
@@ -13,7 +13,6 @@
13 13
14#include "fence_gk20a.h" 14#include "fence_gk20a.h"
15 15
16#include <linux/gk20a.h>
17#include <linux/file.h> 16#include <linux/file.h>
18#include <linux/version.h> 17#include <linux/version.h>
19#include <linux/fs.h> 18#include <linux/fs.h>
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 79118fca..34f89fc8 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -1485,10 +1485,8 @@ void gk20a_busy_noresume(struct device *dev);
1485void gk20a_idle_nosuspend(struct device *dev); 1485void gk20a_idle_nosuspend(struct device *dev);
1486int __must_check gk20a_busy(struct gk20a *g); 1486int __must_check gk20a_busy(struct gk20a *g);
1487void gk20a_idle(struct gk20a *g); 1487void gk20a_idle(struct gk20a *g);
1488int gk20a_do_idle(void); 1488int __gk20a_do_idle(struct gk20a *g, bool force_reset);
1489int gk20a_do_unidle(void); 1489int __gk20a_do_unidle(struct gk20a *g);
1490int __gk20a_do_idle(struct device *dev, bool force_reset);
1491int __gk20a_do_unidle(struct device *dev);
1492 1490
1493int gk20a_can_busy(struct gk20a *g); 1491int gk20a_can_busy(struct gk20a *g);
1494void gk20a_driver_start_unload(struct gk20a *g); 1492void gk20a_driver_start_unload(struct gk20a *g);
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
index 275b663f..8c1dbd37 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a_sysfs.c
@@ -22,7 +22,6 @@
22#include <linux/device.h> 22#include <linux/device.h>
23#include <linux/pm_runtime.h> 23#include <linux/pm_runtime.h>
24#include <linux/fb.h> 24#include <linux/fb.h>
25#include <linux/gk20a.h>
26#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) 25#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0))
27#include <soc/tegra/tegra-dvfs.h> 26#include <soc/tegra/tegra-dvfs.h>
28#endif 27#endif
@@ -742,7 +741,7 @@ static ssize_t force_idle_store(struct device *dev,
742 if (g->forced_idle) 741 if (g->forced_idle)
743 return count; /* do nothing */ 742 return count; /* do nothing */
744 else { 743 else {
745 err = __gk20a_do_idle(dev, false); 744 err = __gk20a_do_idle(g, false);
746 if (!err) { 745 if (!err) {
747 g->forced_idle = 1; 746 g->forced_idle = 1;
748 dev_info(dev, "gpu is idle : %d\n", 747 dev_info(dev, "gpu is idle : %d\n",
@@ -753,7 +752,7 @@ static ssize_t force_idle_store(struct device *dev,
753 if (!g->forced_idle) 752 if (!g->forced_idle)
754 return count; /* do nothing */ 753 return count; /* do nothing */
755 else { 754 else {
756 err = __gk20a_do_unidle(dev); 755 err = __gk20a_do_unidle(g);
757 if (!err) { 756 if (!err) {
758 g->forced_idle = 0; 757 g->forced_idle = 0;
759 dev_info(dev, "gpu is idle : %d\n", 758 dev_info(dev, "gpu is idle : %d\n",