summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
diff options
context:
space:
mode:
authorSam Payne <spayne@nvidia.com>2014-10-31 17:27:33 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:11:56 -0400
commit8c6a9fd1151299697037d58f33cfa306d8ac5d87 (patch)
tree9bb909474f12565e7f61251b8b80f300030bde52 /drivers/gpu/nvgpu/gm20b/gr_gm20b.c
parent4f6dddcf78233b9939ee32c6f09519f27c3b8fb4 (diff)
Revert "gpu: nvgpu: GR and LTC HAL to use const structs"
This reverts commit 41b82e97164138f45fbdaef6ab6939d82ca9419e. Change-Id: Iabd01fcb124e0d22cd9be62151a6552cbb27fc94 Signed-off-by: Sam Payne <spayne@nvidia.com> Reviewed-on: http://git-master/r/592221 Tested-by: Hoang Pham <hopham@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Mitch Luban <mluban@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/gr_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c91
1 files changed, 51 insertions, 40 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
index 7b69c5c8..8a3de4e8 100644
--- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * GM20B GPU GR 2 * GM20B GPC MMU
3 * 3 *
4 * Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
@@ -16,7 +16,6 @@
16#include <linux/types.h> 16#include <linux/types.h>
17#include <linux/delay.h> /* for mdelay */ 17#include <linux/delay.h> /* for mdelay */
18 18
19#include "gr_ops.h"
20#include "gk20a/gk20a.h" 19#include "gk20a/gk20a.h"
21#include "gk20a/gr_gk20a.h" 20#include "gk20a/gr_gk20a.h"
22 21
@@ -29,7 +28,7 @@
29#include "pmu_gm20b.h" 28#include "pmu_gm20b.h"
30#include "acr_gm20b.h" 29#include "acr_gm20b.h"
31 30
32void gr_gm20b_init_gpc_mmu(struct gk20a *g) 31static void gr_gm20b_init_gpc_mmu(struct gk20a *g)
33{ 32{
34 u32 temp; 33 u32 temp;
35 34
@@ -65,7 +64,7 @@ void gr_gm20b_init_gpc_mmu(struct gk20a *g)
65 gk20a_readl(g, fb_fbhub_num_active_ltcs_r())); 64 gk20a_readl(g, fb_fbhub_num_active_ltcs_r()));
66} 65}
67 66
68void gr_gm20b_bundle_cb_defaults(struct gk20a *g) 67static void gr_gm20b_bundle_cb_defaults(struct gk20a *g)
69{ 68{
70 struct gr_gk20a *gr = &g->gr; 69 struct gr_gk20a *gr = &g->gr;
71 70
@@ -77,7 +76,7 @@ void gr_gm20b_bundle_cb_defaults(struct gk20a *g)
77 gr_pd_ab_dist_cfg2_token_limit_init_v(); 76 gr_pd_ab_dist_cfg2_token_limit_init_v();
78} 77}
79 78
80void gr_gm20b_cb_size_default(struct gk20a *g) 79static void gr_gm20b_cb_size_default(struct gk20a *g)
81{ 80{
82 struct gr_gk20a *gr = &g->gr; 81 struct gr_gk20a *gr = &g->gr;
83 82
@@ -87,7 +86,7 @@ void gr_gm20b_cb_size_default(struct gk20a *g)
87 gr_gpc0_ppc0_cbm_alpha_cb_size_v_default_v(); 86 gr_gpc0_ppc0_cbm_alpha_cb_size_v_default_v();
88} 87}
89 88
90int gr_gm20b_calc_global_ctx_buffer_size(struct gk20a *g) 89static int gr_gm20b_calc_global_ctx_buffer_size(struct gk20a *g)
91{ 90{
92 struct gr_gk20a *gr = &g->gr; 91 struct gr_gk20a *gr = &g->gr;
93 int size; 92 int size;
@@ -108,7 +107,7 @@ int gr_gm20b_calc_global_ctx_buffer_size(struct gk20a *g)
108 return size; 107 return size;
109} 108}
110 109
111void gr_gm20b_commit_global_attrib_cb(struct gk20a *g, 110static void gr_gk20a_commit_global_attrib_cb(struct gk20a *g,
112 struct channel_ctx_gk20a *ch_ctx, 111 struct channel_ctx_gk20a *ch_ctx,
113 u64 addr, bool patch) 112 u64 addr, bool patch)
114{ 113{
@@ -125,7 +124,7 @@ void gr_gm20b_commit_global_attrib_cb(struct gk20a *g,
125 gr_gpcs_tpcs_mpc_vtg_cb_global_base_addr_valid_true_f(), patch); 124 gr_gpcs_tpcs_mpc_vtg_cb_global_base_addr_valid_true_f(), patch);
126} 125}
127 126
128void gr_gm20b_commit_global_bundle_cb(struct gk20a *g, 127static void gr_gm20b_commit_global_bundle_cb(struct gk20a *g,
129 struct channel_ctx_gk20a *ch_ctx, 128 struct channel_ctx_gk20a *ch_ctx,
130 u64 addr, u64 size, bool patch) 129 u64 addr, u64 size, bool patch)
131{ 130{
@@ -161,7 +160,7 @@ void gr_gm20b_commit_global_bundle_cb(struct gk20a *g,
161 160
162} 161}
163 162
164int gr_gm20b_commit_global_cb_manager(struct gk20a *g, 163static int gr_gm20b_commit_global_cb_manager(struct gk20a *g,
165 struct channel_gk20a *c, bool patch) 164 struct channel_gk20a *c, bool patch)
166{ 165{
167 struct gr_gk20a *gr = &g->gr; 166 struct gr_gk20a *gr = &g->gr;
@@ -248,7 +247,7 @@ int gr_gm20b_commit_global_cb_manager(struct gk20a *g,
248 return 0; 247 return 0;
249} 248}
250 249
251void gr_gm20b_commit_global_pagepool(struct gk20a *g, 250static void gr_gm20b_commit_global_pagepool(struct gk20a *g,
252 struct channel_ctx_gk20a *ch_ctx, 251 struct channel_ctx_gk20a *ch_ctx,
253 u64 addr, u32 size, bool patch) 252 u64 addr, u32 size, bool patch)
254{ 253{
@@ -260,7 +259,7 @@ void gr_gm20b_commit_global_pagepool(struct gk20a *g,
260 259
261} 260}
262 261
263int gr_gm20b_handle_sw_method(struct gk20a *g, u32 addr, 262static int gr_gm20b_handle_sw_method(struct gk20a *g, u32 addr,
264 u32 class_num, u32 offset, u32 data) 263 u32 class_num, u32 offset, u32 data)
265{ 264{
266 gk20a_dbg_fn(""); 265 gk20a_dbg_fn("");
@@ -281,10 +280,10 @@ int gr_gm20b_handle_sw_method(struct gk20a *g, u32 addr,
281 gk20a_gr_set_shader_exceptions(g, data); 280 gk20a_gr_set_shader_exceptions(g, data);
282 break; 281 break;
283 case NVB197_SET_CIRCULAR_BUFFER_SIZE: 282 case NVB197_SET_CIRCULAR_BUFFER_SIZE:
284 g->ops.gr->set_circular_buffer_size(g, data); 283 g->ops.gr.set_circular_buffer_size(g, data);
285 break; 284 break;
286 case NVB197_SET_ALPHA_CIRCULAR_BUFFER_SIZE: 285 case NVB197_SET_ALPHA_CIRCULAR_BUFFER_SIZE:
287 g->ops.gr->set_alpha_circular_buffer_size(g, data); 286 g->ops.gr.set_alpha_circular_buffer_size(g, data);
288 break; 287 break;
289 default: 288 default:
290 goto fail; 289 goto fail;
@@ -296,7 +295,7 @@ fail:
296 return -EINVAL; 295 return -EINVAL;
297} 296}
298 297
299void gr_gm20b_set_alpha_circular_buffer_size(struct gk20a *g, u32 data) 298static void gr_gm20b_set_alpha_circular_buffer_size(struct gk20a *g, u32 data)
300{ 299{
301 struct gr_gk20a *gr = &g->gr; 300 struct gr_gk20a *gr = &g->gr;
302 u32 gpc_index, ppc_index, stride, val; 301 u32 gpc_index, ppc_index, stride, val;
@@ -396,7 +395,7 @@ void gr_gm20b_set_circular_buffer_size(struct gk20a *g, u32 data)
396 } 395 }
397} 396}
398 397
399void gr_gm20b_enable_hww_exceptions(struct gk20a *g) 398static void gr_gm20b_enable_hww_exceptions(struct gk20a *g)
400{ 399{
401 gr_gk20a_enable_hww_exceptions(g); 400 gr_gk20a_enable_hww_exceptions(g);
402 401
@@ -407,7 +406,7 @@ void gr_gm20b_enable_hww_exceptions(struct gk20a *g)
407 gr_ds_hww_report_mask_2_sph24_err_report_f()); 406 gr_ds_hww_report_mask_2_sph24_err_report_f());
408} 407}
409 408
410void gr_gm20b_set_hww_esr_report_mask(struct gk20a *g) 409static void gr_gm20b_set_hww_esr_report_mask(struct gk20a *g)
411{ 410{
412 /* setup sm warp esr report masks */ 411 /* setup sm warp esr report masks */
413 gk20a_writel(g, gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_r(), 412 gk20a_writel(g, gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_r(),
@@ -440,7 +439,7 @@ void gr_gm20b_set_hww_esr_report_mask(struct gk20a *g)
440 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_multiple_warp_errors_report_f()); 439 gr_gpcs_tpcs_sm_hww_global_esr_report_mask_multiple_warp_errors_report_f());
441} 440}
442 441
443bool gr_gm20b_is_valid_class(struct gk20a *g, u32 class_num) 442static bool gr_gm20b_is_valid_class(struct gk20a *g, u32 class_num)
444{ 443{
445 bool valid = false; 444 bool valid = false;
446 445
@@ -460,7 +459,7 @@ bool gr_gm20b_is_valid_class(struct gk20a *g, u32 class_num)
460 return valid; 459 return valid;
461} 460}
462 461
463void gr_gm20b_get_sm_dsm_perf_regs(struct gk20a *g, 462static void gr_gm20b_get_sm_dsm_perf_regs(struct gk20a *g,
464 u32 *num_sm_dsm_perf_regs, 463 u32 *num_sm_dsm_perf_regs,
465 u32 **sm_dsm_perf_regs, 464 u32 **sm_dsm_perf_regs,
466 u32 *perf_register_stride) 465 u32 *perf_register_stride)
@@ -471,7 +470,7 @@ void gr_gm20b_get_sm_dsm_perf_regs(struct gk20a *g,
471 *perf_register_stride = ctxsw_prog_extended_sm_dsm_perf_counter_register_stride_v(); 470 *perf_register_stride = ctxsw_prog_extended_sm_dsm_perf_counter_register_stride_v();
472} 471}
473 472
474void gr_gm20b_get_sm_dsm_perf_ctrl_regs(struct gk20a *g, 473static void gr_gm20b_get_sm_dsm_perf_ctrl_regs(struct gk20a *g,
475 u32 *num_sm_dsm_perf_regs, 474 u32 *num_sm_dsm_perf_regs,
476 u32 **sm_dsm_perf_regs, 475 u32 **sm_dsm_perf_regs,
477 u32 *ctrl_register_stride) 476 u32 *ctrl_register_stride)
@@ -482,7 +481,7 @@ void gr_gm20b_get_sm_dsm_perf_ctrl_regs(struct gk20a *g,
482 *ctrl_register_stride = ctxsw_prog_extended_sm_dsm_perf_counter_control_register_stride_v(); 481 *ctrl_register_stride = ctxsw_prog_extended_sm_dsm_perf_counter_control_register_stride_v();
483} 482}
484 483
485u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) 484static u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index)
486{ 485{
487 u32 val; 486 u32 val;
488 struct gr_gk20a *gr = &g->gr; 487 struct gr_gk20a *gr = &g->gr;
@@ -493,7 +492,7 @@ u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index)
493 return (~val) & ((0x1 << gr->max_tpc_per_gpc_count) - 1); 492 return (~val) & ((0x1 << gr->max_tpc_per_gpc_count) - 1);
494} 493}
495 494
496int gr_gm20b_init_fs_state(struct gk20a *g) 495static int gr_gm20b_ctx_state_floorsweep(struct gk20a *g)
497{ 496{
498 struct gr_gk20a *gr = &g->gr; 497 struct gr_gk20a *gr = &g->gr;
499 u32 tpc_index, gpc_index; 498 u32 tpc_index, gpc_index;
@@ -596,7 +595,7 @@ int gr_gm20b_init_fs_state(struct gk20a *g)
596 return 0; 595 return 0;
597} 596}
598 597
599int gr_gm20b_falcon_load_ucode(struct gk20a *g, u64 addr_base, 598static int gr_gm20b_load_ctxsw_ucode_segments(struct gk20a *g, u64 addr_base,
600 struct gk20a_ctxsw_ucode_segments *segments, u32 reg_offset) 599 struct gk20a_ctxsw_ucode_segments *segments, u32 reg_offset)
601{ 600{
602 gk20a_writel(g, reg_offset + gr_fecs_dmactl_r(), 601 gk20a_writel(g, reg_offset + gr_fecs_dmactl_r(),
@@ -623,7 +622,7 @@ static void gr_gm20b_load_gpccs_with_bootloader(struct gk20a *g)
623 622
624 gr_gk20a_load_falcon_bind_instblk(g); 623 gr_gk20a_load_falcon_bind_instblk(g);
625 624
626 g->ops.gr->falcon_load_ucode(g, addr_base, 625 g->ops.gr.falcon_load_ucode(g, addr_base,
627 &g->ctxsw_ucode_info.gpccs, 626 &g->ctxsw_ucode_info.gpccs,
628 gr_gpcs_gpccs_falcon_hwcfg_r() - 627 gr_gpcs_gpccs_falcon_hwcfg_r() -
629 gr_fecs_falcon_hwcfg_r()); 628 gr_fecs_falcon_hwcfg_r());
@@ -649,7 +648,7 @@ static int gr_gm20b_ctx_wait_lsf_ready(struct gk20a *g, u32 timeout, u32 val)
649 return -ETIMEDOUT; 648 return -ETIMEDOUT;
650} 649}
651 650
652int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) 651static int gr_gm20b_load_ctxsw_ucode(struct gk20a *g)
653{ 652{
654 u32 err; 653 u32 err;
655 gk20a_dbg_fn(""); 654 gk20a_dbg_fn("");
@@ -711,30 +710,42 @@ int gr_gm20b_load_ctxsw_ucode(struct gk20a *g)
711} 710}
712#else 711#else
713 712
714int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) 713static int gr_gm20b_load_ctxsw_ucode(struct gk20a *g)
715{ 714{
716 return -EPERM; 715 return -EPERM;
717} 716}
718 717
719#endif 718#endif
720 719
721#include "gk20a/gr_ops_gk20a.h"
722#include "gr_ops_gm20b.h"
723
724static struct gpu_gr_ops gm20b_gr_ops = {
725 __set_gr_gm20b_ops(),
726 __set_gr_gk20a_op(load_ctxsw_ucode)
727};
728
729static struct gpu_gr_ops gm20b_gr_privsecurity_ops = {
730 __set_gr_gm20b_ops(),
731 __set_gr_gm20b_op(load_ctxsw_ucode)
732};
733
734void gm20b_init_gr(struct gpu_ops *gops) 720void gm20b_init_gr(struct gpu_ops *gops)
735{ 721{
722 gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu;
723 gops->gr.bundle_cb_defaults = gr_gm20b_bundle_cb_defaults;
724 gops->gr.cb_size_default = gr_gm20b_cb_size_default;
725 gops->gr.calc_global_ctx_buffer_size =
726 gr_gm20b_calc_global_ctx_buffer_size;
727 gops->gr.commit_global_attrib_cb = gr_gk20a_commit_global_attrib_cb;
728 gops->gr.commit_global_bundle_cb = gr_gm20b_commit_global_bundle_cb;
729 gops->gr.commit_global_cb_manager = gr_gm20b_commit_global_cb_manager;
730 gops->gr.commit_global_pagepool = gr_gm20b_commit_global_pagepool;
731 gops->gr.handle_sw_method = gr_gm20b_handle_sw_method;
732 gops->gr.set_alpha_circular_buffer_size = gr_gm20b_set_alpha_circular_buffer_size;
733 gops->gr.set_circular_buffer_size = gr_gm20b_set_circular_buffer_size;
734 gops->gr.enable_hww_exceptions = gr_gm20b_enable_hww_exceptions;
735 gops->gr.is_valid_class = gr_gm20b_is_valid_class;
736 gops->gr.get_sm_dsm_perf_regs = gr_gm20b_get_sm_dsm_perf_regs;
737 gops->gr.get_sm_dsm_perf_ctrl_regs = gr_gm20b_get_sm_dsm_perf_ctrl_regs;
738 gops->gr.init_fs_state = gr_gm20b_ctx_state_floorsweep;
739 gops->gr.set_hww_esr_report_mask = gr_gm20b_set_hww_esr_report_mask;
740 gops->gr.falcon_load_ucode = gr_gm20b_load_ctxsw_ucode_segments;
736 if (gops->privsecurity) 741 if (gops->privsecurity)
737 gops->gr = &gm20b_gr_privsecurity_ops; 742 gops->gr.load_ctxsw_ucode = gr_gm20b_load_ctxsw_ucode;
738 else 743 else
739 gops->gr = &gm20b_gr_ops; 744 gops->gr.load_ctxsw_ucode = gr_gk20a_load_ctxsw_ucode;
745 gops->gr.get_gpc_tpc_mask = gr_gm20b_get_gpc_tpc_mask;
746 gops->gr.free_channel_ctx = gk20a_free_channel_ctx;
747 gops->gr.alloc_obj_ctx = gk20a_alloc_obj_ctx;
748 gops->gr.free_obj_ctx = gk20a_free_obj_ctx;
749 gops->gr.bind_ctxsw_zcull = gr_gk20a_bind_ctxsw_zcull;
750 gops->gr.get_zcull_info = gr_gk20a_get_zcull_info;
740} 751}