From dc5f6bcee0281c5fa63c977519d732218f519ea0 Mon Sep 17 00:00:00 2001 From: Terje Bergstrom Date: Tue, 7 Nov 2017 09:19:53 -0800 Subject: gpu: nvgpu: Return GPU classes in get_litter_value Return GPU classes in HAL get_litter_value() instead of assigning them to GPU characteristics at HAL initialization time. JIRA NVGPU-259 Change-Id: Ife7a5cb38df3d33ce98a1caa43d3873fb1431234 Signed-off-by: Terje Bergstrom Reviewed-on: https://git-master.nvidia.com/r/1593683 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/linux/ce2.c | 5 +++-- drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c | 8 ++++++++ drivers/gpu/nvgpu/gk20a/gk20a.h | 6 ++++++ drivers/gpu/nvgpu/gm20b/hal_gm20b.c | 26 ++++++++++++++++++-------- drivers/gpu/nvgpu/gp106/hal_gp106.c | 26 ++++++++++++++++++-------- drivers/gpu/nvgpu/gp10b/fifo_gp10b.c | 2 +- drivers/gpu/nvgpu/gp10b/hal_gp10b.c | 27 +++++++++++++++++++-------- 7 files changed, 73 insertions(+), 27 deletions(-) (limited to 'drivers/gpu') diff --git a/drivers/gpu/nvgpu/common/linux/ce2.c b/drivers/gpu/nvgpu/common/linux/ce2.c index 5127a32b..5f89ef7b 100644 --- a/drivers/gpu/nvgpu/common/linux/ce2.c +++ b/drivers/gpu/nvgpu/common/linux/ce2.c @@ -54,10 +54,10 @@ int gk20a_ce_execute_ops(struct gk20a *g, u32 methodSize; u32 cmd_buf_read_offset; u32 fence_index; + u32 dma_copy_class; struct nvgpu_gpfifo gpfifo; struct nvgpu_fence fence = {0,0}; struct gk20a_fence *ce_cmd_buf_fence_out = NULL; - struct nvgpu_gpu_characteristics *gpu_capability = &g->gpu_characteristics; if (!ce_app->initialised ||ce_app->app_state != NVGPU_CE_ACTIVE) goto end; @@ -124,6 +124,7 @@ int gk20a_ce_execute_ops(struct gk20a *g, cmd_buf_gpu_va = (ce_ctx->cmd_buf_mem.gpu_va + (u64)(cmd_buf_read_offset *sizeof(u32))); + dma_copy_class = g->ops.get_litter_value(g, GPU_LIT_DMA_COPY_CLASS); methodSize = gk20a_ce_prepare_submit(src_buf, dst_buf, size, @@ -132,7 +133,7 @@ int gk20a_ce_execute_ops(struct gk20a *g, payload, gk20a_get_valid_launch_flags(g, launch_flags), request_operation, - gpu_capability->dma_copy_class, + dma_copy_class, gk20a_fence_in); if (methodSize) { diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c b/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c index 83282b87..0481eacf 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c @@ -209,6 +209,14 @@ gk20a_ctrl_ioctl_gpu_characteristics( pgpu->impl = g->params.gpu_impl; pgpu->rev = g->params.gpu_rev; pgpu->reg_ops_limit = NVGPU_IOCTL_DBG_REG_OPS_LIMIT; + pgpu->twod_class = g->ops.get_litter_value(g, GPU_LIT_TWOD_CLASS); + pgpu->threed_class = g->ops.get_litter_value(g, GPU_LIT_THREED_CLASS); + pgpu->compute_class = g->ops.get_litter_value(g, GPU_LIT_COMPUTE_CLASS); + pgpu->gpfifo_class = g->ops.get_litter_value(g, GPU_LIT_GPFIFO_CLASS); + pgpu->inline_to_memory_class = + g->ops.get_litter_value(g, GPU_LIT_I2M_CLASS); + pgpu->dma_copy_class = + g->ops.get_litter_value(g, GPU_LIT_DMA_COPY_CLASS); pgpu->vbios_version = g->bios.vbios_version; pgpu->vbios_oem_version = g->bios.vbios_oem_version; diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 92b83978..ff83fd18 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -133,6 +133,12 @@ enum gk20a_cbc_op { #define GPU_LIT_SMPC_PRI_SHARED_BASE 28 #define GPU_LIT_SMPC_PRI_UNIQUE_BASE 29 #define GPU_LIT_SMPC_PRI_STRIDE 30 +#define GPU_LIT_TWOD_CLASS 31 +#define GPU_LIT_THREED_CLASS 32 +#define GPU_LIT_COMPUTE_CLASS 33 +#define GPU_LIT_GPFIFO_CLASS 34 +#define GPU_LIT_I2M_CLASS 35 +#define GPU_LIT_DMA_COPY_CLASS 36 #define nvgpu_get_litter_value(g, v) (g)->ops.get_litter_value((g), v) diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c index 4e214cc4..20ab808a 100644 --- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c @@ -153,6 +153,24 @@ int gm20b_get_litter_value(struct gk20a *g, int value) case GPU_LIT_FBPA_SHARED_BASE: ret = 0; break; + case GPU_LIT_TWOD_CLASS: + ret = FERMI_TWOD_A; + break; + case GPU_LIT_THREED_CLASS: + ret = MAXWELL_B; + break; + case GPU_LIT_COMPUTE_CLASS: + ret = MAXWELL_COMPUTE_B; + break; + case GPU_LIT_GPFIFO_CLASS: + ret = MAXWELL_CHANNEL_GPFIFO_A; + break; + case GPU_LIT_I2M_CLASS: + ret = KEPLER_INLINE_TO_MEMORY_B; + break; + case GPU_LIT_DMA_COPY_CLASS: + ret = MAXWELL_DMA_COPY_A; + break; default: nvgpu_err(g, "Missing definition %d", value); BUG(); @@ -572,7 +590,6 @@ static const struct gpu_ops gm20b_ops = { int gm20b_init_hal(struct gk20a *g) { struct gpu_ops *gops = &g->ops; - struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics; u32 val; gops->ltc = gm20b_ops.ltc; @@ -691,12 +708,5 @@ int gm20b_init_hal(struct gk20a *g) g->name = "gm20b"; - c->twod_class = FERMI_TWOD_A; - c->threed_class = MAXWELL_B; - c->compute_class = MAXWELL_COMPUTE_B; - c->gpfifo_class = MAXWELL_CHANNEL_GPFIFO_A; - c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_B; - c->dma_copy_class = MAXWELL_DMA_COPY_A; - return 0; } diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c index 5771e6e4..931780d5 100644 --- a/drivers/gpu/nvgpu/gp106/hal_gp106.c +++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c @@ -179,6 +179,24 @@ static int gp106_get_litter_value(struct gk20a *g, int value) case GPU_LIT_FBPA_STRIDE: ret = proj_fbpa_stride_v(); break; + case GPU_LIT_TWOD_CLASS: + ret = FERMI_TWOD_A; + break; + case GPU_LIT_THREED_CLASS: + ret = PASCAL_B; + break; + case GPU_LIT_COMPUTE_CLASS: + ret = PASCAL_COMPUTE_B; + break; + case GPU_LIT_GPFIFO_CLASS: + ret = PASCAL_CHANNEL_GPFIFO_A; + break; + case GPU_LIT_I2M_CLASS: + ret = KEPLER_INLINE_TO_MEMORY_B; + break; + case GPU_LIT_DMA_COPY_CLASS: + ret = PASCAL_DMA_COPY_A; + break; default: BUG(); break; @@ -694,7 +712,6 @@ static const struct gpu_ops gp106_ops = { int gp106_init_hal(struct gk20a *g) { struct gpu_ops *gops = &g->ops; - struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics; gk20a_dbg_fn(""); @@ -757,13 +774,6 @@ int gp106_init_hal(struct gk20a *g) g->name = "gp10x"; - c->twod_class = FERMI_TWOD_A; - c->threed_class = PASCAL_B; - c->compute_class = PASCAL_COMPUTE_B; - c->gpfifo_class = PASCAL_CHANNEL_GPFIFO_A; - c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_B; - c->dma_copy_class = PASCAL_DMA_COPY_A; - gk20a_dbg_fn("done"); return 0; diff --git a/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c b/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c index 0a127ad7..accbe0a6 100644 --- a/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/fifo_gp10b.c @@ -158,7 +158,7 @@ int channel_gp10b_setup_ramfc(struct channel_gk20a *c, u32 gp10b_fifo_get_pbdma_signature(struct gk20a *g) { - return g->gpu_characteristics.gpfifo_class + return g->ops.get_litter_value(g, GPU_LIT_GPFIFO_CLASS) | pbdma_signature_sw_zero_f(); } diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c index 757eae04..7ed91e02 100644 --- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c @@ -162,6 +162,25 @@ int gp10b_get_litter_value(struct gk20a *g, int value) case GPU_LIT_FBPA_SHARED_BASE: ret = 0; break; + case GPU_LIT_TWOD_CLASS: + ret = FERMI_TWOD_A; + break; + case GPU_LIT_THREED_CLASS: + ret = PASCAL_A; + break; + case GPU_LIT_COMPUTE_CLASS: + ret = PASCAL_COMPUTE_A; + break; + case GPU_LIT_GPFIFO_CLASS: + ret = PASCAL_CHANNEL_GPFIFO_A; + break; + case GPU_LIT_I2M_CLASS: + ret = KEPLER_INLINE_TO_MEMORY_B; + break; + case GPU_LIT_DMA_COPY_CLASS: + ret = PASCAL_DMA_COPY_A; + break; + default: nvgpu_err(g, "Missing definition %d", value); BUG(); @@ -608,7 +627,6 @@ static const struct gpu_ops gp10b_ops = { int gp10b_init_hal(struct gk20a *g) { struct gpu_ops *gops = &g->ops; - struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics; u32 val; gops->ltc = gp10b_ops.ltc; @@ -730,12 +748,5 @@ int gp10b_init_hal(struct gk20a *g) g->name = "gp10b"; - c->twod_class = FERMI_TWOD_A; - c->threed_class = PASCAL_A; - c->compute_class = PASCAL_COMPUTE_A; - c->gpfifo_class = PASCAL_CHANNEL_GPFIFO_A; - c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_B; - c->dma_copy_class = PASCAL_DMA_COPY_A; - return 0; } -- cgit v1.2.2