diff options
author | Hoang Pham <hopham@nvidia.com> | 2014-07-14 13:42:35 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:10:29 -0400 |
commit | ba387d3d7e81072641e0134c1c1d4fcf890f1b70 (patch) | |
tree | 01fade5408469d2fce3572ae8567526722bf1853 /drivers/gpu/nvgpu | |
parent | 3058fb2b960cf1da53fd25c5c8d286d60560615e (diff) |
gpu: Split clk_ops for GK20A and GM20B
Split clk_ops for GK20A and GM20B into different files
Bug 1450787
Change-Id: I34d16c54ac40c70854e80588475434c9e50b51a5
Signed-off-by: Hoang Pham <hopham@nvidia.com>
Reviewed-on: http://git-master/r/437771
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/clk_gk20a.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 10 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/hal_gk20a.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/Makefile | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/clk_gm20b.c | 34 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/clk_gm20b.h | 26 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hal_gm20b.c | 2 |
8 files changed, 81 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 | ||
708 | void gk20a_init_clk_ops(struct gpu_ops *gops) | ||
709 | { | ||
710 | gops->clk.init_clk_support = gk20a_init_clk_support; | ||
711 | } | ||
712 | |||
708 | unsigned long gk20a_clk_get_rate(struct gk20a *g) | 713 | unsigned 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 | ||
235 | struct gk20a { | 238 | struct 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 | ||
501 | void gk20a_init_clk_ops(struct gpu_ops *gops); | ||
502 | |||
498 | /* register accessors */ | 503 | /* register accessors */ |
499 | int gk20a_lockout_registers(struct gk20a *g); | 504 | int gk20a_lockout_registers(struct gk20a *g); |
500 | int gk20a_restore_registers(struct gk20a *g); | 505 | int 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 | ||
28 | struct gpu_ops gk20a_ops = { | 29 | struct 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; |
diff --git a/drivers/gpu/nvgpu/gm20b/Makefile b/drivers/gpu/nvgpu/gm20b/Makefile index 20328e9e..d11e20fa 100644 --- a/drivers/gpu/nvgpu/gm20b/Makefile +++ b/drivers/gpu/nvgpu/gm20b/Makefile | |||
@@ -13,4 +13,5 @@ obj-$(CONFIG_GK20A) = \ | |||
13 | gm20b_gating_reglist.o \ | 13 | gm20b_gating_reglist.o \ |
14 | acr_gm20b.o \ | 14 | acr_gm20b.o \ |
15 | pmu_gm20b.o \ | 15 | pmu_gm20b.o \ |
16 | clk_gm20b.o \ | ||
16 | mm_gm20b.o | 17 | mm_gm20b.o |
diff --git a/drivers/gpu/nvgpu/gm20b/clk_gm20b.c b/drivers/gpu/nvgpu/gm20b/clk_gm20b.c new file mode 100644 index 00000000..848e4682 --- /dev/null +++ b/drivers/gpu/nvgpu/gm20b/clk_gm20b.c | |||
@@ -0,0 +1,34 @@ | |||
1 | /* | ||
2 | * GM20B Clocks | ||
3 | * | ||
4 | * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms and conditions of the GNU General Public License, | ||
8 | * version 2, as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
13 | * more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | */ | ||
18 | |||
19 | #include <linux/clk.h> | ||
20 | #include <linux/delay.h> /* for mdelay */ | ||
21 | #include <linux/module.h> | ||
22 | #include <linux/debugfs.h> | ||
23 | #include <linux/clk/tegra.h> | ||
24 | #include <mach/thermal.h> | ||
25 | |||
26 | #include "gk20a/gk20a.h" | ||
27 | #include "gk20a/hw_trim_gk20a.h" | ||
28 | #include "gk20a/hw_timer_gk20a.h" | ||
29 | |||
30 | void gm20b_init_clk_ops(struct gpu_ops *gops) | ||
31 | { | ||
32 | gops->clk.init_clk_support = gk20a_init_clk_support; | ||
33 | } | ||
34 | |||
diff --git a/drivers/gpu/nvgpu/gm20b/clk_gm20b.h b/drivers/gpu/nvgpu/gm20b/clk_gm20b.h new file mode 100644 index 00000000..cac5708c --- /dev/null +++ b/drivers/gpu/nvgpu/gm20b/clk_gm20b.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * GM20B Graphics | ||
3 | * | ||
4 | * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms and conditions of the GNU General Public License, | ||
8 | * version 2, as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
13 | * more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along with | ||
16 | * this program; if not, write to the Free Software Foundation, Inc., | ||
17 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
18 | */ | ||
19 | #ifndef _NVHOST_CLK_GM20B_H_ | ||
20 | #define _NVHOST_CLK_GM20B_H_ | ||
21 | |||
22 | #include <linux/mutex.h> | ||
23 | |||
24 | void gm20b_init_clk_ops(struct gpu_ops *gops); | ||
25 | |||
26 | #endif /* _NVHOST_CLK_GM20B_H_ */ | ||
diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c index 0d6b0447..5e8fc0ae 100644 --- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "gr_ctx_gm20b.h" | 26 | #include "gr_ctx_gm20b.h" |
27 | #include "mm_gm20b.h" | 27 | #include "mm_gm20b.h" |
28 | #include "pmu_gm20b.h" | 28 | #include "pmu_gm20b.h" |
29 | #include "clk_gm20b.h" | ||
29 | 30 | ||
30 | struct gpu_ops gm20b_ops = { | 31 | struct gpu_ops gm20b_ops = { |
31 | .clock_gating = { | 32 | .clock_gating = { |
@@ -53,6 +54,7 @@ int gm20b_init_hal(struct gpu_ops *gops) | |||
53 | gm20b_init_gr_ctx(gops); | 54 | gm20b_init_gr_ctx(gops); |
54 | gm20b_init_mm(gops); | 55 | gm20b_init_mm(gops); |
55 | gm20b_init_pmu_ops(gops); | 56 | gm20b_init_pmu_ops(gops); |
57 | gm20b_init_clk_ops(gops); | ||
56 | gops->name = "gm20b"; | 58 | gops->name = "gm20b"; |
57 | 59 | ||
58 | return 0; | 60 | return 0; |