diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gv100/hal_gv100.c')
-rw-r--r-- | drivers/gpu/nvgpu/gv100/hal_gv100.c | 149 |
1 files changed, 147 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index e3c2d1cb..4f21e433 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include "gk20a/fb_gk20a.h" | 33 | #include "gk20a/fb_gk20a.h" |
34 | #include "gk20a/mm_gk20a.h" | 34 | #include "gk20a/mm_gk20a.h" |
35 | #include "gk20a/pmu_gk20a.h" | 35 | #include "gk20a/pmu_gk20a.h" |
36 | #include "gk20a/gr_gk20a.h" | ||
36 | 37 | ||
37 | #include "gm20b/ltc_gm20b.h" | 38 | #include "gm20b/ltc_gm20b.h" |
38 | #include "gm20b/gr_gm20b.h" | 39 | #include "gm20b/gr_gm20b.h" |
@@ -43,6 +44,7 @@ | |||
43 | #include "gm20b/acr_gm20b.h" | 44 | #include "gm20b/acr_gm20b.h" |
44 | 45 | ||
45 | #include "gp10b/fb_gp10b.h" | 46 | #include "gp10b/fb_gp10b.h" |
47 | #include "gp10b/gr_gp10b.h" | ||
46 | 48 | ||
47 | #include "gp106/clk_gp106.h" | 49 | #include "gp106/clk_gp106.h" |
48 | #include "gp106/clk_arb_gp106.h" | 50 | #include "gp106/clk_arb_gp106.h" |
@@ -215,6 +217,150 @@ static const struct gpu_ops gv100_ops = { | |||
215 | .isr_nonstall = gp10b_ce_nonstall_isr, | 217 | .isr_nonstall = gp10b_ce_nonstall_isr, |
216 | .get_num_pce = gv11b_ce_get_num_pce, | 218 | .get_num_pce = gv11b_ce_get_num_pce, |
217 | }, | 219 | }, |
220 | .gr = { | ||
221 | .init_gpc_mmu = gr_gv11b_init_gpc_mmu, | ||
222 | .bundle_cb_defaults = gr_gv11b_bundle_cb_defaults, | ||
223 | .cb_size_default = gr_gv11b_cb_size_default, | ||
224 | .calc_global_ctx_buffer_size = | ||
225 | gr_gv11b_calc_global_ctx_buffer_size, | ||
226 | .commit_global_attrib_cb = gr_gv11b_commit_global_attrib_cb, | ||
227 | .commit_global_bundle_cb = gr_gp10b_commit_global_bundle_cb, | ||
228 | .commit_global_cb_manager = gr_gp10b_commit_global_cb_manager, | ||
229 | .commit_global_pagepool = gr_gp10b_commit_global_pagepool, | ||
230 | .handle_sw_method = gr_gv11b_handle_sw_method, | ||
231 | .set_alpha_circular_buffer_size = | ||
232 | gr_gv11b_set_alpha_circular_buffer_size, | ||
233 | .set_circular_buffer_size = gr_gv11b_set_circular_buffer_size, | ||
234 | .enable_hww_exceptions = gr_gv11b_enable_hww_exceptions, | ||
235 | .is_valid_class = gr_gv11b_is_valid_class, | ||
236 | .is_valid_gfx_class = gr_gv11b_is_valid_gfx_class, | ||
237 | .is_valid_compute_class = gr_gv11b_is_valid_compute_class, | ||
238 | .get_sm_dsm_perf_regs = gv11b_gr_get_sm_dsm_perf_regs, | ||
239 | .get_sm_dsm_perf_ctrl_regs = gv11b_gr_get_sm_dsm_perf_ctrl_regs, | ||
240 | .init_fs_state = gr_gv11b_init_fs_state, | ||
241 | .set_hww_esr_report_mask = gv11b_gr_set_hww_esr_report_mask, | ||
242 | .falcon_load_ucode = gr_gm20b_load_ctxsw_ucode_segments, | ||
243 | .load_ctxsw_ucode = gr_gm20b_load_ctxsw_ucode, | ||
244 | .set_gpc_tpc_mask = gr_gv11b_set_gpc_tpc_mask, | ||
245 | .get_gpc_tpc_mask = gr_gm20b_get_gpc_tpc_mask, | ||
246 | .free_channel_ctx = gk20a_free_channel_ctx, | ||
247 | .alloc_obj_ctx = gk20a_alloc_obj_ctx, | ||
248 | .bind_ctxsw_zcull = gr_gk20a_bind_ctxsw_zcull, | ||
249 | .get_zcull_info = gr_gk20a_get_zcull_info, | ||
250 | .is_tpc_addr = gr_gm20b_is_tpc_addr, | ||
251 | .get_tpc_num = gr_gm20b_get_tpc_num, | ||
252 | .detect_sm_arch = gr_gv11b_detect_sm_arch, | ||
253 | .add_zbc_color = gr_gp10b_add_zbc_color, | ||
254 | .add_zbc_depth = gr_gp10b_add_zbc_depth, | ||
255 | .zbc_set_table = gk20a_gr_zbc_set_table, | ||
256 | .zbc_query_table = gr_gk20a_query_zbc, | ||
257 | .pmu_save_zbc = gk20a_pmu_save_zbc, | ||
258 | .add_zbc = gr_gk20a_add_zbc, | ||
259 | .pagepool_default_size = gr_gv11b_pagepool_default_size, | ||
260 | .init_ctx_state = gr_gp10b_init_ctx_state, | ||
261 | .alloc_gr_ctx = gr_gp10b_alloc_gr_ctx, | ||
262 | .free_gr_ctx = gr_gp10b_free_gr_ctx, | ||
263 | .update_ctxsw_preemption_mode = | ||
264 | gr_gp10b_update_ctxsw_preemption_mode, | ||
265 | .dump_gr_regs = gr_gv11b_dump_gr_status_regs, | ||
266 | .update_pc_sampling = gr_gm20b_update_pc_sampling, | ||
267 | .get_fbp_en_mask = gr_gm20b_get_fbp_en_mask, | ||
268 | .get_max_ltc_per_fbp = gr_gm20b_get_max_ltc_per_fbp, | ||
269 | .get_max_lts_per_ltc = gr_gm20b_get_max_lts_per_ltc, | ||
270 | .get_rop_l2_en_mask = gr_gm20b_rop_l2_en_mask, | ||
271 | .get_max_fbps_count = gr_gm20b_get_max_fbps_count, | ||
272 | .init_sm_dsm_reg_info = gv11b_gr_init_sm_dsm_reg_info, | ||
273 | .wait_empty = gr_gv11b_wait_empty, | ||
274 | .init_cyclestats = gr_gv11b_init_cyclestats, | ||
275 | .set_sm_debug_mode = gv11b_gr_set_sm_debug_mode, | ||
276 | .enable_cde_in_fecs = gr_gm20b_enable_cde_in_fecs, | ||
277 | .bpt_reg_info = gv11b_gr_bpt_reg_info, | ||
278 | .get_access_map = gr_gv11b_get_access_map, | ||
279 | .handle_fecs_error = gr_gv11b_handle_fecs_error, | ||
280 | .handle_sm_exception = gr_gk20a_handle_sm_exception, | ||
281 | .handle_tex_exception = gr_gv11b_handle_tex_exception, | ||
282 | .enable_gpc_exceptions = gr_gv11b_enable_gpc_exceptions, | ||
283 | .enable_exceptions = gr_gv11b_enable_exceptions, | ||
284 | .get_lrf_tex_ltc_dram_override = get_ecc_override_val, | ||
285 | .update_smpc_ctxsw_mode = gr_gk20a_update_smpc_ctxsw_mode, | ||
286 | .update_hwpm_ctxsw_mode = gr_gk20a_update_hwpm_ctxsw_mode, | ||
287 | .record_sm_error_state = gv11b_gr_record_sm_error_state, | ||
288 | .update_sm_error_state = gv11b_gr_update_sm_error_state, | ||
289 | .clear_sm_error_state = gm20b_gr_clear_sm_error_state, | ||
290 | .suspend_contexts = gr_gp10b_suspend_contexts, | ||
291 | .resume_contexts = gr_gk20a_resume_contexts, | ||
292 | .get_preemption_mode_flags = gr_gp10b_get_preemption_mode_flags, | ||
293 | .fuse_override = gp10b_gr_fuse_override, | ||
294 | .init_sm_id_table = gr_gv11b_init_sm_id_table, | ||
295 | .load_smid_config = gr_gv11b_load_smid_config, | ||
296 | .program_sm_id_numbering = gr_gv11b_program_sm_id_numbering, | ||
297 | .is_ltcs_ltss_addr = gr_gm20b_is_ltcs_ltss_addr, | ||
298 | .is_ltcn_ltss_addr = gr_gm20b_is_ltcn_ltss_addr, | ||
299 | .split_lts_broadcast_addr = gr_gm20b_split_lts_broadcast_addr, | ||
300 | .split_ltc_broadcast_addr = gr_gm20b_split_ltc_broadcast_addr, | ||
301 | .setup_rop_mapping = gr_gv11b_setup_rop_mapping, | ||
302 | .program_zcull_mapping = gr_gv11b_program_zcull_mapping, | ||
303 | .commit_global_timeslice = gr_gv11b_commit_global_timeslice, | ||
304 | .commit_inst = gr_gv11b_commit_inst, | ||
305 | .write_zcull_ptr = gr_gv11b_write_zcull_ptr, | ||
306 | .write_pm_ptr = gr_gv11b_write_pm_ptr, | ||
307 | .init_elcg_mode = gr_gv11b_init_elcg_mode, | ||
308 | .load_tpc_mask = gr_gv11b_load_tpc_mask, | ||
309 | .inval_icache = gr_gk20a_inval_icache, | ||
310 | .trigger_suspend = gv11b_gr_sm_trigger_suspend, | ||
311 | .wait_for_pause = gr_gk20a_wait_for_pause, | ||
312 | .resume_from_pause = gv11b_gr_resume_from_pause, | ||
313 | .clear_sm_errors = gr_gk20a_clear_sm_errors, | ||
314 | .tpc_enabled_exceptions = gr_gk20a_tpc_enabled_exceptions, | ||
315 | .get_esr_sm_sel = gv11b_gr_get_esr_sm_sel, | ||
316 | .sm_debugger_attached = gv11b_gr_sm_debugger_attached, | ||
317 | .suspend_single_sm = gv11b_gr_suspend_single_sm, | ||
318 | .suspend_all_sms = gv11b_gr_suspend_all_sms, | ||
319 | .resume_single_sm = gv11b_gr_resume_single_sm, | ||
320 | .resume_all_sms = gv11b_gr_resume_all_sms, | ||
321 | .get_sm_hww_warp_esr = gv11b_gr_get_sm_hww_warp_esr, | ||
322 | .get_sm_hww_global_esr = gv11b_gr_get_sm_hww_global_esr, | ||
323 | .get_sm_no_lock_down_hww_global_esr_mask = | ||
324 | gv11b_gr_get_sm_no_lock_down_hww_global_esr_mask, | ||
325 | .lock_down_sm = gv11b_gr_lock_down_sm, | ||
326 | .wait_for_sm_lock_down = gv11b_gr_wait_for_sm_lock_down, | ||
327 | .clear_sm_hww = gv11b_gr_clear_sm_hww, | ||
328 | .init_ovr_sm_dsm_perf = gv11b_gr_init_ovr_sm_dsm_perf, | ||
329 | .get_ovr_perf_regs = gv11b_gr_get_ovr_perf_regs, | ||
330 | .disable_rd_coalesce = gm20a_gr_disable_rd_coalesce, | ||
331 | .set_boosted_ctx = gr_gp10b_set_boosted_ctx, | ||
332 | .set_preemption_mode = gr_gp10b_set_preemption_mode, | ||
333 | .set_czf_bypass = NULL, | ||
334 | .pre_process_sm_exception = gr_gv11b_pre_process_sm_exception, | ||
335 | .set_preemption_buffer_va = gr_gv11b_set_preemption_buffer_va, | ||
336 | .init_preemption_state = NULL, | ||
337 | .update_boosted_ctx = gr_gp10b_update_boosted_ctx, | ||
338 | .set_bes_crop_debug3 = gr_gp10b_set_bes_crop_debug3, | ||
339 | .create_gr_sysfs = gr_gv11b_create_sysfs, | ||
340 | .set_ctxsw_preemption_mode = gr_gp10b_set_ctxsw_preemption_mode, | ||
341 | .is_etpc_addr = gv11b_gr_pri_is_etpc_addr, | ||
342 | .egpc_etpc_priv_addr_table = gv11b_gr_egpc_etpc_priv_addr_table, | ||
343 | .handle_tpc_mpc_exception = gr_gv11b_handle_tpc_mpc_exception, | ||
344 | .zbc_s_query_table = gr_gv11b_zbc_s_query_table, | ||
345 | .load_zbc_s_default_tbl = gr_gv11b_load_stencil_default_tbl, | ||
346 | .restore_context_header = gv11b_restore_context_header, | ||
347 | .handle_gpc_gpcmmu_exception = | ||
348 | gr_gv11b_handle_gpc_gpcmmu_exception, | ||
349 | .add_zbc_type_s = gr_gv11b_add_zbc_type_s, | ||
350 | .get_egpc_base = gv11b_gr_get_egpc_base, | ||
351 | .get_egpc_etpc_num = gv11b_gr_get_egpc_etpc_num, | ||
352 | .handle_gpc_gpccs_exception = | ||
353 | gr_gv11b_handle_gpc_gpccs_exception, | ||
354 | .load_zbc_s_tbl = gr_gv11b_load_stencil_tbl, | ||
355 | .access_smpc_reg = gv11b_gr_access_smpc_reg, | ||
356 | .is_egpc_addr = gv11b_gr_pri_is_egpc_addr, | ||
357 | .add_zbc_s = gr_gv11b_add_zbc_stencil, | ||
358 | .handle_gcc_exception = gr_gv11b_handle_gcc_exception, | ||
359 | .init_sw_veid_bundle = gr_gv11b_init_sw_veid_bundle, | ||
360 | .handle_tpc_sm_ecc_exception = | ||
361 | gr_gv11b_handle_tpc_sm_ecc_exception, | ||
362 | .decode_egpc_addr = gv11b_gr_decode_egpc_addr, | ||
363 | }, | ||
218 | .fb = { | 364 | .fb = { |
219 | .reset = gv100_fb_reset, | 365 | .reset = gv100_fb_reset, |
220 | .init_hw = gk20a_fb_init_hw, | 366 | .init_hw = gk20a_fb_init_hw, |
@@ -483,6 +629,7 @@ int gv100_init_hal(struct gk20a *g) | |||
483 | 629 | ||
484 | gops->ltc = gv100_ops.ltc; | 630 | gops->ltc = gv100_ops.ltc; |
485 | gops->ce2 = gv100_ops.ce2; | 631 | gops->ce2 = gv100_ops.ce2; |
632 | gops->gr = gv100_ops.gr; | ||
486 | gops->fb = gv100_ops.fb; | 633 | gops->fb = gv100_ops.fb; |
487 | gops->clock_gating = gv100_ops.clock_gating; | 634 | gops->clock_gating = gv100_ops.clock_gating; |
488 | gops->fifo = gv100_ops.fifo; | 635 | gops->fifo = gv100_ops.fifo; |
@@ -525,8 +672,6 @@ int gv100_init_hal(struct gk20a *g) | |||
525 | g->pmu_lsf_pmu_wpr_init_done = 0; | 672 | g->pmu_lsf_pmu_wpr_init_done = 0; |
526 | g->bootstrap_owner = LSF_FALCON_ID_SEC2; | 673 | g->bootstrap_owner = LSF_FALCON_ID_SEC2; |
527 | 674 | ||
528 | gv11b_init_gr(g); | ||
529 | |||
530 | gv11b_init_uncompressed_kind_map(); | 675 | gv11b_init_uncompressed_kind_map(); |
531 | gv11b_init_kind_attr(); | 676 | gv11b_init_kind_attr(); |
532 | 677 | ||