From 9b5427da37161c350d28a821652f2bb84bca360f Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Thu, 31 Mar 2016 13:33:02 -0700 Subject: gpu: nvgpu: Support GPUs with no physical mode Support GPUs which cannot choose between SMMU and physical addressing. Change-Id: If3256fa1bc795a84d039ad3aa63ebdccf5cc0afb Signed-off-by: Terje Bergstrom Reviewed-on: http://git-master/r/1120469 GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman --- drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c') diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 61211239..e8d82e0e 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -333,33 +333,32 @@ static int channel_gk20a_setup_userd(struct channel_gk20a *c) return 0; } -static void channel_gk20a_bind(struct channel_gk20a *ch_gk20a) +static void channel_gk20a_bind(struct channel_gk20a *c) { - struct gk20a *g = ch_gk20a->g; + struct gk20a *g = c->g; struct fifo_gk20a *f = &g->fifo; struct fifo_engine_info_gk20a *engine_info = f->engine_info + ENGINE_GR_GK20A; - - u32 inst_ptr = gk20a_mem_phys(&ch_gk20a->inst_block) + u32 inst_ptr = gk20a_mm_inst_block_addr(g, &c->inst_block) >> ram_in_base_shift_v(); gk20a_dbg_info("bind channel %d inst ptr 0x%08x", - ch_gk20a->hw_chid, inst_ptr); + c->hw_chid, inst_ptr); - ch_gk20a->bound = true; + c->bound = true; - gk20a_writel(g, ccsr_channel_r(ch_gk20a->hw_chid), - (gk20a_readl(g, ccsr_channel_r(ch_gk20a->hw_chid)) & + gk20a_writel(g, ccsr_channel_r(c->hw_chid), + (gk20a_readl(g, ccsr_channel_r(c->hw_chid)) & ~ccsr_channel_runlist_f(~0)) | ccsr_channel_runlist_f(engine_info->runlist_id)); - gk20a_writel(g, ccsr_channel_inst_r(ch_gk20a->hw_chid), + gk20a_writel(g, ccsr_channel_inst_r(c->hw_chid), ccsr_channel_inst_ptr_f(inst_ptr) | ccsr_channel_inst_target_vid_mem_f() | ccsr_channel_inst_bind_true_f()); - gk20a_writel(g, ccsr_channel_r(ch_gk20a->hw_chid), - (gk20a_readl(g, ccsr_channel_r(ch_gk20a->hw_chid)) & + gk20a_writel(g, ccsr_channel_r(c->hw_chid), + (gk20a_readl(g, ccsr_channel_r(c->hw_chid)) & ~ccsr_channel_enable_set_f(~0)) | ccsr_channel_enable_set_true_f()); } @@ -402,7 +401,7 @@ int channel_gk20a_alloc_inst(struct gk20a *g, struct channel_gk20a *ch) return err; gk20a_dbg_info("channel %d inst block physical addr: 0x%16llx", - ch->hw_chid, (u64)gk20a_mem_phys(&ch->inst_block)); + ch->hw_chid, gk20a_mm_inst_block_addr(g, &ch->inst_block)); gk20a_dbg_fn("done"); return 0; -- cgit v1.2.2