summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b')
-rw-r--r--drivers/gpu/nvgpu/gm20b/gr_gm20b.c13
-rw-r--r--drivers/gpu/nvgpu/gm20b/hw_gr_gm20b.h16
-rw-r--r--drivers/gpu/nvgpu/gm20b/mm_gm20b.c6
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
751static 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
751void gm20b_init_gr(struct gpu_ops *gops) 763void 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}
1881static inline u32 gr_gpc0_tpc0_sm_arch_r(void)
1882{
1883 return 0x0050469c;
1884}
1885static inline u32 gr_gpc0_tpc0_sm_arch_warp_count_v(u32 r)
1886{
1887 return (r >> 0) & 0xff;
1888}
1889static inline u32 gr_gpc0_tpc0_sm_arch_spa_version_v(u32 r)
1890{
1891 return (r >> 8) & 0xfff;
1892}
1893static inline u32 gr_gpc0_tpc0_sm_arch_sm_version_v(u32 r)
1894{
1895 return (r >> 20) & 0xfff;
1896}
1881static inline u32 gr_gpc0_ppc0_pes_vsc_strem_r(void) 1897static 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
283u32 gm20b_mm_get_big_page_sizes(void)
284{
285 return SZ_64K | SZ_128K;
286}
287
283void gm20b_init_mm(struct gpu_ops *gops) 288void 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}