summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/os
diff options
context:
space:
mode:
authorDebarshi Dutta <ddutta@nvidia.com>2018-09-04 01:25:33 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-20 13:50:12 -0400
commit519948a9c664020fd0b37118749faad2dfd73d97 (patch)
tree1eb57dc393075670331ca89cf366a093d75d3f47 /drivers/gpu/nvgpu/os
parent1c7258411da89aea5279e9a8d117479928f8bf64 (diff)
gpu: nvgpu: add igpu support for clk_arbiter.
This patch constructs clk_arbiter specific code for gp10b as well as gv11b and does the necessary plumbing in the clk_arbiter code. The changes made are as follows. 1) Constructed clk_arb_gp10b.* files which add support for clk_arb related HALS including the nvgpu_clk_arb_init and nvgpu_clk_arb_cb. This doesn't have support for debugfs nor the VFUpdateEvent yet and consequently no support for arb->notifications. 2) Added gpcclk specific variables corresponding to every gpc2clk in a given clk_arb related struct. 3) Linux specific support_clk_freq_controller is assigned true in platform_gp10b.c and platform_gv11b.c files. 4) Incremented the clk_arb_worker.put atomic variable during worker_deinit so as to allow the worker thread to be stopped. 5) Added the flag clk_arb_events_supported as part of struct nvgpu_clk_arb. This flag is used to selectively account for the extra refcounting present in OS specific code i.e. nvgpu_clk_arb_commit_request_fd. For igpus, the extra refcount is reduced during nvgpu_clk_arb_release_completion_dev. Bug 2061372 Change-Id: Id00acb106db2b46e55aa0324034a16a73723c078 Signed-off-by: Debarshi Dutta <ddutta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1774281 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/os')
-rw-r--r--drivers/gpu/nvgpu/os/linux/ioctl_clk_arb.c11
-rw-r--r--drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c2
-rw-r--r--drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c2
3 files changed, 15 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/ioctl_clk_arb.c b/drivers/gpu/nvgpu/os/linux/ioctl_clk_arb.c
index 501b5f93..2d9946b1 100644
--- a/drivers/gpu/nvgpu/os/linux/ioctl_clk_arb.c
+++ b/drivers/gpu/nvgpu/os/linux/ioctl_clk_arb.c
@@ -55,6 +55,13 @@ static int nvgpu_clk_arb_release_completion_dev(struct inode *inode,
55 55
56 clk_arb_dbg(session->g, " "); 56 clk_arb_dbg(session->g, " ");
57 57
58 /* This is done to account for the extra refcount taken in
59 * nvgpu_clk_arb_commit_request_fd without events support in iGPU
60 */
61 if (!session->g->clk_arb->clk_arb_events_supported) {
62 nvgpu_ref_put(&dev->refcount, nvgpu_clk_arb_free_fd);
63 }
64
58 nvgpu_ref_put(&session->refcount, nvgpu_clk_arb_free_session); 65 nvgpu_ref_put(&session->refcount, nvgpu_clk_arb_free_session);
59 nvgpu_ref_put(&dev->refcount, nvgpu_clk_arb_free_fd); 66 nvgpu_ref_put(&dev->refcount, nvgpu_clk_arb_free_fd);
60 return 0; 67 return 0;
@@ -425,6 +432,10 @@ int nvgpu_clk_arb_commit_request_fd(struct gk20a *g,
425 err = -EINVAL; 432 err = -EINVAL;
426 goto fdput_fd; 433 goto fdput_fd;
427 } 434 }
435
436 clk_arb_dbg(g, "requested target = %u\n",
437 (u32)dev->gpc2clk_target_mhz);
438
428 nvgpu_ref_get(&dev->refcount); 439 nvgpu_ref_get(&dev->refcount);
429 nvgpu_spinlock_acquire(&session->session_lock); 440 nvgpu_spinlock_acquire(&session->session_lock);
430 nvgpu_list_add(&dev->node, &session->targets); 441 nvgpu_list_add(&dev->node, &session->targets);
diff --git a/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c
index 5fdcb05c..a792bfcb 100644
--- a/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c
+++ b/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c
@@ -171,6 +171,8 @@ static int gp10b_tegra_probe(struct device *dev)
171 171
172 nvgpu_mutex_init(&platform->clk_get_freq_lock); 172 nvgpu_mutex_init(&platform->clk_get_freq_lock);
173 173
174 platform->g->ops.clk.support_clk_freq_controller = true;
175
174 return 0; 176 return 0;
175} 177}
176 178
diff --git a/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c
index b055eb6e..ec93b4c3 100644
--- a/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c
+++ b/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c
@@ -99,6 +99,8 @@ static int gv11b_tegra_probe(struct device *dev)
99 99
100 nvgpu_mutex_init(&platform->clk_get_freq_lock); 100 nvgpu_mutex_init(&platform->clk_get_freq_lock);
101 101
102 platform->g->ops.clk.support_clk_freq_controller = true;
103
102 return 0; 104 return 0;
103} 105}
104 106