summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/gp10b/gr_gp10b.c120
-rw-r--r--drivers/gpu/nvgpu/gp10b/hw_gr_gp10b.h156
2 files changed, 276 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
index 90514b82..e3d4b973 100644
--- a/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/gr_gp10b.c
@@ -20,6 +20,7 @@
20#include "gm20b/gr_gm20b.h" /* for MAXWELL classes */ 20#include "gm20b/gr_gm20b.h" /* for MAXWELL classes */
21#include "gp10b/gr_gp10b.h" 21#include "gp10b/gr_gp10b.h"
22#include "hw_gr_gp10b.h" 22#include "hw_gr_gp10b.h"
23#include "hw_fifo_gp10b.h"
23#include "hw_proj_gp10b.h" 24#include "hw_proj_gp10b.h"
24#include "hw_ctxsw_prog_gp10b.h" 25#include "hw_ctxsw_prog_gp10b.h"
25 26
@@ -692,6 +693,124 @@ static void gr_gp10b_update_ctxsw_preemption_mode(struct gk20a *g,
692 gk20a_dbg_fn("done"); 693 gk20a_dbg_fn("done");
693} 694}
694 695
696static int gr_gp10b_dump_gr_status_regs(struct gk20a *g,
697 struct gk20a_debug_output *o)
698{
699 struct gr_gk20a *gr = &g->gr;
700
701 gk20a_debug_output(o, "NV_PGRAPH_STATUS: 0x%x\n",
702 gk20a_readl(g, gr_status_r()));
703 gk20a_debug_output(o, "NV_PGRAPH_STATUS1: 0x%x\n",
704 gk20a_readl(g, gr_status_1_r()));
705 gk20a_debug_output(o, "NV_PGRAPH_STATUS2: 0x%x\n",
706 gk20a_readl(g, gr_status_2_r()));
707 gk20a_debug_output(o, "NV_PGRAPH_ENGINE_STATUS: 0x%x\n",
708 gk20a_readl(g, gr_engine_status_r()));
709 gk20a_debug_output(o, "NV_PGRAPH_GRFIFO_STATUS : 0x%x\n",
710 gk20a_readl(g, gr_gpfifo_status_r()));
711 gk20a_debug_output(o, "NV_PGRAPH_GRFIFO_CONTROL : 0x%x\n",
712 gk20a_readl(g, gr_gpfifo_ctl_r()));
713 gk20a_debug_output(o, "NV_PGRAPH_PRI_FECS_HOST_INT_STATUS : 0x%x\n",
714 gk20a_readl(g, gr_fecs_host_int_status_r()));
715 gk20a_debug_output(o, "NV_PGRAPH_EXCEPTION : 0x%x\n",
716 gk20a_readl(g, gr_exception_r()));
717 gk20a_debug_output(o, "NV_PGRAPH_FECS_INTR : 0x%x\n",
718 gk20a_readl(g, gr_fecs_intr_r()));
719 gk20a_debug_output(o, "NV_PFIFO_ENGINE_STATUS(GR) : 0x%x\n",
720 gk20a_readl(g, fifo_engine_status_r(ENGINE_GR_GK20A)));
721 gk20a_debug_output(o, "NV_PGRAPH_ACTIVITY0: 0x%x\n",
722 gk20a_readl(g, gr_activity_0_r()));
723 gk20a_debug_output(o, "NV_PGRAPH_ACTIVITY1: 0x%x\n",
724 gk20a_readl(g, gr_activity_1_r()));
725 gk20a_debug_output(o, "NV_PGRAPH_ACTIVITY2: 0x%x\n",
726 gk20a_readl(g, gr_activity_2_r()));
727 gk20a_debug_output(o, "NV_PGRAPH_ACTIVITY4: 0x%x\n",
728 gk20a_readl(g, gr_activity_4_r()));
729 gk20a_debug_output(o, "NV_PGRAPH_PRI_SKED_ACTIVITY: 0x%x\n",
730 gk20a_readl(g, gr_pri_sked_activity_r()));
731 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_GPC_ACTIVITY0: 0x%x\n",
732 gk20a_readl(g, gr_pri_gpc0_gpccs_gpc_activity0_r()));
733 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_GPC_ACTIVITY1: 0x%x\n",
734 gk20a_readl(g, gr_pri_gpc0_gpccs_gpc_activity1_r()));
735 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_GPC_ACTIVITY2: 0x%x\n",
736 gk20a_readl(g, gr_pri_gpc0_gpccs_gpc_activity2_r()));
737 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_GPC_ACTIVITY3: 0x%x\n",
738 gk20a_readl(g, gr_pri_gpc0_gpccs_gpc_activity3_r()));
739 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_TPC0_TPCCS_TPC_ACTIVITY0: 0x%x\n",
740 gk20a_readl(g, gr_pri_gpc0_tpc0_tpccs_tpc_activity_0_r()));
741 if (gr->gpc_tpc_count[0] == 2)
742 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_TPC1_TPCCS_TPC_ACTIVITY0: 0x%x\n",
743 gk20a_readl(g, gr_pri_gpc0_tpc1_tpccs_tpc_activity_0_r()));
744 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_TPCS_TPCCS_TPC_ACTIVITY0: 0x%x\n",
745 gk20a_readl(g, gr_pri_gpc0_tpcs_tpccs_tpc_activity_0_r()));
746 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_GPCCS_GPC_ACTIVITY0: 0x%x\n",
747 gk20a_readl(g, gr_pri_gpcs_gpccs_gpc_activity_0_r()));
748 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_GPCCS_GPC_ACTIVITY1: 0x%x\n",
749 gk20a_readl(g, gr_pri_gpcs_gpccs_gpc_activity_1_r()));
750 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_GPCCS_GPC_ACTIVITY2: 0x%x\n",
751 gk20a_readl(g, gr_pri_gpcs_gpccs_gpc_activity_2_r()));
752 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_GPCCS_GPC_ACTIVITY3: 0x%x\n",
753 gk20a_readl(g, gr_pri_gpcs_gpccs_gpc_activity_3_r()));
754 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_TPC0_TPCCS_TPC_ACTIVITY0: 0x%x\n",
755 gk20a_readl(g, gr_pri_gpcs_tpc0_tpccs_tpc_activity_0_r()));
756 if (gr->gpc_tpc_count[0] == 2)
757 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_TPC1_TPCCS_TPC_ACTIVITY0: 0x%x\n",
758 gk20a_readl(g, gr_pri_gpcs_tpc1_tpccs_tpc_activity_0_r()));
759 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPCS_TPCS_TPCCS_TPC_ACTIVITY0: 0x%x\n",
760 gk20a_readl(g, gr_pri_gpcs_tpcs_tpccs_tpc_activity_0_r()));
761 gk20a_debug_output(o, "NV_PGRAPH_PRI_BE0_BECS_BE_ACTIVITY0: 0x%x\n",
762 gk20a_readl(g, gr_pri_be0_becs_be_activity0_r()));
763 gk20a_debug_output(o, "NV_PGRAPH_PRI_BE1_BECS_BE_ACTIVITY0: 0x%x\n",
764 gk20a_readl(g, gr_pri_be1_becs_be_activity0_r()));
765 gk20a_debug_output(o, "NV_PGRAPH_PRI_BES_BECS_BE_ACTIVITY0: 0x%x\n",
766 gk20a_readl(g, gr_pri_bes_becs_be_activity0_r()));
767 gk20a_debug_output(o, "NV_PGRAPH_PRI_DS_MPIPE_STATUS: 0x%x\n",
768 gk20a_readl(g, gr_pri_ds_mpipe_status_r()));
769 gk20a_debug_output(o, "NV_PGRAPH_PRI_FE_GO_IDLE_TIMEOUT : 0x%x\n",
770 gk20a_readl(g, gr_fe_go_idle_timeout_r()));
771 gk20a_debug_output(o, "NV_PGRAPH_PRI_FE_GO_IDLE_INFO : 0x%x\n",
772 gk20a_readl(g, gr_pri_fe_go_idle_info_r()));
773 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_TPC0_TEX_M_TEX_SUBUNITS_STATUS: 0x%x\n",
774 gk20a_readl(g, gr_pri_gpc0_tpc0_tex_m_tex_subunits_status_r()));
775 gk20a_debug_output(o, "NV_PGRAPH_PRI_CWD_FS: 0x%x\n",
776 gk20a_readl(g, gr_cwd_fs_r()));
777 gk20a_debug_output(o, "NV_PGRAPH_PRI_FE_TPC_FS: 0x%x\n",
778 gk20a_readl(g, gr_fe_tpc_fs_r()));
779 gk20a_debug_output(o, "NV_PGRAPH_PRI_CWD_GPC_TPC_ID(0): 0x%x\n",
780 gk20a_readl(g, gr_cwd_gpc_tpc_id_r(0)));
781 gk20a_debug_output(o, "NV_PGRAPH_PRI_CWD_SM_ID(0): 0x%x\n",
782 gk20a_readl(g, gr_cwd_sm_id_r(0)));
783 gk20a_debug_output(o, "NV_PGRAPH_PRI_FECS_CTXSW_STATUS_FE_0: 0x%x\n",
784 gk20a_readl(g, gr_fecs_ctxsw_status_fe_0_r()));
785 gk20a_debug_output(o, "NV_PGRAPH_PRI_FECS_CTXSW_STATUS_1: 0x%x\n",
786 gk20a_readl(g, gr_fecs_ctxsw_status_1_r()));
787 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_CTXSW_STATUS_GPC_0: 0x%x\n",
788 gk20a_readl(g, gr_gpc0_gpccs_ctxsw_status_gpc_0_r()));
789 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_CTXSW_STATUS_1: 0x%x\n",
790 gk20a_readl(g, gr_gpc0_gpccs_ctxsw_status_1_r()));
791 gk20a_debug_output(o, "NV_PGRAPH_PRI_FECS_CTXSW_IDLESTATE : 0x%x\n",
792 gk20a_readl(g, gr_fecs_ctxsw_idlestate_r()));
793 gk20a_debug_output(o, "NV_PGRAPH_PRI_GPC0_GPCCS_CTXSW_IDLESTATE : 0x%x\n",
794 gk20a_readl(g, gr_gpc0_gpccs_ctxsw_idlestate_r()));
795 gk20a_debug_output(o, "NV_PGRAPH_PRI_FECS_CURRENT_CTX : 0x%x\n",
796 gk20a_readl(g, gr_fecs_current_ctx_r()));
797 gk20a_debug_output(o, "NV_PGRAPH_PRI_FECS_NEW_CTX : 0x%x\n",
798 gk20a_readl(g, gr_fecs_new_ctx_r()));
799 gk20a_debug_output(o, "NV_PGRAPH_PRI_BE0_CROP_STATUS1 : 0x%x\n",
800 gk20a_readl(g, gr_pri_be0_crop_status1_r()));
801 gk20a_debug_output(o, "NV_PGRAPH_PRI_BES_CROP_STATUS1 : 0x%x\n",
802 gk20a_readl(g, gr_pri_bes_crop_status1_r()));
803 gk20a_debug_output(o, "NV_PGRAPH_PRI_BE0_ZROP_STATUS : 0x%x\n",
804 gk20a_readl(g, gr_pri_be0_zrop_status_r()));
805 gk20a_debug_output(o, "NV_PGRAPH_PRI_BE0_ZROP_STATUS2 : 0x%x\n",
806 gk20a_readl(g, gr_pri_be0_zrop_status2_r()));
807 gk20a_debug_output(o, "NV_PGRAPH_PRI_BES_ZROP_STATUS : 0x%x\n",
808 gk20a_readl(g, gr_pri_bes_zrop_status_r()));
809 gk20a_debug_output(o, "NV_PGRAPH_PRI_BES_ZROP_STATUS2 : 0x%x\n",
810 gk20a_readl(g, gr_pri_bes_zrop_status2_r()));
811 return 0;
812}
813
695void gp10b_init_gr(struct gpu_ops *gops) 814void gp10b_init_gr(struct gpu_ops *gops)
696{ 815{
697 gm20b_init_gr(gops); 816 gm20b_init_gr(gops);
@@ -714,4 +833,5 @@ void gp10b_init_gr(struct gpu_ops *gops)
714 gops->gr.free_gr_ctx = gr_gp10b_free_gr_ctx; 833 gops->gr.free_gr_ctx = gr_gp10b_free_gr_ctx;
715 gops->gr.update_ctxsw_preemption_mode = 834 gops->gr.update_ctxsw_preemption_mode =
716 gr_gp10b_update_ctxsw_preemption_mode; 835 gr_gp10b_update_ctxsw_preemption_mode;
836 gops->gr.dump_gr_regs = gr_gp10b_dump_gr_status_regs;
717} 837}
diff --git a/drivers/gpu/nvgpu/gp10b/hw_gr_gp10b.h b/drivers/gpu/nvgpu/gp10b/hw_gr_gp10b.h
index 49078f11..a1cfab57 100644
--- a/drivers/gpu/nvgpu/gp10b/hw_gr_gp10b.h
+++ b/drivers/gpu/nvgpu/gp10b/hw_gr_gp10b.h
@@ -222,6 +222,10 @@ static inline u32 gr_gpfifo_ctl_semaphore_access_enabled_f(void)
222{ 222{
223 return 0x10000; 223 return 0x10000;
224} 224}
225static inline u32 gr_gpfifo_status_r(void)
226{
227 return 0x00400504;
228}
225static inline u32 gr_trapped_addr_r(void) 229static inline u32 gr_trapped_addr_r(void)
226{ 230{
227 return 0x00400704; 231 return 0x00400704;
@@ -266,6 +270,14 @@ static inline u32 gr_status_mask_r(void)
266{ 270{
267 return 0x00400610; 271 return 0x00400610;
268} 272}
273static inline u32 gr_status_1_r(void)
274{
275 return 0x00400604;
276}
277static inline u32 gr_status_2_r(void)
278{
279 return 0x00400608;
280}
269static inline u32 gr_engine_status_r(void) 281static inline u32 gr_engine_status_r(void)
270{ 282{
271 return 0x0040060c; 283 return 0x0040060c;
@@ -274,6 +286,130 @@ static inline u32 gr_engine_status_value_busy_f(void)
274{ 286{
275 return 0x1; 287 return 0x1;
276} 288}
289static inline u32 gr_activity_0_r(void)
290{
291 return 0x00400380;
292}
293static inline u32 gr_activity_1_r(void)
294{
295 return 0x00400384;
296}
297static inline u32 gr_activity_2_r(void)
298{
299 return 0x00400388;
300}
301static inline u32 gr_activity_4_r(void)
302{
303 return 0x00400390;
304}
305static inline u32 gr_pri_sked_activity_r(void)
306{
307 return 0x00407054;
308}
309static inline u32 gr_pri_gpc0_gpccs_gpc_activity0_r(void)
310{
311 return 0x00502c80;
312}
313static inline u32 gr_pri_gpc0_gpccs_gpc_activity1_r(void)
314{
315 return 0x00502c84;
316}
317static inline u32 gr_pri_gpc0_gpccs_gpc_activity2_r(void)
318{
319 return 0x00502c88;
320}
321static inline u32 gr_pri_gpc0_gpccs_gpc_activity3_r(void)
322{
323 return 0x00502c8c;
324}
325static inline u32 gr_pri_gpc0_tpc0_tpccs_tpc_activity_0_r(void)
326{
327 return 0x00504500;
328}
329static inline u32 gr_pri_gpc0_tpc1_tpccs_tpc_activity_0_r(void)
330{
331 return 0x00504d00;
332}
333static inline u32 gr_pri_gpc0_tpcs_tpccs_tpc_activity_0_r(void)
334{
335 return 0x00501d00;
336}
337static inline u32 gr_pri_gpcs_gpccs_gpc_activity_0_r(void)
338{
339 return 0x0041ac80;
340}
341static inline u32 gr_pri_gpcs_gpccs_gpc_activity_1_r(void)
342{
343 return 0x0041ac84;
344}
345static inline u32 gr_pri_gpcs_gpccs_gpc_activity_2_r(void)
346{
347 return 0x0041ac88;
348}
349static inline u32 gr_pri_gpcs_gpccs_gpc_activity_3_r(void)
350{
351 return 0x0041ac8c;
352}
353static inline u32 gr_pri_gpcs_tpc0_tpccs_tpc_activity_0_r(void)
354{
355 return 0x0041c500;
356}
357static inline u32 gr_pri_gpcs_tpc1_tpccs_tpc_activity_0_r(void)
358{
359 return 0x0041cd00;
360}
361static inline u32 gr_pri_gpcs_tpcs_tpccs_tpc_activity_0_r(void)
362{
363 return 0x00419d00;
364}
365static inline u32 gr_pri_be0_becs_be_activity0_r(void)
366{
367 return 0x00410200;
368}
369static inline u32 gr_pri_be1_becs_be_activity0_r(void)
370{
371 return 0x00410600;
372}
373static inline u32 gr_pri_bes_becs_be_activity0_r(void)
374{
375 return 0x00408a00;
376}
377static inline u32 gr_pri_ds_mpipe_status_r(void)
378{
379 return 0x00405858;
380}
381static inline u32 gr_pri_fe_go_idle_info_r(void)
382{
383 return 0x00404194;
384}
385static inline u32 gr_pri_gpc0_tpc0_tex_m_tex_subunits_status_r(void)
386{
387 return 0x00504238;
388}
389static inline u32 gr_pri_be0_crop_status1_r(void)
390{
391 return 0x00410134;
392}
393static inline u32 gr_pri_bes_crop_status1_r(void)
394{
395 return 0x00408934;
396}
397static inline u32 gr_pri_be0_zrop_status_r(void)
398{
399 return 0x00410048;
400}
401static inline u32 gr_pri_be0_zrop_status2_r(void)
402{
403 return 0x0041004c;
404}
405static inline u32 gr_pri_bes_zrop_status_r(void)
406{
407 return 0x00408848;
408}
409static inline u32 gr_pri_bes_zrop_status2_r(void)
410{
411 return 0x0040884c;
412}
277static inline u32 gr_pipe_bundle_address_r(void) 413static inline u32 gr_pipe_bundle_address_r(void)
278{ 414{
279 return 0x00400200; 415 return 0x00400200;
@@ -1062,6 +1198,26 @@ static inline u32 gr_fecs_arb_ctx_cmd_cmd_v(u32 r)
1062{ 1198{
1063 return (r >> 0) & 0x1f; 1199 return (r >> 0) & 0x1f;
1064} 1200}
1201static inline u32 gr_fecs_ctxsw_status_fe_0_r(void)
1202{
1203 return 0x00409c00;
1204}
1205static inline u32 gr_gpc0_gpccs_ctxsw_status_gpc_0_r(void)
1206{
1207 return 0x00502c04;
1208}
1209static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void)
1210{
1211 return 0x00502400;
1212}
1213static inline u32 gr_fecs_ctxsw_idlestate_r(void)
1214{
1215 return 0x00409420;
1216}
1217static inline u32 gr_gpc0_gpccs_ctxsw_idlestate_r(void)
1218{
1219 return 0x00502420;
1220}
1065static inline u32 gr_rstr2d_gpc_map0_r(void) 1221static inline u32 gr_rstr2d_gpc_map0_r(void)
1066{ 1222{
1067 return 0x0040780c; 1223 return 0x0040780c;