summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSeema Khowala <seemaj@nvidia.com>2019-02-14 16:36:19 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2019-05-02 05:43:02 -0400
commitef69df6dae3dd21f10b035e687381a578344e417 (patch)
tree0cb1571076dcb6219e48e043976cc90bd95bd776 /drivers/gpu
parent9bde6f8950c7f19f60d1e907e2458b965d35b8ff (diff)
gpu: nvgpu: add hal to mask/unmask intr during teardown
ctxsw timeout error prevents recovery as it can get triggered periodically. Disable ctxsw timeout interrupt to allow recovery. Bug 2092051 Bug 2429295 Bug 2484211 Bug 1890287 Change-Id: I47470e13968d8b26cdaf519b62fd510bc7ea05d9 Signed-off-by: Seema Khowala <seemaj@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2019645 Signed-off-by: Debarshi Dutta <ddutta@nvidia.com> (cherry picked from commit 68c13e2f0447118d7391807c9b9269749d09a4ec in dev-kernel) Reviewed-on: https://git-master.nvidia.com/r/2024899 GVS: Gerrit_Virtual_Submit Reviewed-by: Bibek Basu <bbasu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.c39
-rw-r--r--drivers/gpu/nvgpu/gk20a/fifo_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c2
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c2
-rw-r--r--drivers/gpu/nvgpu/gv100/fifo_gv100.c20
-rw-r--r--drivers/gpu/nvgpu/gv100/fifo_gv100.h4
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c2
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.c31
-rw-r--r--drivers/gpu/nvgpu/gv11b/fifo_gv11b.h2
-rw-r--r--drivers/gpu/nvgpu/gv11b/hal_gv11b.c2
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/gk20a.h2
11 files changed, 90 insertions, 18 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
index a1844a28..d6f1cb3a 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c
@@ -1980,6 +1980,27 @@ void gk20a_fifo_recover_tsg(struct gk20a *g, struct tsg_gk20a *tsg,
1980 nvgpu_mutex_release(&g->dbg_sessions_lock); 1980 nvgpu_mutex_release(&g->dbg_sessions_lock);
1981} 1981}
1982 1982
1983void gk20a_fifo_teardown_mask_intr(struct gk20a *g)
1984{
1985 u32 val;
1986
1987 val = gk20a_readl(g, fifo_intr_en_0_r());
1988 val &= ~(fifo_intr_en_0_sched_error_m() |
1989 fifo_intr_en_0_mmu_fault_m());
1990 gk20a_writel(g, fifo_intr_en_0_r(), val);
1991 gk20a_writel(g, fifo_intr_0_r(), fifo_intr_0_sched_error_reset_f());
1992}
1993
1994void gk20a_fifo_teardown_unmask_intr(struct gk20a *g)
1995{
1996 u32 val;
1997
1998 val = gk20a_readl(g, fifo_intr_en_0_r());
1999 val |= fifo_intr_en_0_mmu_fault_f(1) | fifo_intr_en_0_sched_error_f(1);
2000 gk20a_writel(g, fifo_intr_en_0_r(), val);
2001
2002}
2003
1983void gk20a_fifo_teardown_ch_tsg(struct gk20a *g, u32 __engine_ids, 2004void gk20a_fifo_teardown_ch_tsg(struct gk20a *g, u32 __engine_ids,
1984 u32 hw_id, unsigned int id_type, unsigned int rc_type, 2005 u32 hw_id, unsigned int id_type, unsigned int rc_type,
1985 struct mmu_fault_info *mmfault) 2006 struct mmu_fault_info *mmfault)
@@ -1987,7 +2008,6 @@ void gk20a_fifo_teardown_ch_tsg(struct gk20a *g, u32 __engine_ids,
1987 unsigned long engine_id, i; 2008 unsigned long engine_id, i;
1988 unsigned long _engine_ids = __engine_ids; 2009 unsigned long _engine_ids = __engine_ids;
1989 unsigned long engine_ids = 0; 2010 unsigned long engine_ids = 0;
1990 u32 val;
1991 u32 mmu_fault_engines = 0; 2011 u32 mmu_fault_engines = 0;
1992 u32 ref_type; 2012 u32 ref_type;
1993 u32 ref_id; 2013 u32 ref_id;
@@ -2048,25 +2068,12 @@ void gk20a_fifo_teardown_ch_tsg(struct gk20a *g, u32 __engine_ids,
2048 } 2068 }
2049 2069
2050 if (mmu_fault_engines) { 2070 if (mmu_fault_engines) {
2051 /* 2071 g->ops.fifo.teardown_mask_intr(g);
2052 * sched error prevents recovery, and ctxsw error will retrigger
2053 * every 100ms. Disable the sched error to allow recovery.
2054 */
2055 val = gk20a_readl(g, fifo_intr_en_0_r());
2056 val &= ~(fifo_intr_en_0_sched_error_m() |
2057 fifo_intr_en_0_mmu_fault_m());
2058 gk20a_writel(g, fifo_intr_en_0_r(), val);
2059 gk20a_writel(g, fifo_intr_0_r(),
2060 fifo_intr_0_sched_error_reset_f());
2061
2062 g->ops.fifo.trigger_mmu_fault(g, engine_ids); 2072 g->ops.fifo.trigger_mmu_fault(g, engine_ids);
2063 gk20a_fifo_handle_mmu_fault_locked(g, mmu_fault_engines, ref_id, 2073 gk20a_fifo_handle_mmu_fault_locked(g, mmu_fault_engines, ref_id,
2064 ref_id_is_tsg); 2074 ref_id_is_tsg);
2065 2075
2066 val = gk20a_readl(g, fifo_intr_en_0_r()); 2076 g->ops.fifo.teardown_unmask_intr(g);
2067 val |= fifo_intr_en_0_mmu_fault_f(1)
2068 | fifo_intr_en_0_sched_error_f(1);
2069 gk20a_writel(g, fifo_intr_en_0_r(), val);
2070 } 2077 }
2071 2078
2072 nvgpu_log_info(g, "release runlist_lock for all runlists"); 2079 nvgpu_log_info(g, "release runlist_lock for all runlists");
diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
index 29c2f889..0c9d9101 100644
--- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h
@@ -426,6 +426,8 @@ bool gk20a_fifo_check_ch_ctxsw_timeout(struct channel_gk20a *ch,
426 bool *verbose, u32 *ms); 426 bool *verbose, u32 *ms);
427bool gk20a_fifo_check_tsg_ctxsw_timeout(struct tsg_gk20a *tsg, 427bool gk20a_fifo_check_tsg_ctxsw_timeout(struct tsg_gk20a *tsg,
428 bool *verbose, u32 *ms); 428 bool *verbose, u32 *ms);
429void gk20a_fifo_teardown_mask_intr(struct gk20a *g);
430void gk20a_fifo_teardown_unmask_intr(struct gk20a *g);
429bool gk20a_fifo_handle_sched_error(struct gk20a *g); 431bool gk20a_fifo_handle_sched_error(struct gk20a *g);
430 432
431void gk20a_fifo_reset_pbdma_method(struct gk20a *g, int pbdma_id, 433void gk20a_fifo_reset_pbdma_method(struct gk20a *g, int pbdma_id,
diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
index dbfbc3d7..c5bf4ff5 100644
--- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
@@ -448,6 +448,8 @@ static const struct gpu_ops gm20b_ops = {
448 .init_pbdma_intr_descs = gm20b_fifo_init_pbdma_intr_descs, 448 .init_pbdma_intr_descs = gm20b_fifo_init_pbdma_intr_descs,
449 .reset_enable_hw = gk20a_init_fifo_reset_enable_hw, 449 .reset_enable_hw = gk20a_init_fifo_reset_enable_hw,
450 .teardown_ch_tsg = gk20a_fifo_teardown_ch_tsg, 450 .teardown_ch_tsg = gk20a_fifo_teardown_ch_tsg,
451 .teardown_mask_intr = gk20a_fifo_teardown_mask_intr,
452 .teardown_unmask_intr = gk20a_fifo_teardown_unmask_intr,
451 .handle_sched_error = gk20a_fifo_handle_sched_error, 453 .handle_sched_error = gk20a_fifo_handle_sched_error,
452 .handle_pbdma_intr_0 = gk20a_fifo_handle_pbdma_intr_0, 454 .handle_pbdma_intr_0 = gk20a_fifo_handle_pbdma_intr_0,
453 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1, 455 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1,
diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
index b3379253..5fcfb32f 100644
--- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
@@ -488,6 +488,8 @@ static const struct gpu_ops gp10b_ops = {
488 .init_pbdma_intr_descs = gp10b_fifo_init_pbdma_intr_descs, 488 .init_pbdma_intr_descs = gp10b_fifo_init_pbdma_intr_descs,
489 .reset_enable_hw = gk20a_init_fifo_reset_enable_hw, 489 .reset_enable_hw = gk20a_init_fifo_reset_enable_hw,
490 .teardown_ch_tsg = gk20a_fifo_teardown_ch_tsg, 490 .teardown_ch_tsg = gk20a_fifo_teardown_ch_tsg,
491 .teardown_mask_intr = gk20a_fifo_teardown_mask_intr,
492 .teardown_unmask_intr = gk20a_fifo_teardown_unmask_intr,
491 .handle_sched_error = gk20a_fifo_handle_sched_error, 493 .handle_sched_error = gk20a_fifo_handle_sched_error,
492 .handle_pbdma_intr_0 = gk20a_fifo_handle_pbdma_intr_0, 494 .handle_pbdma_intr_0 = gk20a_fifo_handle_pbdma_intr_0,
493 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1, 495 .handle_pbdma_intr_1 = gk20a_fifo_handle_pbdma_intr_1,
diff --git a/drivers/gpu/nvgpu/gv100/fifo_gv100.c b/drivers/gpu/nvgpu/gv100/fifo_gv100.c
index 0b5515f2..e23bc77b 100644
--- a/drivers/gpu/nvgpu/gv100/fifo_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/fifo_gv100.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * GV100 fifo 2 * GV100 fifo
3 * 3 *
4 * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"), 7 * copy of this software and associated documentation files (the "Software"),
@@ -55,3 +55,21 @@ void gv100_apply_ctxsw_timeout_intr(struct gk20a *g)
55 gk20a_writel(g, fifo_eng_timeout_r(), timeout); 55 gk20a_writel(g, fifo_eng_timeout_r(), timeout);
56} 56}
57 57
58void gv100_fifo_teardown_mask_intr(struct gk20a *g)
59{
60 u32 val;
61
62 val = gk20a_readl(g, fifo_intr_en_0_r());
63 val &= ~(fifo_intr_en_0_sched_error_m());
64 gk20a_writel(g, fifo_intr_en_0_r(), val);
65 gk20a_writel(g, fifo_intr_0_r(), fifo_intr_0_sched_error_reset_f());
66}
67
68void gv100_fifo_teardown_unmask_intr(struct gk20a *g)
69{
70 u32 val;
71
72 val = gk20a_readl(g, fifo_intr_en_0_r());
73 val |= fifo_intr_en_0_sched_error_f(1);
74 gk20a_writel(g, fifo_intr_en_0_r(), val);
75}
diff --git a/drivers/gpu/nvgpu/gv100/fifo_gv100.h b/drivers/gpu/nvgpu/gv100/fifo_gv100.h
index 0af3fcce..e9a89766 100644
--- a/drivers/gpu/nvgpu/gv100/fifo_gv100.h
+++ b/drivers/gpu/nvgpu/gv100/fifo_gv100.h
@@ -1,7 +1,7 @@
1/* 1/*
2 * GV100 Fifo 2 * GV100 Fifo
3 * 3 *
4 * Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved. 4 * Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved.
5 * 5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a 6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"), 7 * copy of this software and associated documentation files (the "Software"),
@@ -31,4 +31,6 @@ struct gk20a;
31u32 gv100_fifo_get_num_fifos(struct gk20a *g); 31u32 gv100_fifo_get_num_fifos(struct gk20a *g);
32u32 gv100_fifo_get_preempt_timeout(struct gk20a *g); 32u32 gv100_fifo_get_preempt_timeout(struct gk20a *g);
33void gv100_apply_ctxsw_timeout_intr(struct gk20a *g); 33void gv100_apply_ctxsw_timeout_intr(struct gk20a *g);
34void gv100_fifo_teardown_mask_intr(struct gk20a *g);
35void gv100_fifo_teardown_unmask_intr(struct gk20a *g);
34#endif 36#endif
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index 9621aaa4..c8849631 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -639,6 +639,8 @@ static const struct gpu_ops gv100_ops = {
639 .init_pbdma_intr_descs = gv11b_fifo_init_pbdma_intr_descs, 639 .init_pbdma_intr_descs = gv11b_fifo_init_pbdma_intr_descs,
640 .reset_enable_hw = gk20a_init_fifo_reset_enable_hw, 640 .reset_enable_hw = gk20a_init_fifo_reset_enable_hw,
641 .teardown_ch_tsg = gv11b_fifo_teardown_ch_tsg, 641 .teardown_ch_tsg = gv11b_fifo_teardown_ch_tsg,
642 .teardown_mask_intr = gv100_fifo_teardown_mask_intr,
643 .teardown_unmask_intr = gv100_fifo_teardown_unmask_intr,
642 .handle_sched_error = gk20a_fifo_handle_sched_error, 644 .handle_sched_error = gk20a_fifo_handle_sched_error,
643 .handle_pbdma_intr_0 = gv11b_fifo_handle_pbdma_intr_0, 645 .handle_pbdma_intr_0 = gv11b_fifo_handle_pbdma_intr_0,
644 .handle_pbdma_intr_1 = gv11b_fifo_handle_pbdma_intr_1, 646 .handle_pbdma_intr_1 = gv11b_fifo_handle_pbdma_intr_1,
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
index b5af2972..5b84df47 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.c
@@ -982,6 +982,33 @@ static void gv11b_fifo_locked_abort_runlist_active_tsgs(struct gk20a *g,
982 } 982 }
983} 983}
984 984
985void gv11b_fifo_teardown_mask_intr(struct gk20a *g)
986{
987 u32 val;
988
989 /*
990 * ctxsw timeout error prevents recovery, and ctxsw error will retrigger
991 * every 100ms. Disable ctxsw timeout error to allow recovery.
992 */
993 val = gk20a_readl(g, fifo_intr_en_0_r());
994 val &= ~ fifo_intr_0_ctxsw_timeout_pending_f();
995 gk20a_writel(g, fifo_intr_en_0_r(), val);
996 gk20a_writel(g, fifo_intr_ctxsw_timeout_r(),
997 gk20a_readl(g, fifo_intr_ctxsw_timeout_r()));
998
999}
1000
1001void gv11b_fifo_teardown_unmask_intr(struct gk20a *g)
1002{
1003 u32 val;
1004
1005 /* enable ctxsw timeout interrupt */
1006 val = gk20a_readl(g, fifo_intr_en_0_r());
1007 val |= fifo_intr_0_ctxsw_timeout_pending_f();
1008 gk20a_writel(g, fifo_intr_en_0_r(), val);
1009}
1010
1011
985void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask, 1012void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask,
986 u32 id, unsigned int id_type, unsigned int rc_type, 1013 u32 id, unsigned int id_type, unsigned int rc_type,
987 struct mmu_fault_info *mmfault) 1014 struct mmu_fault_info *mmfault)
@@ -1001,6 +1028,8 @@ void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask,
1001 runlist_lock); 1028 runlist_lock);
1002 } 1029 }
1003 1030
1031 g->ops.fifo.teardown_mask_intr(g);
1032
1004 /* get runlist id and tsg */ 1033 /* get runlist id and tsg */
1005 if (id_type == ID_TYPE_TSG) { 1034 if (id_type == ID_TYPE_TSG) {
1006 if (id != FIFO_INVAL_TSG_ID) { 1035 if (id != FIFO_INVAL_TSG_ID) {
@@ -1195,6 +1224,8 @@ void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask,
1195 nvgpu_pmu_enable_elpg(g); 1224 nvgpu_pmu_enable_elpg(g);
1196 } 1225 }
1197 1226
1227 g->ops.fifo.teardown_unmask_intr(g);
1228
1198 /* release runlist_lock */ 1229 /* release runlist_lock */
1199 if (runlist_id != FIFO_INVAL_RUNLIST_ID) { 1230 if (runlist_id != FIFO_INVAL_RUNLIST_ID) {
1200 nvgpu_log_fn(g, "release runlist_lock runlist_id = %d", 1231 nvgpu_log_fn(g, "release runlist_lock runlist_id = %d",
diff --git a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h
index 3d491bad..bc6b0f1c 100644
--- a/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h
+++ b/drivers/gpu/nvgpu/gv11b/fifo_gv11b.h
@@ -87,6 +87,8 @@ int gv11b_fifo_enable_tsg(struct tsg_gk20a *tsg);
87void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask, 87void gv11b_fifo_teardown_ch_tsg(struct gk20a *g, u32 act_eng_bitmask,
88 u32 id, unsigned int id_type, unsigned int rc_type, 88 u32 id, unsigned int id_type, unsigned int rc_type,
89 struct mmu_fault_info *mmfault); 89 struct mmu_fault_info *mmfault);
90void gv11b_fifo_teardown_mask_intr(struct gk20a *g);
91void gv11b_fifo_teardown_unmask_intr(struct gk20a *g);
90void gv11b_fifo_init_pbdma_intr_descs(struct fifo_gk20a *f); 92void gv11b_fifo_init_pbdma_intr_descs(struct fifo_gk20a *f);
91int gv11b_init_fifo_reset_enable_hw(struct gk20a *g); 93int gv11b_init_fifo_reset_enable_hw(struct gk20a *g);
92bool gv11b_fifo_handle_sched_error(struct gk20a *g); 94bool gv11b_fifo_handle_sched_error(struct gk20a *g);
diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
index d52d1c7e..718b6f93 100644
--- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
@@ -601,6 +601,8 @@ static const struct gpu_ops gv11b_ops = {
601 .init_pbdma_intr_descs = gv11b_fifo_init_pbdma_intr_descs, 601 .init_pbdma_intr_descs = gv11b_fifo_init_pbdma_intr_descs,
602 .reset_enable_hw = gv11b_init_fifo_reset_enable_hw, 602 .reset_enable_hw = gv11b_init_fifo_reset_enable_hw,
603 .teardown_ch_tsg = gv11b_fifo_teardown_ch_tsg, 603 .teardown_ch_tsg = gv11b_fifo_teardown_ch_tsg,
604 .teardown_mask_intr = gv11b_fifo_teardown_mask_intr,
605 .teardown_unmask_intr = gv11b_fifo_teardown_unmask_intr,
604 .handle_sched_error = gv11b_fifo_handle_sched_error, 606 .handle_sched_error = gv11b_fifo_handle_sched_error,
605 .handle_pbdma_intr_0 = gv11b_fifo_handle_pbdma_intr_0, 607 .handle_pbdma_intr_0 = gv11b_fifo_handle_pbdma_intr_0,
606 .handle_pbdma_intr_1 = gv11b_fifo_handle_pbdma_intr_1, 608 .handle_pbdma_intr_1 = gv11b_fifo_handle_pbdma_intr_1,
diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
index aa435638..81a4e7b8 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h
@@ -718,6 +718,8 @@ struct gpu_ops {
718 void (*teardown_ch_tsg)(struct gk20a *g, u32 act_eng_bitmask, 718 void (*teardown_ch_tsg)(struct gk20a *g, u32 act_eng_bitmask,
719 u32 id, unsigned int id_type, unsigned int rc_type, 719 u32 id, unsigned int id_type, unsigned int rc_type,
720 struct mmu_fault_info *mmfault); 720 struct mmu_fault_info *mmfault);
721 void (*teardown_mask_intr)(struct gk20a *g);
722 void (*teardown_unmask_intr)(struct gk20a *g);
721 bool (*handle_sched_error)(struct gk20a *g); 723 bool (*handle_sched_error)(struct gk20a *g);
722 bool (*handle_ctxsw_timeout)(struct gk20a *g, u32 fifo_intr); 724 bool (*handle_ctxsw_timeout)(struct gk20a *g, u32 fifo_intr);
723 unsigned int (*handle_pbdma_intr_0)(struct gk20a *g, 725 unsigned int (*handle_pbdma_intr_0)(struct gk20a *g,