summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Zhao <rizhao@nvidia.com>2017-08-08 18:45:33 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-08-28 22:34:22 -0400
commit0e0767672ae7e66d0ec249b8847f36c685fe995e (patch)
tree79a917b0200c85307475be9bdf59dedfbd56a30e
parent6365040db35fd01c8ebff39bd9dbc6c73c48fb17 (diff)
gpu: nvgpu: vgpu: get engines info from RM server
- get engines info from constants - remove according HAL from gp10b vgpu Jira VFND-3797 Change-Id: If010e59c358ab0519cb0d8d6211c0bcc20fc3723 Signed-off-by: Richard Zhao <rizhao@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1536179 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/vgpu/fifo_vgpu.c45
-rw-r--r--drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c28
-rw-r--r--include/linux/tegra_vgpu.h18
3 files changed, 48 insertions, 43 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
index 3f03e25a..252b4e43 100644
--- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c
@@ -163,27 +163,42 @@ static int vgpu_channel_setup_ramfc(struct channel_gk20a *ch, u64 gpfifo_base,
163 163
164static int vgpu_fifo_init_engine_info(struct fifo_gk20a *f) 164static int vgpu_fifo_init_engine_info(struct fifo_gk20a *f)
165{ 165{
166 struct fifo_engine_info_gk20a *gr_info; 166 struct vgpu_priv_data *priv = vgpu_get_priv_data(f->g);
167 struct fifo_engine_info_gk20a *ce_info; 167 struct tegra_vgpu_engines_info *engines = &priv->constants.engines_info;
168 const u32 gr_sw_id = ENGINE_GR_GK20A; 168 u32 i;
169 const u32 ce_sw_id = ENGINE_GRCE_GK20A;
170 169
171 gk20a_dbg_fn(""); 170 gk20a_dbg_fn("");
172 171
173 f->num_engines = 2; 172 if (engines->num_engines > TEGRA_VGPU_MAX_ENGINES) {
173 nvgpu_err(f->g, "num_engines %d larger than max %d",
174 engines->num_engines, TEGRA_VGPU_MAX_ENGINES);
175 return -EINVAL;
176 }
177
178 f->num_engines = engines->num_engines;
179 for (i = 0; i < f->num_engines; i++) {
180 struct fifo_engine_info_gk20a *info =
181 &f->engine_info[engines->info[i].engine_id];
174 182
175 gr_info = &f->engine_info[0]; 183 if (engines->info[i].engine_id >= f->max_engines) {
184 nvgpu_err(f->g, "engine id %d larger than max %d",
185 engines->info[i].engine_id,
186 f->max_engines);
187 return -EINVAL;
188 }
176 189
177 /* FIXME: retrieve this from server */ 190 info->intr_mask = engines->info[i].intr_mask;
178 gr_info->runlist_id = 0; 191 info->reset_mask = engines->info[i].reset_mask;
179 gr_info->engine_enum = gr_sw_id; 192 info->runlist_id = engines->info[i].runlist_id;
180 f->active_engines_list[0] = 0; 193 info->pbdma_id = engines->info[i].pbdma_id;
194 info->inst_id = engines->info[i].inst_id;
195 info->pri_base = engines->info[i].pri_base;
196 info->engine_enum = engines->info[i].engine_enum;
197 info->fault_id = engines->info[i].fault_id;
198 f->active_engines_list[i] = engines->info[i].engine_id;
199 }
181 200
182 ce_info = &f->engine_info[1]; 201 gk20a_dbg_fn("done");
183 ce_info->runlist_id = 0;
184 ce_info->inst_id = 2;
185 ce_info->engine_enum = ce_sw_id;
186 f->active_engines_list[1] = 1;
187 202
188 return 0; 203 return 0;
189} 204}
diff --git a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c
index 23d945fb..52e90f33 100644
--- a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c
+++ b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_fifo_gp10b.c
@@ -13,36 +13,8 @@
13 13
14#include "vgpu_fifo_gp10b.h" 14#include "vgpu_fifo_gp10b.h"
15 15
16static int vgpu_gp10b_fifo_init_engine_info(struct fifo_gk20a *f)
17{
18 struct fifo_engine_info_gk20a *gr_info;
19 struct fifo_engine_info_gk20a *ce_info;
20 const u32 gr_sw_id = ENGINE_GR_GK20A;
21 const u32 ce_sw_id = ENGINE_GRCE_GK20A;
22
23 gk20a_dbg_fn("");
24
25 f->num_engines = 2;
26
27 gr_info = &f->engine_info[0];
28
29 /* FIXME: retrieve this from server */
30 gr_info->runlist_id = 0;
31 gr_info->engine_enum = gr_sw_id;
32 f->active_engines_list[0] = 0;
33
34 ce_info = &f->engine_info[1];
35 ce_info->runlist_id = 0;
36 ce_info->inst_id = 0;
37 ce_info->engine_enum = ce_sw_id;
38 f->active_engines_list[1] = 1;
39
40 return 0;
41}
42
43void vgpu_gp10b_init_fifo_ops(struct gpu_ops *gops) 16void vgpu_gp10b_init_fifo_ops(struct gpu_ops *gops)
44{ 17{
45 /* syncpoint protection not supported yet */ 18 /* syncpoint protection not supported yet */
46 gops->fifo.init_engine_info = vgpu_gp10b_fifo_init_engine_info;
47 gops->fifo.resetup_ramfc = NULL; 19 gops->fifo.resetup_ramfc = NULL;
48} 20}
diff --git a/include/linux/tegra_vgpu.h b/include/linux/tegra_vgpu.h
index 3f73d357..1c486f5c 100644
--- a/include/linux/tegra_vgpu.h
+++ b/include/linux/tegra_vgpu.h
@@ -422,6 +422,23 @@ struct tegra_vgpu_gpu_clk_rate_params {
422 u32 rate; /* in kHz */ 422 u32 rate; /* in kHz */
423}; 423};
424 424
425/* TEGRA_VGPU_MAX_ENGINES must be equal or greater than num_engines */
426#define TEGRA_VGPU_MAX_ENGINES 4
427struct tegra_vgpu_engines_info {
428 u32 num_engines;
429 struct engineinfo {
430 u32 engine_id;
431 u32 intr_mask;
432 u32 reset_mask;
433 u32 runlist_id;
434 u32 pbdma_id;
435 u32 inst_id;
436 u32 pri_base;
437 u32 engine_enum;
438 u32 fault_id;
439 } info[TEGRA_VGPU_MAX_ENGINES];
440};
441
425#define TEGRA_VGPU_MAX_GPC_COUNT 16 442#define TEGRA_VGPU_MAX_GPC_COUNT 16
426#define TEGRA_VGPU_MAX_TPC_COUNT_PER_GPC 16 443#define TEGRA_VGPU_MAX_TPC_COUNT_PER_GPC 16
427 444
@@ -459,6 +476,7 @@ struct tegra_vgpu_constants_params {
459 u32 default_timeslice_us; 476 u32 default_timeslice_us;
460 u32 preempt_ctx_size; 477 u32 preempt_ctx_size;
461 u32 channel_base; 478 u32 channel_base;
479 struct tegra_vgpu_engines_info engines_info;
462}; 480};
463 481
464struct tegra_vgpu_channel_cyclestats_snapshot_params { 482struct tegra_vgpu_channel_cyclestats_snapshot_params {