diff options
author | seshendra Gadagottu <sgadagottu@nvidia.com> | 2016-11-16 15:25:08 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2016-12-20 18:15:14 -0500 |
commit | 67b54c3c76cfa488e1d102e5c74a32b3aaba9287 (patch) | |
tree | e56f4b6b11327710cd5665c241c4e454f16626e2 /drivers/gpu/nvgpu/gv11b/gr_gv11b.c | |
parent | 26199ffdf5bb5cf1d5a810c63904cc950314fe7b (diff) |
gpu: nvgpu: legacy support with subcontext
gv11b needs atleast one subcontext to submit work. To support
legacy in gv11b, currently main context is always copied into
subcontext0 (veid0) during channel commit instance.
As part of channel commit instance, veid0 for that channel is
created and relevant pdb and context info copied to vedi0.
JIRA GV11B-21
Change-Id: I5147a1708b5e94202fa55e73fa0e53199ab7fced
Signed-off-by: seshendra Gadagottu <sgadagottu@nvidia.com>
Reviewed-on: http://git-master/r/1231169
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gv11b/gr_gv11b.c')
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/gr_gv11b.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c index 7f5b8d3f..bdb96329 100644 --- a/drivers/gpu/nvgpu/gv11b/gr_gv11b.c +++ b/drivers/gpu/nvgpu/gv11b/gr_gv11b.c | |||
@@ -13,6 +13,7 @@ | |||
13 | * more details. | 13 | * more details. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/tegra_gpu_t19x.h> | ||
16 | #include "gk20a/gk20a.h" /* FERMI and MAXWELL classes defined here */ | 17 | #include "gk20a/gk20a.h" /* FERMI and MAXWELL classes defined here */ |
17 | #include <linux/delay.h> | 18 | #include <linux/delay.h> |
18 | #include <linux/tegra-fuse.h> | 19 | #include <linux/tegra-fuse.h> |
@@ -24,12 +25,16 @@ | |||
24 | 25 | ||
25 | #include "gm20b/gr_gm20b.h" | 26 | #include "gm20b/gr_gm20b.h" |
26 | #include "gv11b/gr_gv11b.h" | 27 | #include "gv11b/gr_gv11b.h" |
28 | #include "gv11b/mm_gv11b.h" | ||
29 | #include "gv11b/subctx_gv11b.h" | ||
27 | #include "hw_gr_gv11b.h" | 30 | #include "hw_gr_gv11b.h" |
28 | #include "hw_fifo_gv11b.h" | 31 | #include "hw_fifo_gv11b.h" |
29 | #include "hw_proj_gv11b.h" | 32 | #include "hw_proj_gv11b.h" |
30 | #include "hw_ctxsw_prog_gv11b.h" | 33 | #include "hw_ctxsw_prog_gv11b.h" |
31 | #include "hw_mc_gv11b.h" | 34 | #include "hw_mc_gv11b.h" |
32 | #include "hw_gr_gv11b.h" | 35 | #include "hw_gr_gv11b.h" |
36 | #include "hw_ram_gv11b.h" | ||
37 | #include "hw_pbdma_gv11b.h" | ||
33 | #include <linux/vmalloc.h> | 38 | #include <linux/vmalloc.h> |
34 | #include <linux/tegra_gpu_t19x.h> | 39 | #include <linux/tegra_gpu_t19x.h> |
35 | 40 | ||
@@ -1583,7 +1588,6 @@ static int gr_gv11b_setup_rop_mapping(struct gk20a *g, struct gr_gk20a *gr) | |||
1583 | return 0; | 1588 | return 0; |
1584 | } | 1589 | } |
1585 | 1590 | ||
1586 | |||
1587 | static void gv11b_write_bundle_veid_state(struct gk20a *g, u32 index) | 1591 | static void gv11b_write_bundle_veid_state(struct gk20a *g, u32 index) |
1588 | { | 1592 | { |
1589 | struct av_list_gk20a *sw_veid_bundle_init = | 1593 | struct av_list_gk20a *sw_veid_bundle_init = |
@@ -1766,12 +1770,43 @@ static int gr_gv11b_load_smid_config(struct gk20a *g) | |||
1766 | 1770 | ||
1767 | for (i = 0; i < gr_cwd_sm_id__size_1_v(); i++) | 1771 | for (i = 0; i < gr_cwd_sm_id__size_1_v(); i++) |
1768 | gk20a_writel(g, gr_cwd_sm_id_r(i), tpc_sm_id[i]); | 1772 | gk20a_writel(g, gr_cwd_sm_id_r(i), tpc_sm_id[i]); |
1769 | |||
1770 | kfree(tpc_sm_id); | 1773 | kfree(tpc_sm_id); |
1771 | 1774 | ||
1772 | return 0; | 1775 | return 0; |
1773 | } | 1776 | } |
1774 | 1777 | ||
1778 | static int gr_gv11b_commit_inst(struct channel_gk20a *c, u64 gpu_va) | ||
1779 | { | ||
1780 | u32 addr_lo; | ||
1781 | u32 addr_hi; | ||
1782 | struct ctx_header_desc *ctx; | ||
1783 | |||
1784 | gk20a_dbg_fn(""); | ||
1785 | |||
1786 | gv11b_alloc_subctx_header(c); | ||
1787 | |||
1788 | gv11b_update_subctx_header(c, gpu_va); | ||
1789 | |||
1790 | ctx = &c->ch_ctx.ctx_header; | ||
1791 | addr_lo = u64_lo32(ctx->mem.gpu_va) >> ram_in_base_shift_v(); | ||
1792 | addr_hi = u64_hi32(ctx->mem.gpu_va); | ||
1793 | |||
1794 | /* point this address to engine_wfi_ptr */ | ||
1795 | gk20a_mem_wr32(c->g, &c->inst_block, ram_in_engine_wfi_target_w(), | ||
1796 | ram_in_engine_cs_wfi_v() | | ||
1797 | ram_in_engine_wfi_target_f( | ||
1798 | ram_in_engine_wfi_target_sys_mem_ncoh_v()) | | ||
1799 | ram_in_engine_wfi_mode_f(ram_in_engine_wfi_mode_virtual_v()) | | ||
1800 | ram_in_engine_wfi_ptr_lo_f(addr_lo)); | ||
1801 | |||
1802 | gk20a_mem_wr32(c->g, &c->inst_block, ram_in_engine_wfi_ptr_hi_w(), | ||
1803 | ram_in_engine_wfi_ptr_hi_f(addr_hi)); | ||
1804 | |||
1805 | return 0; | ||
1806 | } | ||
1807 | |||
1808 | |||
1809 | |||
1775 | static int gr_gv11b_commit_global_timeslice(struct gk20a *g, | 1810 | static int gr_gv11b_commit_global_timeslice(struct gk20a *g, |
1776 | struct channel_gk20a *c, bool patch) | 1811 | struct channel_gk20a *c, bool patch) |
1777 | { | 1812 | { |
@@ -1828,6 +1863,7 @@ static int gr_gv11b_commit_global_timeslice(struct gk20a *g, | |||
1828 | void gv11b_init_gr(struct gpu_ops *gops) | 1863 | void gv11b_init_gr(struct gpu_ops *gops) |
1829 | { | 1864 | { |
1830 | gp10b_init_gr(gops); | 1865 | gp10b_init_gr(gops); |
1866 | gops->gr.init_preemption_state = NULL; | ||
1831 | gops->gr.init_fs_state = gr_gv11b_init_fs_state; | 1867 | gops->gr.init_fs_state = gr_gv11b_init_fs_state; |
1832 | gops->gr.detect_sm_arch = gr_gv11b_detect_sm_arch; | 1868 | gops->gr.detect_sm_arch = gr_gv11b_detect_sm_arch; |
1833 | gops->gr.is_valid_class = gr_gv11b_is_valid_class; | 1869 | gops->gr.is_valid_class = gr_gv11b_is_valid_class; |
@@ -1872,4 +1908,6 @@ void gv11b_init_gr(struct gpu_ops *gops) | |||
1872 | gops->gr.load_smid_config = gr_gv11b_load_smid_config; | 1908 | gops->gr.load_smid_config = gr_gv11b_load_smid_config; |
1873 | gops->gr.program_sm_id_numbering = | 1909 | gops->gr.program_sm_id_numbering = |
1874 | gr_gv11b_program_sm_id_numbering; | 1910 | gr_gv11b_program_sm_id_numbering; |
1911 | gops->gr.commit_inst = gr_gv11b_commit_inst; | ||
1912 | |||
1875 | } | 1913 | } |