summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/clk_gk20a.c5
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c10
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h5
-rw-r--r--drivers/gpu/nvgpu/gk20a/hal_gk20a.c2
4 files changed, 18 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/clk_gk20a.c b/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
index 33d81bd4..40eb06b6 100644
--- a/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/clk_gk20a.c
@@ -705,6 +705,11 @@ int gk20a_init_clk_support(struct gk20a *g)
705 return err; 705 return err;
706} 706}
707 707
708void gk20a_init_clk_ops(struct gpu_ops *gops)
709{
710 gops->clk.init_clk_support = gk20a_init_clk_support;
711}
712
708unsigned long gk20a_clk_get_rate(struct gk20a *g) 713unsigned long gk20a_clk_get_rate(struct gk20a *g)
709{ 714{
710 struct clk_gk20a *clk = &g->clk; 715 struct clk_gk20a *clk = &g->clk;
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index c69df460..e70cc0de 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -901,10 +901,12 @@ static int gk20a_pm_finalize_poweron(struct device *dev)
901 during boot but it also significantly slows down gk20a init on 901 during boot but it also significantly slows down gk20a init on
902 simulation and emulation. We should remove SOB after graphics power 902 simulation and emulation. We should remove SOB after graphics power
903 saving features (blcg/slcg) are enabled. For now, do it here. */ 903 saving features (blcg/slcg) are enabled. For now, do it here. */
904 err = gk20a_init_clk_support(g); 904 if (g->ops.clk.init_clk_support) {
905 if (err) { 905 err = g->ops.clk.init_clk_support(g);
906 gk20a_err(dev, "failed to init gk20a clk"); 906 if (err) {
907 goto done; 907 gk20a_err(dev, "failed to init gk20a clk");
908 goto done;
909 }
908 } 910 }
909 911
910 /* enable pri timeout only on silicon */ 912 /* enable pri timeout only on silicon */
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 774e4e85..0b91420b 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -230,6 +230,9 @@ struct gpu_ops {
230 int (*prepare_ucode)(struct gk20a *g); 230 int (*prepare_ucode)(struct gk20a *g);
231 int (*pmu_setup_hw_and_bootstrap)(struct gk20a *g); 231 int (*pmu_setup_hw_and_bootstrap)(struct gk20a *g);
232 } pmu; 232 } pmu;
233 struct {
234 int (*init_clk_support)(struct gk20a *g);
235 } clk;
233}; 236};
234 237
235struct gk20a { 238struct gk20a {
@@ -495,6 +498,8 @@ static inline void gk20a_mem_wr32(void *ptr, int w, u32 data)
495 ((u32 *)ptr)[w] = data; 498 ((u32 *)ptr)[w] = data;
496} 499}
497 500
501void gk20a_init_clk_ops(struct gpu_ops *gops);
502
498/* register accessors */ 503/* register accessors */
499int gk20a_lockout_registers(struct gk20a *g); 504int gk20a_lockout_registers(struct gk20a *g);
500int gk20a_restore_registers(struct gk20a *g); 505int gk20a_restore_registers(struct gk20a *g);
diff --git a/drivers/gpu/nvgpu/gk20a/hal_gk20a.c b/drivers/gpu/nvgpu/gk20a/hal_gk20a.c
index ad0a3dc7..3dae9450 100644
--- a/drivers/gpu/nvgpu/gk20a/hal_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/hal_gk20a.c
@@ -24,6 +24,7 @@
24#include "gr_ctx_gk20a.h" 24#include "gr_ctx_gk20a.h"
25#include "mm_gk20a.h" 25#include "mm_gk20a.h"
26#include "pmu_gk20a.h" 26#include "pmu_gk20a.h"
27#include "clk_gk20a.h"
27 28
28struct gpu_ops gk20a_ops = { 29struct gpu_ops gk20a_ops = {
29 .clock_gating = { 30 .clock_gating = {
@@ -50,6 +51,7 @@ int gk20a_init_hal(struct gpu_ops *gops)
50 gk20a_init_gr_ctx(gops); 51 gk20a_init_gr_ctx(gops);
51 gk20a_init_mm(gops); 52 gk20a_init_mm(gops);
52 gk20a_init_pmu_ops(gops); 53 gk20a_init_pmu_ops(gops);
54 gk20a_init_clk_ops(gops);
53 gops->name = "gk20a"; 55 gops->name = "gk20a";
54 56
55 return 0; 57 return 0;