diff options
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/gr_vgpu.c | 7 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/mm_vgpu.c | 14 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/vgpu.c | 10 | ||||
-rw-r--r-- | include/linux/tegra_vgpu.h | 3 |
4 files changed, 29 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c index 60a8f6c5..2b4b3c26 100644 --- a/drivers/gpu/nvgpu/vgpu/gr_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/gr_vgpu.c | |||
@@ -99,7 +99,7 @@ static int vgpu_gr_alloc_global_ctx_buffers(struct gk20a *g) | |||
99 | u32 cb_buffer_size = gr->bundle_cb_default_size * | 99 | u32 cb_buffer_size = gr->bundle_cb_default_size * |
100 | gr_scc_bundle_cb_size_div_256b_byte_granularity_v(); | 100 | gr_scc_bundle_cb_size_div_256b_byte_granularity_v(); |
101 | 101 | ||
102 | u32 pagepool_buffer_size = gr_scc_pagepool_total_pages_hwmax_value_v() * | 102 | u32 pagepool_buffer_size = g->ops.gr.pagepool_default_size(g) * |
103 | gr_scc_pagepool_total_pages_byte_granularity_v(); | 103 | gr_scc_pagepool_total_pages_byte_granularity_v(); |
104 | 104 | ||
105 | gk20a_dbg_fn(""); | 105 | gk20a_dbg_fn(""); |
@@ -530,6 +530,11 @@ static int vgpu_gr_init_gr_config(struct gk20a *g, struct gr_gk20a *gr) | |||
530 | &gr->max_tpc_count)) | 530 | &gr->max_tpc_count)) |
531 | return -ENOMEM; | 531 | return -ENOMEM; |
532 | 532 | ||
533 | if (vgpu_get_attribute(platform->virt_handle, | ||
534 | TEGRA_VGPU_ATTRIB_TPC_COUNT, | ||
535 | &gr->tpc_count)) | ||
536 | return -ENOMEM; | ||
537 | |||
533 | gr->gpc_tpc_mask = kzalloc(gr->gpc_count * sizeof(u32), GFP_KERNEL); | 538 | gr->gpc_tpc_mask = kzalloc(gr->gpc_count * sizeof(u32), GFP_KERNEL); |
534 | if (!gr->gpc_tpc_mask) { | 539 | if (!gr->gpc_tpc_mask) { |
535 | gk20a_err(dev_from_gk20a(g), "%s: out of memory\n", __func__); | 540 | gk20a_err(dev_from_gk20a(g), "%s: out of memory\n", __func__); |
diff --git a/drivers/gpu/nvgpu/vgpu/mm_vgpu.c b/drivers/gpu/nvgpu/vgpu/mm_vgpu.c index 2b23c4e6..b5846043 100644 --- a/drivers/gpu/nvgpu/vgpu/mm_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/mm_vgpu.c | |||
@@ -53,9 +53,18 @@ static int vgpu_init_mm_setup_sw(struct gk20a *g) | |||
53 | 53 | ||
54 | int vgpu_init_mm_support(struct gk20a *g) | 54 | int vgpu_init_mm_support(struct gk20a *g) |
55 | { | 55 | { |
56 | int err; | ||
57 | |||
56 | gk20a_dbg_fn(""); | 58 | gk20a_dbg_fn(""); |
57 | 59 | ||
58 | return vgpu_init_mm_setup_sw(g); | 60 | err = vgpu_init_mm_setup_sw(g); |
61 | if (err) | ||
62 | return err; | ||
63 | |||
64 | if (g->ops.mm.init_mm_setup_hw) | ||
65 | err = g->ops.mm.init_mm_setup_hw(g); | ||
66 | |||
67 | return err; | ||
59 | } | 68 | } |
60 | 69 | ||
61 | static u64 vgpu_locked_gmmu_map(struct vm_gk20a *vm, | 70 | static u64 vgpu_locked_gmmu_map(struct vm_gk20a *vm, |
@@ -275,7 +284,7 @@ static int vgpu_vm_alloc_share(struct gk20a_as_share *as_share, | |||
275 | for (i = 0; i < gmmu_nr_page_sizes; i++) | 284 | for (i = 0; i < gmmu_nr_page_sizes; i++) |
276 | vm->gmmu_page_sizes[i] = gmmu_page_sizes[i]; | 285 | vm->gmmu_page_sizes[i] = gmmu_page_sizes[i]; |
277 | 286 | ||
278 | vm->big_pages = true; | 287 | vm->big_pages = !mm->disable_bigpage; |
279 | vm->big_page_size = big_page_size; | 288 | vm->big_page_size = big_page_size; |
280 | 289 | ||
281 | vm->va_start = big_page_size << 10; /* create a one pde hole */ | 290 | vm->va_start = big_page_size << 10; /* create a one pde hole */ |
@@ -450,4 +459,5 @@ void vgpu_init_mm_ops(struct gpu_ops *gops) | |||
450 | gops->mm.tlb_invalidate = vgpu_mm_tlb_invalidate; | 459 | gops->mm.tlb_invalidate = vgpu_mm_tlb_invalidate; |
451 | gops->mm.get_physical_addr_bits = gk20a_mm_get_physical_addr_bits; | 460 | gops->mm.get_physical_addr_bits = gk20a_mm_get_physical_addr_bits; |
452 | gops->mm.get_iova_addr = gk20a_mm_iova_addr; | 461 | gops->mm.get_iova_addr = gk20a_mm_iova_addr; |
462 | gops->mm.init_mm_setup_hw = NULL; | ||
453 | } | 463 | } |
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c index b2c08d68..6f91db4c 100644 --- a/drivers/gpu/nvgpu/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/vgpu.c | |||
@@ -21,9 +21,12 @@ | |||
21 | #include "gk20a/debug_gk20a.h" | 21 | #include "gk20a/debug_gk20a.h" |
22 | #include "gk20a/hal_gk20a.h" | 22 | #include "gk20a/hal_gk20a.h" |
23 | #include "gk20a/hw_mc_gk20a.h" | 23 | #include "gk20a/hw_mc_gk20a.h" |
24 | |||
25 | #include "gm20b/hal_gm20b.h" | 24 | #include "gm20b/hal_gm20b.h" |
26 | 25 | ||
26 | #ifdef CONFIG_ARCH_TEGRA_18x_SOC | ||
27 | #include "nvgpu_gpuid_t18x.h" | ||
28 | #endif | ||
29 | |||
27 | static inline int vgpu_comm_init(struct platform_device *pdev) | 30 | static inline int vgpu_comm_init(struct platform_device *pdev) |
28 | { | 31 | { |
29 | size_t queue_sizes[] = { TEGRA_VGPU_QUEUE_SIZES }; | 32 | size_t queue_sizes[] = { TEGRA_VGPU_QUEUE_SIZES }; |
@@ -270,6 +273,11 @@ static int vgpu_init_hal(struct gk20a *g) | |||
270 | gk20a_dbg_info("gm20b detected"); | 273 | gk20a_dbg_info("gm20b detected"); |
271 | err = vgpu_gm20b_init_hal(g); | 274 | err = vgpu_gm20b_init_hal(g); |
272 | break; | 275 | break; |
276 | #if defined(CONFIG_ARCH_TEGRA_18x_SOC) | ||
277 | case TEGRA_18x_GPUID: | ||
278 | err = TEGRA_18x_GPUID_VGPU_HAL(g); | ||
279 | break; | ||
280 | #endif | ||
273 | default: | 281 | default: |
274 | gk20a_err(&g->dev->dev, "no support for %x", ver); | 282 | gk20a_err(&g->dev->dev, "no support for %x", ver); |
275 | err = -ENODEV; | 283 | err = -ENODEV; |
diff --git a/include/linux/tegra_vgpu.h b/include/linux/tegra_vgpu.h index 70914fa3..2b327d09 100644 --- a/include/linux/tegra_vgpu.h +++ b/include/linux/tegra_vgpu.h | |||
@@ -96,7 +96,8 @@ enum { | |||
96 | TEGRA_VGPU_ATTRIB_CACHELINE_SIZE, | 96 | TEGRA_VGPU_ATTRIB_CACHELINE_SIZE, |
97 | TEGRA_VGPU_ATTRIB_COMPTAGS_PER_CACHELINE, | 97 | TEGRA_VGPU_ATTRIB_COMPTAGS_PER_CACHELINE, |
98 | TEGRA_VGPU_ATTRIB_SLICES_PER_LTC, | 98 | TEGRA_VGPU_ATTRIB_SLICES_PER_LTC, |
99 | TEGRA_VGPU_ATTRIB_LTC_COUNT | 99 | TEGRA_VGPU_ATTRIB_LTC_COUNT, |
100 | TEGRA_VGPU_ATTRIB_TPC_COUNT | ||
100 | }; | 101 | }; |
101 | 102 | ||
102 | struct tegra_vgpu_attrib_params { | 103 | struct tegra_vgpu_attrib_params { |