diff options
author | Sunny He <suhe@nvidia.com> | 2017-08-17 19:11:34 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-08-24 12:34:43 -0400 |
commit | 4b5b67d6d83430d8d670660b1dfc9cf024d60d88 (patch) | |
tree | 541a421438fe849ee4b1ab9e6bdfa9e8b6ee4485 /drivers/gpu/nvgpu/gm20b/gr_gm20b.c | |
parent | 82ba1277f3da7379ed6b8288c04bb91db008549c (diff) |
gpu: nvgpu: Reorg gr HAL initialization
Reorganize HAL initialization to remove inheritance and construct
the gpu_ops struct at compile time. This patch only covers the
gr sub-module of the gpu_ops struct.
Perform HAL function assignments in hal_gxxxx.c through the
population of a chip-specific copy of gpu_ops.
Jira NVGPU-74
Change-Id: Ie37638f442fd68aca8a7ade5f297118447bdc91e
Signed-off-by: Sunny He <suhe@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1542989
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/gr_gm20b.c')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/gr_gm20b.c | 222 |
1 files changed, 52 insertions, 170 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c index 5fcc3f7b..30991102 100644 --- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c | |||
@@ -36,7 +36,7 @@ | |||
36 | #include <nvgpu/hw/gm20b/hw_ctxsw_prog_gm20b.h> | 36 | #include <nvgpu/hw/gm20b/hw_ctxsw_prog_gm20b.h> |
37 | #include <nvgpu/hw/gm20b/hw_fuse_gm20b.h> | 37 | #include <nvgpu/hw/gm20b/hw_fuse_gm20b.h> |
38 | 38 | ||
39 | static void gr_gm20b_init_gpc_mmu(struct gk20a *g) | 39 | void gr_gm20b_init_gpc_mmu(struct gk20a *g) |
40 | { | 40 | { |
41 | u32 temp; | 41 | u32 temp; |
42 | 42 | ||
@@ -73,7 +73,7 @@ static void gr_gm20b_init_gpc_mmu(struct gk20a *g) | |||
73 | gk20a_readl(g, fb_fbhub_num_active_ltcs_r())); | 73 | gk20a_readl(g, fb_fbhub_num_active_ltcs_r())); |
74 | } | 74 | } |
75 | 75 | ||
76 | static void gr_gm20b_bundle_cb_defaults(struct gk20a *g) | 76 | void gr_gm20b_bundle_cb_defaults(struct gk20a *g) |
77 | { | 77 | { |
78 | struct gr_gk20a *gr = &g->gr; | 78 | struct gr_gk20a *gr = &g->gr; |
79 | 79 | ||
@@ -85,7 +85,7 @@ static void gr_gm20b_bundle_cb_defaults(struct gk20a *g) | |||
85 | gr_pd_ab_dist_cfg2_token_limit_init_v(); | 85 | gr_pd_ab_dist_cfg2_token_limit_init_v(); |
86 | } | 86 | } |
87 | 87 | ||
88 | static void gr_gm20b_cb_size_default(struct gk20a *g) | 88 | void gr_gm20b_cb_size_default(struct gk20a *g) |
89 | { | 89 | { |
90 | struct gr_gk20a *gr = &g->gr; | 90 | struct gr_gk20a *gr = &g->gr; |
91 | 91 | ||
@@ -96,7 +96,7 @@ static void gr_gm20b_cb_size_default(struct gk20a *g) | |||
96 | gr_gpc0_ppc0_cbm_alpha_cb_size_v_default_v(); | 96 | gr_gpc0_ppc0_cbm_alpha_cb_size_v_default_v(); |
97 | } | 97 | } |
98 | 98 | ||
99 | static int gr_gm20b_calc_global_ctx_buffer_size(struct gk20a *g) | 99 | int gr_gm20b_calc_global_ctx_buffer_size(struct gk20a *g) |
100 | { | 100 | { |
101 | struct gr_gk20a *gr = &g->gr; | 101 | struct gr_gk20a *gr = &g->gr; |
102 | int size; | 102 | int size; |
@@ -134,7 +134,7 @@ void gr_gm20b_commit_global_attrib_cb(struct gk20a *g, | |||
134 | gr_gpcs_tpcs_mpc_vtg_cb_global_base_addr_valid_true_f(), patch); | 134 | gr_gpcs_tpcs_mpc_vtg_cb_global_base_addr_valid_true_f(), patch); |
135 | } | 135 | } |
136 | 136 | ||
137 | static void gr_gm20b_commit_global_bundle_cb(struct gk20a *g, | 137 | void gr_gm20b_commit_global_bundle_cb(struct gk20a *g, |
138 | struct channel_ctx_gk20a *ch_ctx, | 138 | struct channel_ctx_gk20a *ch_ctx, |
139 | u64 addr, u64 size, bool patch) | 139 | u64 addr, u64 size, bool patch) |
140 | { | 140 | { |
@@ -170,7 +170,7 @@ static void gr_gm20b_commit_global_bundle_cb(struct gk20a *g, | |||
170 | 170 | ||
171 | } | 171 | } |
172 | 172 | ||
173 | static int gr_gm20b_commit_global_cb_manager(struct gk20a *g, | 173 | int gr_gm20b_commit_global_cb_manager(struct gk20a *g, |
174 | struct channel_gk20a *c, bool patch) | 174 | struct channel_gk20a *c, bool patch) |
175 | { | 175 | { |
176 | struct gr_gk20a *gr = &g->gr; | 176 | struct gr_gk20a *gr = &g->gr; |
@@ -250,7 +250,7 @@ static int gr_gm20b_commit_global_cb_manager(struct gk20a *g, | |||
250 | return 0; | 250 | return 0; |
251 | } | 251 | } |
252 | 252 | ||
253 | static void gr_gm20b_commit_global_pagepool(struct gk20a *g, | 253 | void gr_gm20b_commit_global_pagepool(struct gk20a *g, |
254 | struct channel_ctx_gk20a *ch_ctx, | 254 | struct channel_ctx_gk20a *ch_ctx, |
255 | u64 addr, u32 size, bool patch) | 255 | u64 addr, u32 size, bool patch) |
256 | { | 256 | { |
@@ -276,7 +276,7 @@ void gr_gm20b_set_rd_coalesce(struct gk20a *g, u32 data) | |||
276 | gk20a_dbg_fn("done"); | 276 | gk20a_dbg_fn("done"); |
277 | } | 277 | } |
278 | 278 | ||
279 | static int gr_gm20b_handle_sw_method(struct gk20a *g, u32 addr, | 279 | int gr_gm20b_handle_sw_method(struct gk20a *g, u32 addr, |
280 | u32 class_num, u32 offset, u32 data) | 280 | u32 class_num, u32 offset, u32 data) |
281 | { | 281 | { |
282 | gk20a_dbg_fn(""); | 282 | gk20a_dbg_fn(""); |
@@ -318,7 +318,7 @@ fail: | |||
318 | return -EINVAL; | 318 | return -EINVAL; |
319 | } | 319 | } |
320 | 320 | ||
321 | static void gr_gm20b_set_alpha_circular_buffer_size(struct gk20a *g, u32 data) | 321 | void gr_gm20b_set_alpha_circular_buffer_size(struct gk20a *g, u32 data) |
322 | { | 322 | { |
323 | struct gr_gk20a *gr = &g->gr; | 323 | struct gr_gk20a *gr = &g->gr; |
324 | u32 gpc_index, ppc_index, stride, val; | 324 | u32 gpc_index, ppc_index, stride, val; |
@@ -368,7 +368,7 @@ static void gr_gm20b_set_alpha_circular_buffer_size(struct gk20a *g, u32 data) | |||
368 | } | 368 | } |
369 | } | 369 | } |
370 | 370 | ||
371 | static void gr_gm20b_set_circular_buffer_size(struct gk20a *g, u32 data) | 371 | void gr_gm20b_set_circular_buffer_size(struct gk20a *g, u32 data) |
372 | { | 372 | { |
373 | struct gr_gk20a *gr = &g->gr; | 373 | struct gr_gk20a *gr = &g->gr; |
374 | u32 gpc_index, ppc_index, stride, val; | 374 | u32 gpc_index, ppc_index, stride, val; |
@@ -423,7 +423,7 @@ static void gr_gm20b_set_circular_buffer_size(struct gk20a *g, u32 data) | |||
423 | } | 423 | } |
424 | } | 424 | } |
425 | 425 | ||
426 | static void gr_gm20b_set_hww_esr_report_mask(struct gk20a *g) | 426 | void gr_gm20b_set_hww_esr_report_mask(struct gk20a *g) |
427 | { | 427 | { |
428 | /* setup sm warp esr report masks */ | 428 | /* setup sm warp esr report masks */ |
429 | gk20a_writel(g, gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_r(), | 429 | gk20a_writel(g, gr_gpcs_tpcs_sm_hww_warp_esr_report_mask_r(), |
@@ -456,7 +456,7 @@ static void gr_gm20b_set_hww_esr_report_mask(struct gk20a *g) | |||
456 | gr_gpcs_tpcs_sm_hww_global_esr_report_mask_multiple_warp_errors_report_f()); | 456 | gr_gpcs_tpcs_sm_hww_global_esr_report_mask_multiple_warp_errors_report_f()); |
457 | } | 457 | } |
458 | 458 | ||
459 | static bool gr_gm20b_is_valid_class(struct gk20a *g, u32 class_num) | 459 | bool gr_gm20b_is_valid_class(struct gk20a *g, u32 class_num) |
460 | { | 460 | { |
461 | bool valid = false; | 461 | bool valid = false; |
462 | 462 | ||
@@ -476,7 +476,7 @@ static bool gr_gm20b_is_valid_class(struct gk20a *g, u32 class_num) | |||
476 | return valid; | 476 | return valid; |
477 | } | 477 | } |
478 | 478 | ||
479 | static bool gr_gm20b_is_valid_gfx_class(struct gk20a *g, u32 class_num) | 479 | bool gr_gm20b_is_valid_gfx_class(struct gk20a *g, u32 class_num) |
480 | { | 480 | { |
481 | if (class_num == MAXWELL_B) | 481 | if (class_num == MAXWELL_B) |
482 | return true; | 482 | return true; |
@@ -484,7 +484,7 @@ static bool gr_gm20b_is_valid_gfx_class(struct gk20a *g, u32 class_num) | |||
484 | return false; | 484 | return false; |
485 | } | 485 | } |
486 | 486 | ||
487 | static bool gr_gm20b_is_valid_compute_class(struct gk20a *g, u32 class_num) | 487 | bool gr_gm20b_is_valid_compute_class(struct gk20a *g, u32 class_num) |
488 | { | 488 | { |
489 | if (class_num == MAXWELL_COMPUTE_B) | 489 | if (class_num == MAXWELL_COMPUTE_B) |
490 | return true; | 490 | return true; |
@@ -502,7 +502,7 @@ static const u32 _num_sm_dsm_perf_ctrl_regs = 2; | |||
502 | static u32 *_sm_dsm_perf_regs; | 502 | static u32 *_sm_dsm_perf_regs; |
503 | static u32 _sm_dsm_perf_ctrl_regs[2]; | 503 | static u32 _sm_dsm_perf_ctrl_regs[2]; |
504 | 504 | ||
505 | static void gr_gm20b_init_sm_dsm_reg_info(void) | 505 | void gr_gm20b_init_sm_dsm_reg_info(void) |
506 | { | 506 | { |
507 | if (_sm_dsm_perf_ctrl_regs[0] != 0) | 507 | if (_sm_dsm_perf_ctrl_regs[0] != 0) |
508 | return; | 508 | return; |
@@ -513,7 +513,7 @@ static void gr_gm20b_init_sm_dsm_reg_info(void) | |||
513 | gr_pri_gpc0_tpc0_sm_dsm_perf_counter_control5_r(); | 513 | gr_pri_gpc0_tpc0_sm_dsm_perf_counter_control5_r(); |
514 | } | 514 | } |
515 | 515 | ||
516 | static void gr_gm20b_get_sm_dsm_perf_regs(struct gk20a *g, | 516 | void gr_gm20b_get_sm_dsm_perf_regs(struct gk20a *g, |
517 | u32 *num_sm_dsm_perf_regs, | 517 | u32 *num_sm_dsm_perf_regs, |
518 | u32 **sm_dsm_perf_regs, | 518 | u32 **sm_dsm_perf_regs, |
519 | u32 *perf_register_stride) | 519 | u32 *perf_register_stride) |
@@ -523,7 +523,7 @@ static void gr_gm20b_get_sm_dsm_perf_regs(struct gk20a *g, | |||
523 | *perf_register_stride = 0; | 523 | *perf_register_stride = 0; |
524 | } | 524 | } |
525 | 525 | ||
526 | static void gr_gm20b_get_sm_dsm_perf_ctrl_regs(struct gk20a *g, | 526 | void gr_gm20b_get_sm_dsm_perf_ctrl_regs(struct gk20a *g, |
527 | u32 *num_sm_dsm_perf_ctrl_regs, | 527 | u32 *num_sm_dsm_perf_ctrl_regs, |
528 | u32 **sm_dsm_perf_ctrl_regs, | 528 | u32 **sm_dsm_perf_ctrl_regs, |
529 | u32 *ctrl_register_stride) | 529 | u32 *ctrl_register_stride) |
@@ -535,7 +535,7 @@ static void gr_gm20b_get_sm_dsm_perf_ctrl_regs(struct gk20a *g, | |||
535 | ctxsw_prog_extended_sm_dsm_perf_counter_control_register_stride_v(); | 535 | ctxsw_prog_extended_sm_dsm_perf_counter_control_register_stride_v(); |
536 | } | 536 | } |
537 | 537 | ||
538 | static u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) | 538 | u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) |
539 | { | 539 | { |
540 | u32 val; | 540 | u32 val; |
541 | struct gr_gk20a *gr = &g->gr; | 541 | struct gr_gk20a *gr = &g->gr; |
@@ -546,7 +546,7 @@ static u32 gr_gm20b_get_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) | |||
546 | return (~val) & ((0x1 << gr->max_tpc_per_gpc_count) - 1); | 546 | return (~val) & ((0x1 << gr->max_tpc_per_gpc_count) - 1); |
547 | } | 547 | } |
548 | 548 | ||
549 | static void gr_gm20b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) | 549 | void gr_gm20b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) |
550 | { | 550 | { |
551 | nvgpu_tegra_fuse_write_bypass(g, 0x1); | 551 | nvgpu_tegra_fuse_write_bypass(g, 0x1); |
552 | nvgpu_tegra_fuse_write_access_sw(g, 0x0); | 552 | nvgpu_tegra_fuse_write_access_sw(g, 0x0); |
@@ -563,7 +563,7 @@ static void gr_gm20b_set_gpc_tpc_mask(struct gk20a *g, u32 gpc_index) | |||
563 | } | 563 | } |
564 | } | 564 | } |
565 | 565 | ||
566 | static void gr_gm20b_load_tpc_mask(struct gk20a *g) | 566 | void gr_gm20b_load_tpc_mask(struct gk20a *g) |
567 | { | 567 | { |
568 | u32 pes_tpc_mask = 0, fuse_tpc_mask; | 568 | u32 pes_tpc_mask = 0, fuse_tpc_mask; |
569 | u32 gpc, pes; | 569 | u32 gpc, pes; |
@@ -588,7 +588,7 @@ static void gr_gm20b_load_tpc_mask(struct gk20a *g) | |||
588 | } | 588 | } |
589 | } | 589 | } |
590 | 590 | ||
591 | static void gr_gm20b_program_sm_id_numbering(struct gk20a *g, | 591 | void gr_gm20b_program_sm_id_numbering(struct gk20a *g, |
592 | u32 gpc, u32 tpc, u32 smid) | 592 | u32 gpc, u32 tpc, u32 smid) |
593 | { | 593 | { |
594 | u32 gpc_stride = nvgpu_get_litter_value(g, GPU_LIT_GPC_STRIDE); | 594 | u32 gpc_stride = nvgpu_get_litter_value(g, GPU_LIT_GPC_STRIDE); |
@@ -604,7 +604,7 @@ static void gr_gm20b_program_sm_id_numbering(struct gk20a *g, | |||
604 | gr_gpc0_tpc0_pe_cfg_smid_value_f(smid)); | 604 | gr_gpc0_tpc0_pe_cfg_smid_value_f(smid)); |
605 | } | 605 | } |
606 | 606 | ||
607 | static int gr_gm20b_load_smid_config(struct gk20a *g) | 607 | int gr_gm20b_load_smid_config(struct gk20a *g) |
608 | { | 608 | { |
609 | u32 *tpc_sm_id; | 609 | u32 *tpc_sm_id; |
610 | u32 i, j; | 610 | u32 i, j; |
@@ -669,7 +669,7 @@ int gr_gm20b_init_fs_state(struct gk20a *g) | |||
669 | return 0; | 669 | return 0; |
670 | } | 670 | } |
671 | 671 | ||
672 | static int gr_gm20b_load_ctxsw_ucode_segments(struct gk20a *g, u64 addr_base, | 672 | int gr_gm20b_load_ctxsw_ucode_segments(struct gk20a *g, u64 addr_base, |
673 | struct gk20a_ctxsw_ucode_segments *segments, u32 reg_offset) | 673 | struct gk20a_ctxsw_ucode_segments *segments, u32 reg_offset) |
674 | { | 674 | { |
675 | gk20a_writel(g, reg_offset + gr_fecs_dmactl_r(), | 675 | gk20a_writel(g, reg_offset + gr_fecs_dmactl_r(), |
@@ -697,7 +697,7 @@ static bool gr_gm20b_is_tpc_addr_shared(struct gk20a *g, u32 addr) | |||
697 | tpc_in_gpc_stride)); | 697 | tpc_in_gpc_stride)); |
698 | } | 698 | } |
699 | 699 | ||
700 | static bool gr_gm20b_is_tpc_addr(struct gk20a *g, u32 addr) | 700 | bool gr_gm20b_is_tpc_addr(struct gk20a *g, u32 addr) |
701 | { | 701 | { |
702 | u32 tpc_in_gpc_base = nvgpu_get_litter_value(g, GPU_LIT_TPC_IN_GPC_BASE); | 702 | u32 tpc_in_gpc_base = nvgpu_get_litter_value(g, GPU_LIT_TPC_IN_GPC_BASE); |
703 | u32 tpc_in_gpc_stride = nvgpu_get_litter_value(g, GPU_LIT_TPC_IN_GPC_STRIDE); | 703 | u32 tpc_in_gpc_stride = nvgpu_get_litter_value(g, GPU_LIT_TPC_IN_GPC_STRIDE); |
@@ -708,7 +708,7 @@ static bool gr_gm20b_is_tpc_addr(struct gk20a *g, u32 addr) | |||
708 | || gr_gm20b_is_tpc_addr_shared(g, addr); | 708 | || gr_gm20b_is_tpc_addr_shared(g, addr); |
709 | } | 709 | } |
710 | 710 | ||
711 | static u32 gr_gm20b_get_tpc_num(struct gk20a *g, u32 addr) | 711 | u32 gr_gm20b_get_tpc_num(struct gk20a *g, u32 addr) |
712 | { | 712 | { |
713 | u32 i, start; | 713 | u32 i, start; |
714 | u32 num_tpcs = nvgpu_get_litter_value(g, GPU_LIT_NUM_TPC_PER_GPC); | 714 | u32 num_tpcs = nvgpu_get_litter_value(g, GPU_LIT_NUM_TPC_PER_GPC); |
@@ -738,7 +738,7 @@ static void gr_gm20b_load_gpccs_with_bootloader(struct gk20a *g) | |||
738 | gr_fecs_falcon_hwcfg_r()); | 738 | gr_fecs_falcon_hwcfg_r()); |
739 | } | 739 | } |
740 | 740 | ||
741 | static int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) | 741 | int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) |
742 | { | 742 | { |
743 | u32 err, flags; | 743 | u32 err, flags; |
744 | u32 reg_offset = gr_gpcs_gpccs_falcon_hwcfg_r() - | 744 | u32 reg_offset = gr_gpcs_gpccs_falcon_hwcfg_r() - |
@@ -819,14 +819,14 @@ static int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) | |||
819 | } | 819 | } |
820 | #else | 820 | #else |
821 | 821 | ||
822 | static int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) | 822 | int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) |
823 | { | 823 | { |
824 | return -EPERM; | 824 | return -EPERM; |
825 | } | 825 | } |
826 | 826 | ||
827 | #endif | 827 | #endif |
828 | 828 | ||
829 | static void gr_gm20b_detect_sm_arch(struct gk20a *g) | 829 | void gr_gm20b_detect_sm_arch(struct gk20a *g) |
830 | { | 830 | { |
831 | u32 v = gk20a_readl(g, gr_gpc0_tpc0_sm_arch_r()); | 831 | u32 v = gk20a_readl(g, gr_gpc0_tpc0_sm_arch_r()); |
832 | 832 | ||
@@ -838,12 +838,12 @@ static void gr_gm20b_detect_sm_arch(struct gk20a *g) | |||
838 | gr_gpc0_tpc0_sm_arch_warp_count_v(v); | 838 | gr_gpc0_tpc0_sm_arch_warp_count_v(v); |
839 | } | 839 | } |
840 | 840 | ||
841 | static u32 gr_gm20b_pagepool_default_size(struct gk20a *g) | 841 | u32 gr_gm20b_pagepool_default_size(struct gk20a *g) |
842 | { | 842 | { |
843 | return gr_scc_pagepool_total_pages_hwmax_value_v(); | 843 | return gr_scc_pagepool_total_pages_hwmax_value_v(); |
844 | } | 844 | } |
845 | 845 | ||
846 | static int gr_gm20b_alloc_gr_ctx(struct gk20a *g, | 846 | int gr_gm20b_alloc_gr_ctx(struct gk20a *g, |
847 | struct gr_ctx_desc **gr_ctx, struct vm_gk20a *vm, | 847 | struct gr_ctx_desc **gr_ctx, struct vm_gk20a *vm, |
848 | u32 class, | 848 | u32 class, |
849 | u32 flags) | 849 | u32 flags) |
@@ -864,7 +864,7 @@ static int gr_gm20b_alloc_gr_ctx(struct gk20a *g, | |||
864 | return 0; | 864 | return 0; |
865 | } | 865 | } |
866 | 866 | ||
867 | static void gr_gm20b_update_ctxsw_preemption_mode(struct gk20a *g, | 867 | void gr_gm20b_update_ctxsw_preemption_mode(struct gk20a *g, |
868 | struct channel_ctx_gk20a *ch_ctx, | 868 | struct channel_ctx_gk20a *ch_ctx, |
869 | struct nvgpu_mem *mem) | 869 | struct nvgpu_mem *mem) |
870 | { | 870 | { |
@@ -884,7 +884,7 @@ static void gr_gm20b_update_ctxsw_preemption_mode(struct gk20a *g, | |||
884 | gk20a_dbg_fn("done"); | 884 | gk20a_dbg_fn("done"); |
885 | } | 885 | } |
886 | 886 | ||
887 | static int gr_gm20b_dump_gr_status_regs(struct gk20a *g, | 887 | int gr_gm20b_dump_gr_status_regs(struct gk20a *g, |
888 | struct gk20a_debug_output *o) | 888 | struct gk20a_debug_output *o) |
889 | { | 889 | { |
890 | struct gr_gk20a *gr = &g->gr; | 890 | struct gr_gk20a *gr = &g->gr; |
@@ -1022,7 +1022,7 @@ static int gr_gm20b_dump_gr_status_regs(struct gk20a *g, | |||
1022 | return 0; | 1022 | return 0; |
1023 | } | 1023 | } |
1024 | 1024 | ||
1025 | static int gr_gm20b_update_pc_sampling(struct channel_gk20a *c, | 1025 | int gr_gm20b_update_pc_sampling(struct channel_gk20a *c, |
1026 | bool enable) | 1026 | bool enable) |
1027 | { | 1027 | { |
1028 | struct channel_ctx_gk20a *ch_ctx = &c->ch_ctx; | 1028 | struct channel_ctx_gk20a *ch_ctx = &c->ch_ctx; |
@@ -1051,7 +1051,7 @@ static int gr_gm20b_update_pc_sampling(struct channel_gk20a *c, | |||
1051 | return 0; | 1051 | return 0; |
1052 | } | 1052 | } |
1053 | 1053 | ||
1054 | static u32 gr_gm20b_get_fbp_en_mask(struct gk20a *g) | 1054 | u32 gr_gm20b_get_fbp_en_mask(struct gk20a *g) |
1055 | { | 1055 | { |
1056 | u32 fbp_en_mask, opt_fbio; | 1056 | u32 fbp_en_mask, opt_fbio; |
1057 | u32 tmp, max_fbps_count; | 1057 | u32 tmp, max_fbps_count; |
@@ -1066,7 +1066,7 @@ static u32 gr_gm20b_get_fbp_en_mask(struct gk20a *g) | |||
1066 | return fbp_en_mask; | 1066 | return fbp_en_mask; |
1067 | } | 1067 | } |
1068 | 1068 | ||
1069 | static u32 gr_gm20b_get_max_ltc_per_fbp(struct gk20a *g) | 1069 | u32 gr_gm20b_get_max_ltc_per_fbp(struct gk20a *g) |
1070 | { | 1070 | { |
1071 | u32 ltc_per_fbp, reg; | 1071 | u32 ltc_per_fbp, reg; |
1072 | reg = gk20a_readl(g, top_ltc_per_fbp_r()); | 1072 | reg = gk20a_readl(g, top_ltc_per_fbp_r()); |
@@ -1074,7 +1074,7 @@ static u32 gr_gm20b_get_max_ltc_per_fbp(struct gk20a *g) | |||
1074 | return ltc_per_fbp; | 1074 | return ltc_per_fbp; |
1075 | } | 1075 | } |
1076 | 1076 | ||
1077 | static u32 gr_gm20b_get_max_lts_per_ltc(struct gk20a *g) | 1077 | u32 gr_gm20b_get_max_lts_per_ltc(struct gk20a *g) |
1078 | { | 1078 | { |
1079 | u32 lts_per_ltc, reg; | 1079 | u32 lts_per_ltc, reg; |
1080 | reg = gk20a_readl(g, top_slices_per_ltc_r()); | 1080 | reg = gk20a_readl(g, top_slices_per_ltc_r()); |
@@ -1082,7 +1082,7 @@ static u32 gr_gm20b_get_max_lts_per_ltc(struct gk20a *g) | |||
1082 | return lts_per_ltc; | 1082 | return lts_per_ltc; |
1083 | } | 1083 | } |
1084 | 1084 | ||
1085 | static u32 *gr_gm20b_rop_l2_en_mask(struct gk20a *g) | 1085 | u32 *gr_gm20b_rop_l2_en_mask(struct gk20a *g) |
1086 | { | 1086 | { |
1087 | struct gr_gk20a *gr = &g->gr; | 1087 | struct gr_gk20a *gr = &g->gr; |
1088 | u32 i, tmp, max_fbps_count, max_ltc_per_fbp; | 1088 | u32 i, tmp, max_fbps_count, max_ltc_per_fbp; |
@@ -1102,7 +1102,7 @@ static u32 *gr_gm20b_rop_l2_en_mask(struct gk20a *g) | |||
1102 | return gr->fbp_rop_l2_en_mask; | 1102 | return gr->fbp_rop_l2_en_mask; |
1103 | } | 1103 | } |
1104 | 1104 | ||
1105 | static u32 gr_gm20b_get_max_fbps_count(struct gk20a *g) | 1105 | u32 gr_gm20b_get_max_fbps_count(struct gk20a *g) |
1106 | { | 1106 | { |
1107 | u32 tmp, max_fbps_count; | 1107 | u32 tmp, max_fbps_count; |
1108 | tmp = gk20a_readl(g, top_num_fbps_r()); | 1108 | tmp = gk20a_readl(g, top_num_fbps_r()); |
@@ -1110,7 +1110,7 @@ static u32 gr_gm20b_get_max_fbps_count(struct gk20a *g) | |||
1110 | return max_fbps_count; | 1110 | return max_fbps_count; |
1111 | } | 1111 | } |
1112 | 1112 | ||
1113 | static void gr_gm20b_init_cyclestats(struct gk20a *g) | 1113 | void gr_gm20b_init_cyclestats(struct gk20a *g) |
1114 | { | 1114 | { |
1115 | #if defined(CONFIG_GK20A_CYCLE_STATS) | 1115 | #if defined(CONFIG_GK20A_CYCLE_STATS) |
1116 | g->gpu_characteristics.flags |= | 1116 | g->gpu_characteristics.flags |= |
@@ -1122,7 +1122,7 @@ static void gr_gm20b_init_cyclestats(struct gk20a *g) | |||
1122 | #endif | 1122 | #endif |
1123 | } | 1123 | } |
1124 | 1124 | ||
1125 | static void gr_gm20b_enable_cde_in_fecs(struct gk20a *g, struct nvgpu_mem *mem) | 1125 | void gr_gm20b_enable_cde_in_fecs(struct gk20a *g, struct nvgpu_mem *mem) |
1126 | { | 1126 | { |
1127 | u32 cde_v; | 1127 | u32 cde_v; |
1128 | 1128 | ||
@@ -1131,7 +1131,7 @@ static void gr_gm20b_enable_cde_in_fecs(struct gk20a *g, struct nvgpu_mem *mem) | |||
1131 | nvgpu_mem_wr(g, mem, ctxsw_prog_main_image_ctl_o(), cde_v); | 1131 | nvgpu_mem_wr(g, mem, ctxsw_prog_main_image_ctl_o(), cde_v); |
1132 | } | 1132 | } |
1133 | 1133 | ||
1134 | static void gr_gm20b_bpt_reg_info(struct gk20a *g, struct warpstate *w_state) | 1134 | void gr_gm20b_bpt_reg_info(struct gk20a *g, struct warpstate *w_state) |
1135 | { | 1135 | { |
1136 | /* Check if we have at least one valid warp */ | 1136 | /* Check if we have at least one valid warp */ |
1137 | /* get paused state on maxwell */ | 1137 | /* get paused state on maxwell */ |
@@ -1210,7 +1210,7 @@ static void gr_gm20b_bpt_reg_info(struct gk20a *g, struct warpstate *w_state) | |||
1210 | } | 1210 | } |
1211 | } | 1211 | } |
1212 | 1212 | ||
1213 | static void gr_gm20b_get_access_map(struct gk20a *g, | 1213 | void gr_gm20b_get_access_map(struct gk20a *g, |
1214 | u32 **whitelist, int *num_entries) | 1214 | u32 **whitelist, int *num_entries) |
1215 | { | 1215 | { |
1216 | static u32 wl_addr_gm20b[] = { | 1216 | static u32 wl_addr_gm20b[] = { |
@@ -1251,7 +1251,7 @@ static void gr_gm20b_get_access_map(struct gk20a *g, | |||
1251 | *num_entries = ARRAY_SIZE(wl_addr_gm20b); | 1251 | *num_entries = ARRAY_SIZE(wl_addr_gm20b); |
1252 | } | 1252 | } |
1253 | 1253 | ||
1254 | static int gm20b_gr_record_sm_error_state(struct gk20a *g, u32 gpc, u32 tpc) | 1254 | int gm20b_gr_record_sm_error_state(struct gk20a *g, u32 gpc, u32 tpc) |
1255 | { | 1255 | { |
1256 | int sm_id; | 1256 | int sm_id; |
1257 | struct gr_gk20a *gr = &g->gr; | 1257 | struct gr_gk20a *gr = &g->gr; |
@@ -1281,7 +1281,7 @@ static int gm20b_gr_record_sm_error_state(struct gk20a *g, u32 gpc, u32 tpc) | |||
1281 | return 0; | 1281 | return 0; |
1282 | } | 1282 | } |
1283 | 1283 | ||
1284 | static int gm20b_gr_update_sm_error_state(struct gk20a *g, | 1284 | int gm20b_gr_update_sm_error_state(struct gk20a *g, |
1285 | struct channel_gk20a *ch, u32 sm_id, | 1285 | struct channel_gk20a *ch, u32 sm_id, |
1286 | struct nvgpu_dbg_gpu_sm_error_state_record *sm_error_state) | 1286 | struct nvgpu_dbg_gpu_sm_error_state_record *sm_error_state) |
1287 | { | 1287 | { |
@@ -1353,7 +1353,7 @@ fail: | |||
1353 | return err; | 1353 | return err; |
1354 | } | 1354 | } |
1355 | 1355 | ||
1356 | static int gm20b_gr_clear_sm_error_state(struct gk20a *g, | 1356 | int gm20b_gr_clear_sm_error_state(struct gk20a *g, |
1357 | struct channel_gk20a *ch, u32 sm_id) | 1357 | struct channel_gk20a *ch, u32 sm_id) |
1358 | { | 1358 | { |
1359 | u32 gpc, tpc, offset; | 1359 | u32 gpc, tpc, offset; |
@@ -1394,7 +1394,7 @@ fail: | |||
1394 | return err; | 1394 | return err; |
1395 | } | 1395 | } |
1396 | 1396 | ||
1397 | static int gr_gm20b_get_preemption_mode_flags(struct gk20a *g, | 1397 | int gr_gm20b_get_preemption_mode_flags(struct gk20a *g, |
1398 | struct nvgpu_preemption_modes_rec *preemption_modes_rec) | 1398 | struct nvgpu_preemption_modes_rec *preemption_modes_rec) |
1399 | { | 1399 | { |
1400 | preemption_modes_rec->graphics_preemption_mode_flags = | 1400 | preemption_modes_rec->graphics_preemption_mode_flags = |
@@ -1421,7 +1421,7 @@ int gm20b_gr_tpc_disable_override(struct gk20a *g, u32 mask) | |||
1421 | return 0; | 1421 | return 0; |
1422 | } | 1422 | } |
1423 | 1423 | ||
1424 | static int gm20b_gr_fuse_override(struct gk20a *g) | 1424 | int gm20b_gr_fuse_override(struct gk20a *g) |
1425 | { | 1425 | { |
1426 | struct device_node *np = dev_from_gk20a(g)->of_node; | 1426 | struct device_node *np = dev_from_gk20a(g)->of_node; |
1427 | u32 *fuses; | 1427 | u32 *fuses; |
@@ -1457,7 +1457,7 @@ static int gm20b_gr_fuse_override(struct gk20a *g) | |||
1457 | return 0; | 1457 | return 0; |
1458 | } | 1458 | } |
1459 | 1459 | ||
1460 | static bool gr_gm20b_is_ltcs_ltss_addr(struct gk20a *g, u32 addr) | 1460 | bool gr_gm20b_is_ltcs_ltss_addr(struct gk20a *g, u32 addr) |
1461 | { | 1461 | { |
1462 | u32 ltc_shared_base = ltc_ltcs_ltss_v(); | 1462 | u32 ltc_shared_base = ltc_ltcs_ltss_v(); |
1463 | u32 lts_stride = nvgpu_get_litter_value(g, GPU_LIT_LTS_STRIDE); | 1463 | u32 lts_stride = nvgpu_get_litter_value(g, GPU_LIT_LTS_STRIDE); |
@@ -1466,7 +1466,7 @@ static bool gr_gm20b_is_ltcs_ltss_addr(struct gk20a *g, u32 addr) | |||
1466 | (addr < (ltc_shared_base + lts_stride)); | 1466 | (addr < (ltc_shared_base + lts_stride)); |
1467 | } | 1467 | } |
1468 | 1468 | ||
1469 | static bool gr_gm20b_is_ltcn_ltss_addr(struct gk20a *g, u32 addr) | 1469 | bool gr_gm20b_is_ltcn_ltss_addr(struct gk20a *g, u32 addr) |
1470 | { | 1470 | { |
1471 | u32 lts_shared_base = ltc_ltc0_ltss_v(); | 1471 | u32 lts_shared_base = ltc_ltc0_ltss_v(); |
1472 | u32 lts_stride = nvgpu_get_litter_value(g, GPU_LIT_LTS_STRIDE); | 1472 | u32 lts_stride = nvgpu_get_litter_value(g, GPU_LIT_LTS_STRIDE); |
@@ -1498,7 +1498,7 @@ static void gr_gm20b_update_ltc_lts_addr(struct gk20a *g, u32 addr, u32 ltc_num, | |||
1498 | *priv_addr_table_index = index; | 1498 | *priv_addr_table_index = index; |
1499 | } | 1499 | } |
1500 | 1500 | ||
1501 | static void gr_gm20b_split_lts_broadcast_addr(struct gk20a *g, u32 addr, | 1501 | void gr_gm20b_split_lts_broadcast_addr(struct gk20a *g, u32 addr, |
1502 | u32 *priv_addr_table, | 1502 | u32 *priv_addr_table, |
1503 | u32 *priv_addr_table_index) | 1503 | u32 *priv_addr_table_index) |
1504 | { | 1504 | { |
@@ -1518,7 +1518,7 @@ static void gr_gm20b_split_lts_broadcast_addr(struct gk20a *g, u32 addr, | |||
1518 | priv_addr_table_index); | 1518 | priv_addr_table_index); |
1519 | } | 1519 | } |
1520 | 1520 | ||
1521 | static void gr_gm20b_split_ltc_broadcast_addr(struct gk20a *g, u32 addr, | 1521 | void gr_gm20b_split_ltc_broadcast_addr(struct gk20a *g, u32 addr, |
1522 | u32 *priv_addr_table, | 1522 | u32 *priv_addr_table, |
1523 | u32 *priv_addr_table_index) | 1523 | u32 *priv_addr_table_index) |
1524 | { | 1524 | { |
@@ -1530,7 +1530,7 @@ static void gr_gm20b_split_ltc_broadcast_addr(struct gk20a *g, u32 addr, | |||
1530 | priv_addr_table, priv_addr_table_index); | 1530 | priv_addr_table, priv_addr_table_index); |
1531 | } | 1531 | } |
1532 | 1532 | ||
1533 | static void gm20b_gr_clear_sm_hww(struct gk20a *g, u32 gpc, u32 tpc, u32 sm, | 1533 | void gm20b_gr_clear_sm_hww(struct gk20a *g, u32 gpc, u32 tpc, u32 sm, |
1534 | u32 global_esr) | 1534 | u32 global_esr) |
1535 | { | 1535 | { |
1536 | u32 offset = gk20a_gr_gpc_offset(g, gpc) + gk20a_gr_tpc_offset(g, tpc); | 1536 | u32 offset = gk20a_gr_gpc_offset(g, gpc) + gk20a_gr_tpc_offset(g, tpc); |
@@ -1559,121 +1559,3 @@ void gm20a_gr_disable_rd_coalesce(struct gk20a *g) | |||
1559 | 1559 | ||
1560 | gk20a_writel(g, gr_gpcs_tpcs_tex_m_dbg2_r(), dbg2_reg); | 1560 | gk20a_writel(g, gr_gpcs_tpcs_tex_m_dbg2_r(), dbg2_reg); |
1561 | } | 1561 | } |
1562 | |||
1563 | void gm20b_init_gr(struct gk20a *g) | ||
1564 | { | ||
1565 | struct gpu_ops *gops = &g->ops; | ||
1566 | |||
1567 | gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; | ||
1568 | gops->gr.bundle_cb_defaults = gr_gm20b_bundle_cb_defaults; | ||
1569 | gops->gr.cb_size_default = gr_gm20b_cb_size_default; | ||
1570 | gops->gr.calc_global_ctx_buffer_size = | ||
1571 | gr_gm20b_calc_global_ctx_buffer_size; | ||
1572 | gops->gr.commit_global_attrib_cb = gr_gm20b_commit_global_attrib_cb; | ||
1573 | gops->gr.commit_global_bundle_cb = gr_gm20b_commit_global_bundle_cb; | ||
1574 | gops->gr.commit_global_cb_manager = gr_gm20b_commit_global_cb_manager; | ||
1575 | gops->gr.commit_global_pagepool = gr_gm20b_commit_global_pagepool; | ||
1576 | gops->gr.handle_sw_method = gr_gm20b_handle_sw_method; | ||
1577 | gops->gr.set_alpha_circular_buffer_size = gr_gm20b_set_alpha_circular_buffer_size; | ||
1578 | gops->gr.set_circular_buffer_size = gr_gm20b_set_circular_buffer_size; | ||
1579 | gops->gr.enable_hww_exceptions = gr_gk20a_enable_hww_exceptions; | ||
1580 | gops->gr.is_valid_class = gr_gm20b_is_valid_class; | ||
1581 | gops->gr.is_valid_gfx_class = gr_gm20b_is_valid_gfx_class; | ||
1582 | gops->gr.is_valid_compute_class = gr_gm20b_is_valid_compute_class; | ||
1583 | gops->gr.get_sm_dsm_perf_regs = gr_gm20b_get_sm_dsm_perf_regs; | ||
1584 | gops->gr.get_sm_dsm_perf_ctrl_regs = gr_gm20b_get_sm_dsm_perf_ctrl_regs; | ||
1585 | gops->gr.init_fs_state = gr_gm20b_init_fs_state; | ||
1586 | gops->gr.set_hww_esr_report_mask = gr_gm20b_set_hww_esr_report_mask; | ||
1587 | gops->gr.falcon_load_ucode = gr_gm20b_load_ctxsw_ucode_segments; | ||
1588 | if (nvgpu_is_enabled(g, NVGPU_SEC_PRIVSECURITY)) | ||
1589 | gops->gr.load_ctxsw_ucode = gr_gm20b_load_ctxsw_ucode; | ||
1590 | else | ||
1591 | gops->gr.load_ctxsw_ucode = gr_gk20a_load_ctxsw_ucode; | ||
1592 | gops->gr.set_gpc_tpc_mask = gr_gm20b_set_gpc_tpc_mask; | ||
1593 | gops->gr.get_gpc_tpc_mask = gr_gm20b_get_gpc_tpc_mask; | ||
1594 | gops->gr.free_channel_ctx = gk20a_free_channel_ctx; | ||
1595 | gops->gr.alloc_obj_ctx = gk20a_alloc_obj_ctx; | ||
1596 | gops->gr.bind_ctxsw_zcull = gr_gk20a_bind_ctxsw_zcull; | ||
1597 | gops->gr.get_zcull_info = gr_gk20a_get_zcull_info; | ||
1598 | gops->gr.is_tpc_addr = gr_gm20b_is_tpc_addr; | ||
1599 | gops->gr.get_tpc_num = gr_gm20b_get_tpc_num; | ||
1600 | gops->gr.detect_sm_arch = gr_gm20b_detect_sm_arch; | ||
1601 | gops->gr.add_zbc_color = gr_gk20a_add_zbc_color; | ||
1602 | gops->gr.add_zbc_depth = gr_gk20a_add_zbc_depth; | ||
1603 | gops->gr.zbc_set_table = gk20a_gr_zbc_set_table; | ||
1604 | gops->gr.zbc_query_table = gr_gk20a_query_zbc; | ||
1605 | gops->gr.pmu_save_zbc = gk20a_pmu_save_zbc; | ||
1606 | gops->gr.add_zbc = gr_gk20a_add_zbc; | ||
1607 | gops->gr.pagepool_default_size = gr_gm20b_pagepool_default_size; | ||
1608 | gops->gr.init_ctx_state = gr_gk20a_init_ctx_state; | ||
1609 | gops->gr.alloc_gr_ctx = gr_gm20b_alloc_gr_ctx; | ||
1610 | gops->gr.free_gr_ctx = gr_gk20a_free_gr_ctx; | ||
1611 | gops->gr.update_ctxsw_preemption_mode = | ||
1612 | gr_gm20b_update_ctxsw_preemption_mode; | ||
1613 | gops->gr.dump_gr_regs = gr_gm20b_dump_gr_status_regs; | ||
1614 | gops->gr.update_pc_sampling = gr_gm20b_update_pc_sampling; | ||
1615 | gops->gr.get_fbp_en_mask = gr_gm20b_get_fbp_en_mask; | ||
1616 | gops->gr.get_max_ltc_per_fbp = gr_gm20b_get_max_ltc_per_fbp; | ||
1617 | gops->gr.get_max_lts_per_ltc = gr_gm20b_get_max_lts_per_ltc; | ||
1618 | gops->gr.get_rop_l2_en_mask = gr_gm20b_rop_l2_en_mask; | ||
1619 | gops->gr.get_max_fbps_count = gr_gm20b_get_max_fbps_count; | ||
1620 | gops->gr.init_sm_dsm_reg_info = gr_gm20b_init_sm_dsm_reg_info; | ||
1621 | gops->gr.wait_empty = gr_gk20a_wait_idle; | ||
1622 | gops->gr.init_cyclestats = gr_gm20b_init_cyclestats; | ||
1623 | gops->gr.set_sm_debug_mode = gr_gk20a_set_sm_debug_mode; | ||
1624 | gops->gr.enable_cde_in_fecs = gr_gm20b_enable_cde_in_fecs; | ||
1625 | gops->gr.bpt_reg_info = gr_gm20b_bpt_reg_info; | ||
1626 | gops->gr.get_access_map = gr_gm20b_get_access_map; | ||
1627 | gops->gr.handle_fecs_error = gk20a_gr_handle_fecs_error; | ||
1628 | gops->gr.handle_sm_exception = gr_gk20a_handle_sm_exception; | ||
1629 | gops->gr.handle_tex_exception = gr_gk20a_handle_tex_exception; | ||
1630 | gops->gr.enable_gpc_exceptions = gk20a_gr_enable_gpc_exceptions; | ||
1631 | gops->gr.enable_exceptions = gk20a_gr_enable_exceptions; | ||
1632 | gops->gr.get_lrf_tex_ltc_dram_override = NULL; | ||
1633 | gops->gr.update_smpc_ctxsw_mode = gr_gk20a_update_smpc_ctxsw_mode; | ||
1634 | gops->gr.update_hwpm_ctxsw_mode = gr_gk20a_update_hwpm_ctxsw_mode; | ||
1635 | gops->gr.record_sm_error_state = gm20b_gr_record_sm_error_state; | ||
1636 | gops->gr.update_sm_error_state = gm20b_gr_update_sm_error_state; | ||
1637 | gops->gr.clear_sm_error_state = gm20b_gr_clear_sm_error_state; | ||
1638 | gops->gr.suspend_contexts = gr_gk20a_suspend_contexts; | ||
1639 | gops->gr.resume_contexts = gr_gk20a_resume_contexts; | ||
1640 | gops->gr.get_preemption_mode_flags = gr_gm20b_get_preemption_mode_flags; | ||
1641 | gops->gr.fuse_override = gm20b_gr_fuse_override; | ||
1642 | gops->gr.init_sm_id_table = gr_gk20a_init_sm_id_table; | ||
1643 | gops->gr.load_smid_config = gr_gm20b_load_smid_config; | ||
1644 | gops->gr.program_sm_id_numbering = gr_gm20b_program_sm_id_numbering; | ||
1645 | gops->gr.is_ltcs_ltss_addr = gr_gm20b_is_ltcs_ltss_addr; | ||
1646 | gops->gr.is_ltcn_ltss_addr = gr_gm20b_is_ltcn_ltss_addr; | ||
1647 | gops->gr.split_lts_broadcast_addr = gr_gm20b_split_lts_broadcast_addr; | ||
1648 | gops->gr.split_ltc_broadcast_addr = gr_gm20b_split_ltc_broadcast_addr; | ||
1649 | gops->gr.setup_rop_mapping = gr_gk20a_setup_rop_mapping; | ||
1650 | gops->gr.program_zcull_mapping = gr_gk20a_program_zcull_mapping; | ||
1651 | gops->gr.commit_global_timeslice = gr_gk20a_commit_global_timeslice; | ||
1652 | gops->gr.commit_inst = gr_gk20a_commit_inst; | ||
1653 | gops->gr.write_zcull_ptr = gr_gk20a_write_zcull_ptr; | ||
1654 | gops->gr.write_pm_ptr = gr_gk20a_write_pm_ptr; | ||
1655 | gops->gr.init_elcg_mode = gr_gk20a_init_elcg_mode; | ||
1656 | gops->gr.load_tpc_mask = gr_gm20b_load_tpc_mask; | ||
1657 | gops->gr.inval_icache = gr_gk20a_inval_icache; | ||
1658 | gops->gr.trigger_suspend = gr_gk20a_trigger_suspend; | ||
1659 | gops->gr.wait_for_pause = gr_gk20a_wait_for_pause; | ||
1660 | gops->gr.resume_from_pause = gr_gk20a_resume_from_pause; | ||
1661 | gops->gr.clear_sm_errors = gr_gk20a_clear_sm_errors; | ||
1662 | gops->gr.tpc_enabled_exceptions = gr_gk20a_tpc_enabled_exceptions; | ||
1663 | gops->gr.get_esr_sm_sel = gk20a_gr_get_esr_sm_sel; | ||
1664 | gops->gr.sm_debugger_attached = gk20a_gr_sm_debugger_attached; | ||
1665 | gops->gr.suspend_single_sm = gk20a_gr_suspend_single_sm; | ||
1666 | gops->gr.suspend_all_sms = gk20a_gr_suspend_all_sms; | ||
1667 | gops->gr.resume_single_sm = gk20a_gr_resume_single_sm; | ||
1668 | gops->gr.resume_all_sms = gk20a_gr_resume_all_sms; | ||
1669 | gops->gr.get_sm_hww_warp_esr = gk20a_gr_get_sm_hww_warp_esr; | ||
1670 | gops->gr.get_sm_hww_global_esr = gk20a_gr_get_sm_hww_global_esr; | ||
1671 | gops->gr.get_sm_no_lock_down_hww_global_esr_mask = | ||
1672 | gk20a_gr_get_sm_no_lock_down_hww_global_esr_mask; | ||
1673 | gops->gr.lock_down_sm = gk20a_gr_lock_down_sm; | ||
1674 | gops->gr.wait_for_sm_lock_down = gk20a_gr_wait_for_sm_lock_down; | ||
1675 | gops->gr.clear_sm_hww = gm20b_gr_clear_sm_hww; | ||
1676 | gops->gr.init_ovr_sm_dsm_perf = gk20a_gr_init_ovr_sm_dsm_perf; | ||
1677 | gops->gr.get_ovr_perf_regs = gk20a_gr_get_ovr_perf_regs; | ||
1678 | gops->gr.disable_rd_coalesce = gm20a_gr_disable_rd_coalesce; | ||
1679 | } | ||