summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorAparna Das <aparnad@nvidia.com>2018-02-14 21:35:12 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2018-03-06 17:52:03 -0500
commitd6c6c6c483478654b34685b9e13ed160bad49a1c (patch)
tree5e71982da3dd03c3d9bb2158432c1d2dc6072b9e /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parent395c5538136049dcbc52ab218c3b5f764e7d0199 (diff)
gpu: nvgpu: add hal op for gr set error notifier
The vserver variant for gr set error notifier needs different functionality to send interrupt to VM. Add HAL operation to allow overriding vserver usecase. Jira VQRM-2982 Change-Id: Ia445a27112bb6c5587dbb81100a9dafe5875b338 Signed-off-by: Aparna Das <aparnad@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1657830 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 6abc7d41..b37ae8cd 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -5113,7 +5113,7 @@ int gk20a_gr_reset(struct gk20a *g)
5113 return err; 5113 return err;
5114} 5114}
5115 5115
5116static void gk20a_gr_set_error_notifier(struct gk20a *g, 5116void gk20a_gr_set_error_notifier(struct gk20a *g,
5117 struct gr_gk20a_isr_data *isr_data, u32 error_notifier) 5117 struct gr_gk20a_isr_data *isr_data, u32 error_notifier)
5118{ 5118{
5119 struct fifo_gk20a *f = &g->fifo; 5119 struct fifo_gk20a *f = &g->fifo;
@@ -5146,7 +5146,7 @@ static int gk20a_gr_handle_semaphore_timeout_pending(struct gk20a *g,
5146 struct gr_gk20a_isr_data *isr_data) 5146 struct gr_gk20a_isr_data *isr_data)
5147{ 5147{
5148 gk20a_dbg_fn(""); 5148 gk20a_dbg_fn("");
5149 gk20a_gr_set_error_notifier(g, isr_data, 5149 g->ops.gr.set_error_notifier(g, isr_data,
5150 NVGPU_ERR_NOTIFIER_GR_SEMAPHORE_TIMEOUT); 5150 NVGPU_ERR_NOTIFIER_GR_SEMAPHORE_TIMEOUT);
5151 nvgpu_err(g, 5151 nvgpu_err(g,
5152 "gr semaphore timeout"); 5152 "gr semaphore timeout");
@@ -5157,7 +5157,7 @@ static int gk20a_gr_intr_illegal_notify_pending(struct gk20a *g,
5157 struct gr_gk20a_isr_data *isr_data) 5157 struct gr_gk20a_isr_data *isr_data)
5158{ 5158{
5159 gk20a_dbg_fn(""); 5159 gk20a_dbg_fn("");
5160 gk20a_gr_set_error_notifier(g, isr_data, 5160 g->ops.gr.set_error_notifier(g, isr_data,
5161 NVGPU_ERR_NOTIFIER_GR_ILLEGAL_NOTIFY); 5161 NVGPU_ERR_NOTIFIER_GR_ILLEGAL_NOTIFY);
5162 /* This is an unrecoverable error, reset is needed */ 5162 /* This is an unrecoverable error, reset is needed */
5163 nvgpu_err(g, 5163 nvgpu_err(g,
@@ -5172,7 +5172,7 @@ static int gk20a_gr_handle_illegal_method(struct gk20a *g,
5172 isr_data->class_num, isr_data->offset, 5172 isr_data->class_num, isr_data->offset,
5173 isr_data->data_lo); 5173 isr_data->data_lo);
5174 if (ret) { 5174 if (ret) {
5175 gk20a_gr_set_error_notifier(g, isr_data, 5175 g->ops.gr.set_error_notifier(g, isr_data,
5176 NVGPU_ERR_NOTIFIER_GR_ILLEGAL_NOTIFY); 5176 NVGPU_ERR_NOTIFIER_GR_ILLEGAL_NOTIFY);
5177 nvgpu_err(g, "invalid method class 0x%08x" 5177 nvgpu_err(g, "invalid method class 0x%08x"
5178 ", offset 0x%08x address 0x%08x", 5178 ", offset 0x%08x address 0x%08x",
@@ -5185,7 +5185,7 @@ static int gk20a_gr_handle_illegal_class(struct gk20a *g,
5185 struct gr_gk20a_isr_data *isr_data) 5185 struct gr_gk20a_isr_data *isr_data)
5186{ 5186{
5187 gk20a_dbg_fn(""); 5187 gk20a_dbg_fn("");
5188 gk20a_gr_set_error_notifier(g, isr_data, 5188 g->ops.gr.set_error_notifier(g, isr_data,
5189 NVGPU_ERR_NOTIFIER_GR_ERROR_SW_NOTIFY); 5189 NVGPU_ERR_NOTIFIER_GR_ERROR_SW_NOTIFY);
5190 nvgpu_err(g, 5190 nvgpu_err(g,
5191 "invalid class 0x%08x, offset 0x%08x", 5191 "invalid class 0x%08x, offset 0x%08x",
@@ -5203,7 +5203,7 @@ int gk20a_gr_handle_fecs_error(struct gk20a *g, struct channel_gk20a *ch,
5203 return 0; 5203 return 0;
5204 5204
5205 if (gr_fecs_intr & gr_fecs_host_int_status_umimp_firmware_method_f(1)) { 5205 if (gr_fecs_intr & gr_fecs_host_int_status_umimp_firmware_method_f(1)) {
5206 gk20a_gr_set_error_notifier(g, isr_data, 5206 g->ops.gr.set_error_notifier(g, isr_data,
5207 NVGPU_ERR_NOTIFIER_FECS_ERR_UNIMP_FIRMWARE_METHOD); 5207 NVGPU_ERR_NOTIFIER_FECS_ERR_UNIMP_FIRMWARE_METHOD);
5208 nvgpu_err(g, 5208 nvgpu_err(g,
5209 "firmware method error 0x%08x for offset 0x%04x", 5209 "firmware method error 0x%08x for offset 0x%04x",
@@ -5229,7 +5229,7 @@ static int gk20a_gr_handle_class_error(struct gk20a *g,
5229 5229
5230 gr_class_error = 5230 gr_class_error =
5231 gr_class_error_code_v(gk20a_readl(g, gr_class_error_r())); 5231 gr_class_error_code_v(gk20a_readl(g, gr_class_error_r()));
5232 gk20a_gr_set_error_notifier(g, isr_data, 5232 g->ops.gr.set_error_notifier(g, isr_data,
5233 NVGPU_ERR_NOTIFIER_GR_ERROR_SW_NOTIFY); 5233 NVGPU_ERR_NOTIFIER_GR_ERROR_SW_NOTIFY);
5234 nvgpu_err(g, "class error 0x%08x, offset 0x%08x," 5234 nvgpu_err(g, "class error 0x%08x, offset 0x%08x,"
5235 "sub channel 0x%08x mme generated %d," 5235 "sub channel 0x%08x mme generated %d,"
@@ -5258,7 +5258,7 @@ static int gk20a_gr_handle_firmware_method(struct gk20a *g,
5258{ 5258{
5259 gk20a_dbg_fn(""); 5259 gk20a_dbg_fn("");
5260 5260
5261 gk20a_gr_set_error_notifier(g, isr_data, 5261 g->ops.gr.set_error_notifier(g, isr_data,
5262 NVGPU_ERR_NOTIFIER_GR_ERROR_SW_NOTIFY); 5262 NVGPU_ERR_NOTIFIER_GR_ERROR_SW_NOTIFY);
5263 nvgpu_err(g, 5263 nvgpu_err(g,
5264 "firmware method 0x%08x, offset 0x%08x for channel %u", 5264 "firmware method 0x%08x, offset 0x%08x for channel %u",
@@ -6064,7 +6064,7 @@ int gk20a_gr_isr(struct gk20a *g)
6064 6064
6065 if (need_reset) { 6065 if (need_reset) {
6066 nvgpu_err(g, "set gr exception notifier"); 6066 nvgpu_err(g, "set gr exception notifier");
6067 gk20a_gr_set_error_notifier(g, &isr_data, 6067 g->ops.gr.set_error_notifier(g, &isr_data,
6068 NVGPU_ERR_NOTIFIER_GR_EXCEPTION); 6068 NVGPU_ERR_NOTIFIER_GR_EXCEPTION);
6069 } 6069 }
6070 } 6070 }