summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHoang Pham <hopham@nvidia.com>2014-07-14 13:42:35 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:10:29 -0400
commitba387d3d7e81072641e0134c1c1d4fcf890f1b70 (patch)
tree01fade5408469d2fce3572ae8567526722bf1853 /drivers
parent3058fb2b960cf1da53fd25c5c8d286d60560615e (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')
-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
-rw-r--r--drivers/gpu/nvgpu/gm20b/Makefile1
-rw-r--r--drivers/gpu/nvgpu/gm20b/clk_gm20b.c34
-rw-r--r--drivers/gpu/nvgpu/gm20b/clk_gm20b.h26
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c2
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
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;
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
30void 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
24void 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
30struct gpu_ops gm20b_ops = { 31struct 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;