summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gv11b/ltc_gv11b.c
diff options
context:
space:
mode:
authorseshendra Gadagottu <sgadagottu@nvidia.com>2018-07-09 19:25:40 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-24 19:10:58 -0400
commit69be500c0b6fab324a34fc0b0f6b80f21a128c7e (patch)
tree2edc7920defdaface49b538f5a1abbd78aa03bcf /drivers/gpu/nvgpu/gv11b/ltc_gv11b.c
parent2c2d9e66710e264d251c0019258eed1dc5bb38f2 (diff)
gpu: nvgpu: debugfs node to enable/disable ltc_illegal_compstat intr
Added debugfs node under ltc directory with name: intr_illegal_compstat_enable Enabling/disabling of ltc_illegal_compstat intr is possible through debugfs node. Since ltc state is lost with rail gate, this setting is cached and will be populated during ltc initialization. Bug 2099406 Change-Id: I4bf62228dfd2bbb94f87f923f9f4f6e5ad0b07f0 Signed-off-by: seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1774683 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/ltc_gv11b.c')
-rw-r--r--drivers/gpu/nvgpu/gv11b/ltc_gv11b.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/ltc_gv11b.c b/drivers/gpu/nvgpu/gv11b/ltc_gv11b.c
index 3cea4cd4..a040de23 100644
--- a/drivers/gpu/nvgpu/gv11b/ltc_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/ltc_gv11b.c
@@ -70,10 +70,13 @@ void gv11b_ltc_init_fs_state(struct gk20a *g)
70 /* Disable LTC interrupts */ 70 /* Disable LTC interrupts */
71 reg = gk20a_readl(g, ltc_ltcs_ltss_intr_r()); 71 reg = gk20a_readl(g, ltc_ltcs_ltss_intr_r());
72 reg &= ~ltc_ltcs_ltss_intr_en_evicted_cb_m(); 72 reg &= ~ltc_ltcs_ltss_intr_en_evicted_cb_m();
73 reg &= ~ltc_ltcs_ltss_intr_en_illegal_compstat_m();
74 reg &= ~ltc_ltcs_ltss_intr_en_illegal_compstat_access_m(); 73 reg &= ~ltc_ltcs_ltss_intr_en_illegal_compstat_access_m();
75 nvgpu_writel_check(g, ltc_ltcs_ltss_intr_r(), reg); 74 nvgpu_writel_check(g, ltc_ltcs_ltss_intr_r(), reg);
76 75
76 if (g->ops.ltc.intr_en_illegal_compstat)
77 g->ops.ltc.intr_en_illegal_compstat(g,
78 g->ltc_intr_en_illegal_compstat);
79
77 /* Enable ECC interrupts */ 80 /* Enable ECC interrupts */
78 ltc_intr = gk20a_readl(g, ltc_ltcs_ltss_intr_r()); 81 ltc_intr = gk20a_readl(g, ltc_ltcs_ltss_intr_r());
79 ltc_intr |= ltc_ltcs_ltss_intr_en_ecc_sec_error_enabled_f() | 82 ltc_intr |= ltc_ltcs_ltss_intr_en_ecc_sec_error_enabled_f() |
@@ -82,6 +85,24 @@ void gv11b_ltc_init_fs_state(struct gk20a *g)
82 ltc_intr); 85 ltc_intr);
83} 86}
84 87
88void gv11b_ltc_intr_en_illegal_compstat(struct gk20a *g, bool enable)
89{
90 u32 val;
91
92 /* disble/enble illegal_compstat interrupt */
93 val = gk20a_readl(g, ltc_ltcs_ltss_intr_r());
94 if (enable)
95 val = set_field(val,
96 ltc_ltcs_ltss_intr_en_illegal_compstat_m(),
97 ltc_ltcs_ltss_intr_en_illegal_compstat_enabled_f());
98 else
99 val = set_field(val,
100 ltc_ltcs_ltss_intr_en_illegal_compstat_m(),
101 ltc_ltcs_ltss_intr_en_illegal_compstat_disabled_f());
102 gk20a_writel(g, ltc_ltcs_ltss_intr_r(), val);
103}
104
105
85void gv11b_ltc_isr(struct gk20a *g) 106void gv11b_ltc_isr(struct gk20a *g)
86{ 107{
87 u32 mc_intr, ltc_intr3; 108 u32 mc_intr, ltc_intr3;