diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ce2.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c | 8 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 6 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hal_gm20b.c | 26 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/hal_gp106.c | 26 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/fifo_gp10b.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/hal_gp10b.c | 27 |
7 files changed, 73 insertions, 27 deletions
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, | |||
54 | u32 methodSize; | 54 | u32 methodSize; |
55 | u32 cmd_buf_read_offset; | 55 | u32 cmd_buf_read_offset; |
56 | u32 fence_index; | 56 | u32 fence_index; |
57 | u32 dma_copy_class; | ||
57 | struct nvgpu_gpfifo gpfifo; | 58 | struct nvgpu_gpfifo gpfifo; |
58 | struct nvgpu_fence fence = {0,0}; | 59 | struct nvgpu_fence fence = {0,0}; |
59 | struct gk20a_fence *ce_cmd_buf_fence_out = NULL; | 60 | struct gk20a_fence *ce_cmd_buf_fence_out = NULL; |
60 | struct nvgpu_gpu_characteristics *gpu_capability = &g->gpu_characteristics; | ||
61 | 61 | ||
62 | if (!ce_app->initialised ||ce_app->app_state != NVGPU_CE_ACTIVE) | 62 | if (!ce_app->initialised ||ce_app->app_state != NVGPU_CE_ACTIVE) |
63 | goto end; | 63 | goto end; |
@@ -124,6 +124,7 @@ int gk20a_ce_execute_ops(struct gk20a *g, | |||
124 | 124 | ||
125 | cmd_buf_gpu_va = (ce_ctx->cmd_buf_mem.gpu_va + (u64)(cmd_buf_read_offset *sizeof(u32))); | 125 | cmd_buf_gpu_va = (ce_ctx->cmd_buf_mem.gpu_va + (u64)(cmd_buf_read_offset *sizeof(u32))); |
126 | 126 | ||
127 | dma_copy_class = g->ops.get_litter_value(g, GPU_LIT_DMA_COPY_CLASS); | ||
127 | methodSize = gk20a_ce_prepare_submit(src_buf, | 128 | methodSize = gk20a_ce_prepare_submit(src_buf, |
128 | dst_buf, | 129 | dst_buf, |
129 | size, | 130 | size, |
@@ -132,7 +133,7 @@ int gk20a_ce_execute_ops(struct gk20a *g, | |||
132 | payload, | 133 | payload, |
133 | gk20a_get_valid_launch_flags(g, launch_flags), | 134 | gk20a_get_valid_launch_flags(g, launch_flags), |
134 | request_operation, | 135 | request_operation, |
135 | gpu_capability->dma_copy_class, | 136 | dma_copy_class, |
136 | gk20a_fence_in); | 137 | gk20a_fence_in); |
137 | 138 | ||
138 | if (methodSize) { | 139 | 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( | |||
209 | pgpu->impl = g->params.gpu_impl; | 209 | pgpu->impl = g->params.gpu_impl; |
210 | pgpu->rev = g->params.gpu_rev; | 210 | pgpu->rev = g->params.gpu_rev; |
211 | pgpu->reg_ops_limit = NVGPU_IOCTL_DBG_REG_OPS_LIMIT; | 211 | pgpu->reg_ops_limit = NVGPU_IOCTL_DBG_REG_OPS_LIMIT; |
212 | pgpu->twod_class = g->ops.get_litter_value(g, GPU_LIT_TWOD_CLASS); | ||
213 | pgpu->threed_class = g->ops.get_litter_value(g, GPU_LIT_THREED_CLASS); | ||
214 | pgpu->compute_class = g->ops.get_litter_value(g, GPU_LIT_COMPUTE_CLASS); | ||
215 | pgpu->gpfifo_class = g->ops.get_litter_value(g, GPU_LIT_GPFIFO_CLASS); | ||
216 | pgpu->inline_to_memory_class = | ||
217 | g->ops.get_litter_value(g, GPU_LIT_I2M_CLASS); | ||
218 | pgpu->dma_copy_class = | ||
219 | g->ops.get_litter_value(g, GPU_LIT_DMA_COPY_CLASS); | ||
212 | 220 | ||
213 | pgpu->vbios_version = g->bios.vbios_version; | 221 | pgpu->vbios_version = g->bios.vbios_version; |
214 | pgpu->vbios_oem_version = g->bios.vbios_oem_version; | 222 | 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 { | |||
133 | #define GPU_LIT_SMPC_PRI_SHARED_BASE 28 | 133 | #define GPU_LIT_SMPC_PRI_SHARED_BASE 28 |
134 | #define GPU_LIT_SMPC_PRI_UNIQUE_BASE 29 | 134 | #define GPU_LIT_SMPC_PRI_UNIQUE_BASE 29 |
135 | #define GPU_LIT_SMPC_PRI_STRIDE 30 | 135 | #define GPU_LIT_SMPC_PRI_STRIDE 30 |
136 | #define GPU_LIT_TWOD_CLASS 31 | ||
137 | #define GPU_LIT_THREED_CLASS 32 | ||
138 | #define GPU_LIT_COMPUTE_CLASS 33 | ||
139 | #define GPU_LIT_GPFIFO_CLASS 34 | ||
140 | #define GPU_LIT_I2M_CLASS 35 | ||
141 | #define GPU_LIT_DMA_COPY_CLASS 36 | ||
136 | 142 | ||
137 | #define nvgpu_get_litter_value(g, v) (g)->ops.get_litter_value((g), v) | 143 | #define nvgpu_get_litter_value(g, v) (g)->ops.get_litter_value((g), v) |
138 | 144 | ||
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) | |||
153 | case GPU_LIT_FBPA_SHARED_BASE: | 153 | case GPU_LIT_FBPA_SHARED_BASE: |
154 | ret = 0; | 154 | ret = 0; |
155 | break; | 155 | break; |
156 | case GPU_LIT_TWOD_CLASS: | ||
157 | ret = FERMI_TWOD_A; | ||
158 | break; | ||
159 | case GPU_LIT_THREED_CLASS: | ||
160 | ret = MAXWELL_B; | ||
161 | break; | ||
162 | case GPU_LIT_COMPUTE_CLASS: | ||
163 | ret = MAXWELL_COMPUTE_B; | ||
164 | break; | ||
165 | case GPU_LIT_GPFIFO_CLASS: | ||
166 | ret = MAXWELL_CHANNEL_GPFIFO_A; | ||
167 | break; | ||
168 | case GPU_LIT_I2M_CLASS: | ||
169 | ret = KEPLER_INLINE_TO_MEMORY_B; | ||
170 | break; | ||
171 | case GPU_LIT_DMA_COPY_CLASS: | ||
172 | ret = MAXWELL_DMA_COPY_A; | ||
173 | break; | ||
156 | default: | 174 | default: |
157 | nvgpu_err(g, "Missing definition %d", value); | 175 | nvgpu_err(g, "Missing definition %d", value); |
158 | BUG(); | 176 | BUG(); |
@@ -572,7 +590,6 @@ static const struct gpu_ops gm20b_ops = { | |||
572 | int gm20b_init_hal(struct gk20a *g) | 590 | int gm20b_init_hal(struct gk20a *g) |
573 | { | 591 | { |
574 | struct gpu_ops *gops = &g->ops; | 592 | struct gpu_ops *gops = &g->ops; |
575 | struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics; | ||
576 | u32 val; | 593 | u32 val; |
577 | 594 | ||
578 | gops->ltc = gm20b_ops.ltc; | 595 | gops->ltc = gm20b_ops.ltc; |
@@ -691,12 +708,5 @@ int gm20b_init_hal(struct gk20a *g) | |||
691 | 708 | ||
692 | g->name = "gm20b"; | 709 | g->name = "gm20b"; |
693 | 710 | ||
694 | c->twod_class = FERMI_TWOD_A; | ||
695 | c->threed_class = MAXWELL_B; | ||
696 | c->compute_class = MAXWELL_COMPUTE_B; | ||
697 | c->gpfifo_class = MAXWELL_CHANNEL_GPFIFO_A; | ||
698 | c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_B; | ||
699 | c->dma_copy_class = MAXWELL_DMA_COPY_A; | ||
700 | |||
701 | return 0; | 711 | return 0; |
702 | } | 712 | } |
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) | |||
179 | case GPU_LIT_FBPA_STRIDE: | 179 | case GPU_LIT_FBPA_STRIDE: |
180 | ret = proj_fbpa_stride_v(); | 180 | ret = proj_fbpa_stride_v(); |
181 | break; | 181 | break; |
182 | case GPU_LIT_TWOD_CLASS: | ||
183 | ret = FERMI_TWOD_A; | ||
184 | break; | ||
185 | case GPU_LIT_THREED_CLASS: | ||
186 | ret = PASCAL_B; | ||
187 | break; | ||
188 | case GPU_LIT_COMPUTE_CLASS: | ||
189 | ret = PASCAL_COMPUTE_B; | ||
190 | break; | ||
191 | case GPU_LIT_GPFIFO_CLASS: | ||
192 | ret = PASCAL_CHANNEL_GPFIFO_A; | ||
193 | break; | ||
194 | case GPU_LIT_I2M_CLASS: | ||
195 | ret = KEPLER_INLINE_TO_MEMORY_B; | ||
196 | break; | ||
197 | case GPU_LIT_DMA_COPY_CLASS: | ||
198 | ret = PASCAL_DMA_COPY_A; | ||
199 | break; | ||
182 | default: | 200 | default: |
183 | BUG(); | 201 | BUG(); |
184 | break; | 202 | break; |
@@ -694,7 +712,6 @@ static const struct gpu_ops gp106_ops = { | |||
694 | int gp106_init_hal(struct gk20a *g) | 712 | int gp106_init_hal(struct gk20a *g) |
695 | { | 713 | { |
696 | struct gpu_ops *gops = &g->ops; | 714 | struct gpu_ops *gops = &g->ops; |
697 | struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics; | ||
698 | 715 | ||
699 | gk20a_dbg_fn(""); | 716 | gk20a_dbg_fn(""); |
700 | 717 | ||
@@ -757,13 +774,6 @@ int gp106_init_hal(struct gk20a *g) | |||
757 | 774 | ||
758 | g->name = "gp10x"; | 775 | g->name = "gp10x"; |
759 | 776 | ||
760 | c->twod_class = FERMI_TWOD_A; | ||
761 | c->threed_class = PASCAL_B; | ||
762 | c->compute_class = PASCAL_COMPUTE_B; | ||
763 | c->gpfifo_class = PASCAL_CHANNEL_GPFIFO_A; | ||
764 | c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_B; | ||
765 | c->dma_copy_class = PASCAL_DMA_COPY_A; | ||
766 | |||
767 | gk20a_dbg_fn("done"); | 777 | gk20a_dbg_fn("done"); |
768 | 778 | ||
769 | return 0; | 779 | 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, | |||
158 | 158 | ||
159 | u32 gp10b_fifo_get_pbdma_signature(struct gk20a *g) | 159 | u32 gp10b_fifo_get_pbdma_signature(struct gk20a *g) |
160 | { | 160 | { |
161 | return g->gpu_characteristics.gpfifo_class | 161 | return g->ops.get_litter_value(g, GPU_LIT_GPFIFO_CLASS) |
162 | | pbdma_signature_sw_zero_f(); | 162 | | pbdma_signature_sw_zero_f(); |
163 | } | 163 | } |
164 | 164 | ||
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) | |||
162 | case GPU_LIT_FBPA_SHARED_BASE: | 162 | case GPU_LIT_FBPA_SHARED_BASE: |
163 | ret = 0; | 163 | ret = 0; |
164 | break; | 164 | break; |
165 | case GPU_LIT_TWOD_CLASS: | ||
166 | ret = FERMI_TWOD_A; | ||
167 | break; | ||
168 | case GPU_LIT_THREED_CLASS: | ||
169 | ret = PASCAL_A; | ||
170 | break; | ||
171 | case GPU_LIT_COMPUTE_CLASS: | ||
172 | ret = PASCAL_COMPUTE_A; | ||
173 | break; | ||
174 | case GPU_LIT_GPFIFO_CLASS: | ||
175 | ret = PASCAL_CHANNEL_GPFIFO_A; | ||
176 | break; | ||
177 | case GPU_LIT_I2M_CLASS: | ||
178 | ret = KEPLER_INLINE_TO_MEMORY_B; | ||
179 | break; | ||
180 | case GPU_LIT_DMA_COPY_CLASS: | ||
181 | ret = PASCAL_DMA_COPY_A; | ||
182 | break; | ||
183 | |||
165 | default: | 184 | default: |
166 | nvgpu_err(g, "Missing definition %d", value); | 185 | nvgpu_err(g, "Missing definition %d", value); |
167 | BUG(); | 186 | BUG(); |
@@ -608,7 +627,6 @@ static const struct gpu_ops gp10b_ops = { | |||
608 | int gp10b_init_hal(struct gk20a *g) | 627 | int gp10b_init_hal(struct gk20a *g) |
609 | { | 628 | { |
610 | struct gpu_ops *gops = &g->ops; | 629 | struct gpu_ops *gops = &g->ops; |
611 | struct nvgpu_gpu_characteristics *c = &g->gpu_characteristics; | ||
612 | u32 val; | 630 | u32 val; |
613 | 631 | ||
614 | gops->ltc = gp10b_ops.ltc; | 632 | gops->ltc = gp10b_ops.ltc; |
@@ -730,12 +748,5 @@ int gp10b_init_hal(struct gk20a *g) | |||
730 | 748 | ||
731 | g->name = "gp10b"; | 749 | g->name = "gp10b"; |
732 | 750 | ||
733 | c->twod_class = FERMI_TWOD_A; | ||
734 | c->threed_class = PASCAL_A; | ||
735 | c->compute_class = PASCAL_COMPUTE_A; | ||
736 | c->gpfifo_class = PASCAL_CHANNEL_GPFIFO_A; | ||
737 | c->inline_to_memory_class = KEPLER_INLINE_TO_MEMORY_B; | ||
738 | c->dma_copy_class = PASCAL_DMA_COPY_A; | ||
739 | |||
740 | return 0; | 751 | return 0; |
741 | } | 752 | } |