diff options
author | Sami Kiminki <skiminki@nvidia.com> | 2014-10-24 13:40:57 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:12:07 -0400 |
commit | d11fbfe7b1b68b3aab93f7703896d95d40b79a58 (patch) | |
tree | a4b8574c9181284523efa5105878c2e3ef2e05fa /drivers/gpu/nvgpu/gm20b | |
parent | 2c5fdd1c8a76ef9ca21abcf894f2c9525d57fd49 (diff) |
gpu: nvgpu: GPU characteristics additions
Add the following info into GPU characteristics: available big page
sizes, support indicators for sync fence fds and cycle stats, gpc
mask, SM version, SM SPA version and warp count, and IOCTL interface
levels. Also, add new IOCTL to fetch TPC masks.
Bug 1551769
Bug 1558186
Change-Id: I8a47d882645f29c7bf0c8f74334ebf47240e41de
Signed-off-by: Sami Kiminki <skiminki@nvidia.com>
Reviewed-on: http://git-master/r/562904
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/gr_gm20b.c | 13 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h | 16 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/mm_gm20b.c | 6 |
3 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c index d40e9d52..8f056181 100644 --- a/drivers/gpu/nvgpu/gm20b/gr_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/gr_gm20b.c | |||
@@ -748,6 +748,18 @@ static int gr_gm20b_load_ctxsw_ucode(struct gk20a *g) | |||
748 | 748 | ||
749 | #endif | 749 | #endif |
750 | 750 | ||
751 | static void gr_gm20b_detect_sm_arch(struct gk20a *g) | ||
752 | { | ||
753 | u32 v = gk20a_readl(g, gr_gpc0_tpc0_sm_arch_r()); | ||
754 | |||
755 | g->gpu_characteristics.sm_arch_spa_version = | ||
756 | gr_gpc0_tpc0_sm_arch_spa_version_v(v); | ||
757 | g->gpu_characteristics.sm_arch_sm_version = | ||
758 | gr_gpc0_tpc0_sm_arch_sm_version_v(v); | ||
759 | g->gpu_characteristics.sm_arch_warp_count = | ||
760 | gr_gpc0_tpc0_sm_arch_warp_count_v(v); | ||
761 | } | ||
762 | |||
751 | void gm20b_init_gr(struct gpu_ops *gops) | 763 | void gm20b_init_gr(struct gpu_ops *gops) |
752 | { | 764 | { |
753 | gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; | 765 | gops->gr.init_gpc_mmu = gr_gm20b_init_gpc_mmu; |
@@ -781,4 +793,5 @@ void gm20b_init_gr(struct gpu_ops *gops) | |||
781 | gops->gr.get_zcull_info = gr_gk20a_get_zcull_info; | 793 | gops->gr.get_zcull_info = gr_gk20a_get_zcull_info; |
782 | gops->gr.is_tpc_addr = gr_gm20b_is_tpc_addr; | 794 | gops->gr.is_tpc_addr = gr_gm20b_is_tpc_addr; |
783 | gops->gr.get_tpc_num = gr_gm20b_get_tpc_num; | 795 | gops->gr.get_tpc_num = gr_gm20b_get_tpc_num; |
796 | gops->gr.detect_sm_arch = gr_gm20b_detect_sm_arch; | ||
784 | } | 797 | } |
diff --git a/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h b/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h index 0dae5896..8e4308a3 100644 --- a/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h | |||
@@ -1878,6 +1878,22 @@ static inline u32 gr_gpc0_tpc0_sm_cfg_sm_id_f(u32 v) | |||
1878 | { | 1878 | { |
1879 | return (v & 0xffff) << 0; | 1879 | return (v & 0xffff) << 0; |
1880 | } | 1880 | } |
1881 | static inline u32 gr_gpc0_tpc0_sm_arch_r(void) | ||
1882 | { | ||
1883 | return 0x0050469c; | ||
1884 | } | ||
1885 | static inline u32 gr_gpc0_tpc0_sm_arch_warp_count_v(u32 r) | ||
1886 | { | ||
1887 | return (r >> 0) & 0xff; | ||
1888 | } | ||
1889 | static inline u32 gr_gpc0_tpc0_sm_arch_spa_version_v(u32 r) | ||
1890 | { | ||
1891 | return (r >> 8) & 0xfff; | ||
1892 | } | ||
1893 | static inline u32 gr_gpc0_tpc0_sm_arch_sm_version_v(u32 r) | ||
1894 | { | ||
1895 | return (r >> 20) & 0xfff; | ||
1896 | } | ||
1881 | static inline u32 gr_gpc0_ppc0_pes_vsc_strem_r(void) | 1897 | static inline u32 gr_gpc0_ppc0_pes_vsc_strem_r(void) |
1882 | { | 1898 | { |
1883 | return 0x00503018; | 1899 | return 0x00503018; |
diff --git a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c index 030701b9..678ef4fd 100644 --- a/drivers/gpu/nvgpu/gm20b/mm_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/mm_gm20b.c | |||
@@ -280,6 +280,11 @@ static void gm20b_mm_set_big_page_size(struct gk20a *g, | |||
280 | gk20a_dbg_fn("done"); | 280 | gk20a_dbg_fn("done"); |
281 | } | 281 | } |
282 | 282 | ||
283 | u32 gm20b_mm_get_big_page_sizes(void) | ||
284 | { | ||
285 | return SZ_64K | SZ_128K; | ||
286 | } | ||
287 | |||
283 | void gm20b_init_mm(struct gpu_ops *gops) | 288 | void gm20b_init_mm(struct gpu_ops *gops) |
284 | { | 289 | { |
285 | gops->mm.set_sparse = gm20b_vm_put_sparse; | 290 | gops->mm.set_sparse = gm20b_vm_put_sparse; |
@@ -295,4 +300,5 @@ void gm20b_init_mm(struct gpu_ops *gops) | |||
295 | gops->mm.l2_flush = gk20a_mm_l2_flush; | 300 | gops->mm.l2_flush = gk20a_mm_l2_flush; |
296 | gops->mm.tlb_invalidate = gk20a_mm_tlb_invalidate; | 301 | gops->mm.tlb_invalidate = gk20a_mm_tlb_invalidate; |
297 | gops->mm.set_big_page_size = gm20b_mm_set_big_page_size; | 302 | gops->mm.set_big_page_size = gm20b_mm_set_big_page_size; |
303 | gops->mm.get_big_page_sizes = gm20b_mm_get_big_page_sizes; | ||
298 | } | 304 | } |