From a100422df5a7ab799d979a383d9bfb963d82e45a Mon Sep 17 00:00:00 2001 From: Deepak Nibade Date: Fri, 7 Apr 2017 12:13:11 +0530 Subject: gpu: nvgpu: re-add API to disable all engine activity Patch e1e059454a00ea28c5c9ab992eaf7f7c6780c3b8 removed the API gk20a_fifo_disable_all_engine_activity() which disables activity on all engines Re-add it since it is now needed in the shutdown path to ensure engines are idle Bug 200281010 Change-Id: Idf5860f7f5009f3fb875ce94b7d66007c866ac49 Signed-off-by: Deepak Nibade Reviewed-on: http://git-master/r/1457755 Reviewed-by: svccoveritychecker GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index 48253e59..c7db67fe 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -2808,6 +2808,41 @@ clean_up: return err; } +int gk20a_fifo_disable_all_engine_activity(struct gk20a *g, + bool wait_for_idle) +{ + unsigned int i; + int err = 0, ret = 0; + u32 active_engine_id; + + for (i = 0; i < g->fifo.num_engines; i++) { + active_engine_id = g->fifo.active_engines_list[i]; + err = gk20a_fifo_disable_engine_activity(g, + &g->fifo.engine_info[active_engine_id], + wait_for_idle); + if (err) { + nvgpu_err(g, "failed to disable engine %d activity\n", + active_engine_id); + ret = err; + break; + } + } + + if (err) { + while (i-- != 0) { + active_engine_id = g->fifo.active_engines_list[i]; + err = gk20a_fifo_enable_engine_activity(g, + &g->fifo.engine_info[active_engine_id]); + if (err) + nvgpu_err(g, + "failed to re-enable engine %d activity\n", + active_engine_id); + } + } + + return ret; +} + static void gk20a_fifo_runlist_reset_engines(struct gk20a *g, u32 runlist_id) { struct fifo_gk20a *f = &g->fifo; -- cgit v1.2.2