From 0a3e5941ffed3239661ea48381ebece2c7a707f2 Mon Sep 17 00:00:00 2001 From: Seema Khowala Date: Wed, 22 Feb 2017 12:29:57 -0800 Subject: gpu: nvgpu: add pbdma and eng bitmask for runlists -Init pbdma and engine bit mask per runlist. -Organize debug info to print supported pbdma instances for particular runlist. JIRA GV11B-3 Change-Id: Ie34dd98ccbe2c779ca1c795855c2a7df4abd2715 Signed-off-by: seshendra Gadagottu Signed-off-by: Seema Khowala Reviewed-on: http://git-master/r/1309706 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/fifo_gk20a.c | 39 ++++++++++++++++++++++++++++++------ drivers/gpu/nvgpu/gk20a/fifo_gk20a.h | 3 +++ 2 files changed, 36 insertions(+), 6 deletions(-) (limited to 'drivers') diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c index c245f4a2..0d3a75fc 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.c @@ -326,6 +326,7 @@ int gk20a_fifo_init_engine_info(struct fifo_gk20a *f) u32 pri_base = 0; u32 fault_id = 0; u32 gr_runlist_id = ~0; + bool found_pbdma_for_runlist = false; gk20a_dbg_fn(""); @@ -352,14 +353,20 @@ int gk20a_fifo_init_engine_info(struct fifo_gk20a *f) runlist_bit = BIT(runlist_id); - for (pbdma_id = 0; pbdma_id < f->num_pbdma; pbdma_id++) { - gk20a_dbg_info("gr info: pbdma_map[%d]=%d", - pbdma_id, f->pbdma_map[pbdma_id]); - if (f->pbdma_map[pbdma_id] & runlist_bit) - break; + found_pbdma_for_runlist = false; + for (pbdma_id = 0; pbdma_id < f->num_pbdma; + pbdma_id++) { + if (f->pbdma_map[pbdma_id] & + runlist_bit) { + gk20a_dbg_info( + "gr info: pbdma_map[%d]=%d", + pbdma_id, + f->pbdma_map[pbdma_id]); + found_pbdma_for_runlist = true; + } } - if (pbdma_id == f->num_pbdma) { + if (!found_pbdma_for_runlist) { gk20a_err(d, "busted pbdma map"); return -EINVAL; } @@ -611,6 +618,8 @@ static int init_runlist(struct gk20a *g, struct fifo_gk20a *f) unsigned int runlist_id; u32 i; size_t runlist_size; + u32 active_engine_id, pbdma_id, engine_id; + struct fifo_engine_info_gk20a *engine_info; gk20a_dbg_fn(""); @@ -655,8 +664,26 @@ static int init_runlist(struct gk20a *g, struct fifo_gk20a *f) /* None of buffers is pinned if this value doesn't change. Otherwise, one of them (cur_buffer) must have been pinned. */ runlist->cur_buffer = MAX_RUNLIST_BUFFERS; + + for (pbdma_id = 0; pbdma_id < f->num_pbdma; pbdma_id++) { + if (f->pbdma_map[pbdma_id] & BIT(runlist_id)) + runlist->pbdma_bitmask |= BIT(pbdma_id); + } + gk20a_dbg_info("runlist %d : pbdma bitmask %x", + runlist_id, runlist->pbdma_bitmask); + + for (engine_id = 0; engine_id < f->num_engines; ++engine_id) { + active_engine_id = f->active_engines_list[engine_id]; + engine_info = &f->engine_info[active_engine_id]; + + if (engine_info && engine_info->runlist_id == runlist_id) + runlist->eng_bitmask |= BIT(engine_id); + } + gk20a_dbg_info("runlist %d : eng bitmask %x", + runlist_id, runlist->eng_bitmask); } + gk20a_dbg_fn("done"); return 0; diff --git a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h index 1a248dba..350bfa88 100644 --- a/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/fifo_gk20a.h @@ -39,6 +39,9 @@ struct fifo_runlist_info_gk20a { struct mem_desc mem[MAX_RUNLIST_BUFFERS]; u32 cur_buffer; u32 total_entries; + u32 pbdma_bitmask; /* pbdmas supported for this runlist*/ + u32 eng_bitmask; /* engines using this runlist */ + u32 reset_eng_bitmask; /* engines to be reset during recovery */ bool stopped; bool support_tsg; struct nvgpu_mutex mutex; /* protect channel preempt and runlist update */ -- cgit v1.2.2