summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm206/gr_gm206.c
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2016-03-23 11:43:53 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-05-23 17:15:25 -0400
commitfb64e1f1b9c2162f521dfe3956655accb911d6a7 (patch)
tree15236c00323c8d24102f5a1221f1b313d62bfac2 /drivers/gpu/nvgpu/gm206/gr_gm206.c
parentc25e1da93e09a421b8c2b91df720d4bc603db378 (diff)
gpu: nvgpu: Add support for gm204 and gm206
Add support for chips gm204 and gm206. Adds also support for reading VBIOS and booting devinit and pre-os images on PMU. Change-Id: I4824b44245611e5379ace62793cc37158048f432 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: http://git-master/r/1120467 GVS: Gerrit_Virtual_Submit Reviewed-by: Ken Adams <kadams@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm206/gr_gm206.c')
-rw-r--r--drivers/gpu/nvgpu/gm206/gr_gm206.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gm206/gr_gm206.c b/drivers/gpu/nvgpu/gm206/gr_gm206.c
new file mode 100644
index 00000000..cad080ac
--- /dev/null
+++ b/drivers/gpu/nvgpu/gm206/gr_gm206.c
@@ -0,0 +1,92 @@
1/*
2 * gm206 GR
3 *
4 * Copyright (c) 2011-2016, 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
16#include <linux/types.h>
17#include <linux/delay.h> /* for mdelay */
18#include <linux/io.h>
19#include <linux/tegra-fuse.h>
20#include <linux/vmalloc.h>
21
22#include "gk20a/gk20a.h"
23
24#include "gm20b/gr_gm20b.h"
25#include "gr_gm206.h"
26#include "hw_fb_gm206.h"
27#include "hw_gr_gm206.h"
28
29static void gr_gm206_init_gpc_mmu(struct gk20a *g)
30{
31 u32 temp;
32
33 gk20a_dbg_info("initialize gpc mmu");
34
35 temp = gk20a_readl(g, fb_mmu_ctrl_r());
36 temp &= gr_gpcs_pri_mmu_ctrl_vm_pg_size_m() |
37 gr_gpcs_pri_mmu_ctrl_use_pdb_big_page_size_m() |
38 gr_gpcs_pri_mmu_ctrl_use_full_comp_tag_line_m() |
39 gr_gpcs_pri_mmu_ctrl_vol_fault_m() |
40 gr_gpcs_pri_mmu_ctrl_comp_fault_m() |
41 gr_gpcs_pri_mmu_ctrl_miss_gran_m() |
42 gr_gpcs_pri_mmu_ctrl_cache_mode_m() |
43 gr_gpcs_pri_mmu_ctrl_mmu_aperture_m() |
44 gr_gpcs_pri_mmu_ctrl_mmu_vol_m() |
45 gr_gpcs_pri_mmu_ctrl_mmu_disable_m();
46 gk20a_writel(g, gr_gpcs_pri_mmu_ctrl_r(), temp);
47 gk20a_writel(g, gr_gpcs_pri_mmu_pm_unit_mask_r(), 0);
48 gk20a_writel(g, gr_gpcs_pri_mmu_pm_req_mask_r(), 0);
49
50 gk20a_writel(g, gr_gpcs_pri_mmu_debug_ctrl_r(),
51 gk20a_readl(g, fb_mmu_debug_ctrl_r()));
52 gk20a_writel(g, gr_gpcs_pri_mmu_debug_wr_r(),
53 gk20a_readl(g, fb_mmu_debug_wr_r()));
54 gk20a_writel(g, gr_gpcs_pri_mmu_debug_rd_r(),
55 gk20a_readl(g, fb_mmu_debug_rd_r()));
56
57 gk20a_writel(g, gr_gpcs_mmu_num_active_ltcs_r(),
58 gk20a_readl(g, fb_fbhub_num_active_ltcs_r()));
59 /* TODO: num_active_ltcs2! */
60 gk20a_writel(g, 0x50833c, gk20a_readl(g, 0x100804));
61}
62
63static void gr_gm206_bundle_cb_defaults(struct gk20a *g)
64{
65 struct gr_gk20a *gr = &g->gr;
66
67 gr->bundle_cb_default_size =
68 gr_scc_bundle_cb_size_div_256b__prod_v();
69 gr->min_gpm_fifo_depth =
70 gr_pd_ab_dist_cfg2_state_limit_min_gpm_fifo_depths_v();
71 gr->bundle_cb_token_limit =
72 gr_pd_ab_dist_cfg2_token_limit_init_v();
73}
74
75static void gr_gm206_cb_size_default(struct gk20a *g)
76{
77 struct gr_gk20a *gr = &g->gr;
78
79 if (!gr->attrib_cb_default_size)
80 gr->attrib_cb_default_size =
81 gr_gpc0_ppc0_cbm_beta_cb_size_v_default_v();
82 gr->alpha_cb_default_size =
83 gr_gpc0_ppc0_cbm_alpha_cb_size_v_default_v();
84}
85
86void gm206_init_gr(struct gpu_ops *gops)
87{
88 gm20b_init_gr(gops);
89 gops->gr.init_gpc_mmu = gr_gm206_init_gpc_mmu;
90 gops->gr.bundle_cb_defaults = gr_gm206_bundle_cb_defaults;
91 gops->gr.cb_size_default = gr_gm206_cb_size_default;
92}