summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c42
1 files changed, 37 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 50ca0601..867b7abd 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -4771,15 +4771,47 @@ static void gk20a_gr_set_alpha_circular_buffer_size(struct gk20a *g, u32 data)
4771 } 4771 }
4772} 4772}
4773 4773
4774void gk20a_gr_reset(struct gk20a *g) 4774int gk20a_gr_reset(struct gk20a *g)
4775{ 4775{
4776 int err; 4776 int err;
4777 u32 size;
4778
4777 err = gk20a_init_gr_prepare(g); 4779 err = gk20a_init_gr_prepare(g);
4778 BUG_ON(err); 4780 if (err)
4781 return err;
4782
4779 err = gk20a_init_gr_reset_enable_hw(g); 4783 err = gk20a_init_gr_reset_enable_hw(g);
4780 BUG_ON(err); 4784 if (err)
4785 return err;
4786
4781 err = gk20a_init_gr_setup_hw(g); 4787 err = gk20a_init_gr_setup_hw(g);
4782 BUG_ON(err); 4788 if (err)
4789 return err;
4790
4791 size = 0;
4792 err = gr_gk20a_fecs_get_reglist_img_size(g, &size);
4793 if (err) {
4794 gk20a_err(dev_from_gk20a(g),
4795 "fail to query fecs pg buffer size");
4796 return err;
4797 }
4798
4799 err = gr_gk20a_fecs_set_reglist_bind_inst(g,
4800 g->mm.pmu.inst_block.cpu_pa);
4801 if (err) {
4802 gk20a_err(dev_from_gk20a(g),
4803 "fail to bind pmu inst to gr");
4804 return err;
4805 }
4806
4807 err = gr_gk20a_fecs_set_reglist_virtual_addr(g, g->pmu.pg_buf.pmu_va);
4808 if (err) {
4809 gk20a_err(dev_from_gk20a(g),
4810 "fail to set pg buffer pmu va");
4811 return err;
4812 }
4813
4814 return 0;
4783} 4815}
4784 4816
4785static int gr_gk20a_handle_sw_method(struct gk20a *g, u32 addr, 4817static int gr_gk20a_handle_sw_method(struct gk20a *g, u32 addr,
@@ -5511,7 +5543,7 @@ int gr_gk20a_fecs_set_reglist_bind_inst(struct gk20a *g, phys_addr_t addr)
5511 .mailbox.fail = 0}); 5543 .mailbox.fail = 0});
5512} 5544}
5513 5545
5514int gr_gk20a_fecs_set_reglist_virual_addr(struct gk20a *g, u64 pmu_va) 5546int gr_gk20a_fecs_set_reglist_virtual_addr(struct gk20a *g, u64 pmu_va)
5515{ 5547{
5516 return gr_gk20a_submit_fecs_method_op(g, 5548 return gr_gk20a_submit_fecs_method_op(g,
5517 (struct fecs_method_op_gk20a) { 5549 (struct fecs_method_op_gk20a) {