summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/common/linux/ce2.c5
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c8
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h6
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c26
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c26
-rw-r--r--drivers/gpu/nvgpu/gp10b/fifo_gp10b.c2
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c27
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 = {
572int gm20b_init_hal(struct gk20a *g) 590int 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 = {
694int gp106_init_hal(struct gk20a *g) 712int 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
159u32 gp10b_fifo_get_pbdma_signature(struct gk20a *g) 159u32 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 = {
608int gp10b_init_hal(struct gk20a *g) 627int 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}