diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-03-31 14:13:42 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-15 11:50:34 -0400 |
commit | 7d8e2193893454bc8e05543c956fab32b8eed54b (patch) | |
tree | afb73b81611136fd0411e17995532d6d22b0499f /drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |
parent | 6839341bf8ffafa115cfc0427bba694ee1d131f3 (diff) |
gpu: nvgpu: Use sysmem aperture for SoC memory
In Tegra GPU, SoC memory has to be accessed as vidmem. In discrete GPU, it
has to be accessed as sysmem.
Change-Id: I4efe71b54a9a32f0bf1f02ec4016ed74405a14c5
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: http://git-master/r/1120468
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 519faeeb..5c3f83a6 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -497,7 +497,9 @@ int gk20a_init_mm_setup_hw(struct gk20a *g) | |||
497 | gk20a_dbg_info("bar1 inst block ptr: 0x%08x", (u32)inst_pa); | 497 | gk20a_dbg_info("bar1 inst block ptr: 0x%08x", (u32)inst_pa); |
498 | 498 | ||
499 | gk20a_writel(g, bus_bar1_block_r(), | 499 | gk20a_writel(g, bus_bar1_block_r(), |
500 | bus_bar1_block_target_vid_mem_f() | | 500 | (g->mm.vidmem_is_vidmem ? |
501 | bus_bar1_block_target_sys_mem_ncoh_f() : | ||
502 | bus_bar1_block_target_vid_mem_f()) | | ||
501 | bus_bar1_block_mode_virtual_f() | | 503 | bus_bar1_block_mode_virtual_f() | |
502 | bus_bar1_block_ptr_f(inst_pa)); | 504 | bus_bar1_block_ptr_f(inst_pa)); |
503 | 505 | ||
@@ -2271,19 +2273,23 @@ u64 gk20a_mm_iova_addr(struct gk20a *g, struct scatterlist *sgl, | |||
2271 | } | 2273 | } |
2272 | 2274 | ||
2273 | /* for gk20a the "video memory" apertures here are misnomers. */ | 2275 | /* for gk20a the "video memory" apertures here are misnomers. */ |
2274 | static inline u32 big_valid_pde0_bits(u64 pte_addr) | 2276 | static inline u32 big_valid_pde0_bits(struct gk20a *g, u64 pte_addr) |
2275 | { | 2277 | { |
2276 | u32 pde0_bits = | 2278 | u32 pde0_bits = |
2277 | gmmu_pde_aperture_big_video_memory_f() | | 2279 | (g->mm.vidmem_is_vidmem ? |
2280 | gmmu_pde_aperture_big_sys_mem_ncoh_f() : | ||
2281 | gmmu_pde_aperture_big_video_memory_f()) | | ||
2278 | gmmu_pde_address_big_sys_f( | 2282 | gmmu_pde_address_big_sys_f( |
2279 | (u32)(pte_addr >> gmmu_pde_address_shift_v())); | 2283 | (u32)(pte_addr >> gmmu_pde_address_shift_v())); |
2280 | return pde0_bits; | 2284 | return pde0_bits; |
2281 | } | 2285 | } |
2282 | 2286 | ||
2283 | static inline u32 small_valid_pde1_bits(u64 pte_addr) | 2287 | static inline u32 small_valid_pde1_bits(struct gk20a *g, u64 pte_addr) |
2284 | { | 2288 | { |
2285 | u32 pde1_bits = | 2289 | u32 pde1_bits = |
2286 | gmmu_pde_aperture_small_video_memory_f() | | 2290 | (g->mm.vidmem_is_vidmem ? |
2291 | gmmu_pde_aperture_small_sys_mem_ncoh_f() : | ||
2292 | gmmu_pde_aperture_small_video_memory_f()) | | ||
2287 | gmmu_pde_vol_small_true_f() | /* tbd: why? */ | 2293 | gmmu_pde_vol_small_true_f() | /* tbd: why? */ |
2288 | gmmu_pde_address_small_sys_f( | 2294 | gmmu_pde_address_small_sys_f( |
2289 | (u32)(pte_addr >> gmmu_pde_address_shift_v())); | 2295 | (u32)(pte_addr >> gmmu_pde_address_shift_v())); |
@@ -2325,11 +2331,11 @@ static int update_gmmu_pde_locked(struct vm_gk20a *vm, | |||
2325 | pte_addr_big = g->ops.mm.get_iova_addr(g, entry->sgt->sgl, 0); | 2331 | pte_addr_big = g->ops.mm.get_iova_addr(g, entry->sgt->sgl, 0); |
2326 | 2332 | ||
2327 | pde_v[0] = gmmu_pde_size_full_f(); | 2333 | pde_v[0] = gmmu_pde_size_full_f(); |
2328 | pde_v[0] |= big_valid ? big_valid_pde0_bits(pte_addr_big) : | 2334 | pde_v[0] |= big_valid ? big_valid_pde0_bits(g, pte_addr_big) : |
2329 | (gmmu_pde_aperture_big_invalid_f()); | 2335 | (gmmu_pde_aperture_big_invalid_f()); |
2330 | 2336 | ||
2331 | pde_v[1] |= (small_valid ? | 2337 | pde_v[1] |= (small_valid ? |
2332 | small_valid_pde1_bits(pte_addr_small) : | 2338 | small_valid_pde1_bits(g, pte_addr_small) : |
2333 | (gmmu_pde_aperture_small_invalid_f() | | 2339 | (gmmu_pde_aperture_small_invalid_f() | |
2334 | gmmu_pde_vol_small_false_f())) | 2340 | gmmu_pde_vol_small_false_f())) |
2335 | | | 2341 | | |
@@ -2374,7 +2380,9 @@ static int update_gmmu_pte_locked(struct vm_gk20a *vm, | |||
2374 | if (priv) | 2380 | if (priv) |
2375 | pte_w[0] |= gmmu_pte_privilege_true_f(); | 2381 | pte_w[0] |= gmmu_pte_privilege_true_f(); |
2376 | 2382 | ||
2377 | pte_w[1] = gmmu_pte_aperture_video_memory_f() | | 2383 | pte_w[1] = (g->mm.vidmem_is_vidmem ? |
2384 | gmmu_pte_aperture_sys_mem_ncoh_f() : | ||
2385 | gmmu_pte_aperture_video_memory_f()) | | ||
2378 | gmmu_pte_kind_f(kind_v) | | 2386 | gmmu_pte_kind_f(kind_v) | |
2379 | gmmu_pte_comptagline_f((u32)(*ctag >> ctag_shift)); | 2387 | gmmu_pte_comptagline_f((u32)(*ctag >> ctag_shift)); |
2380 | 2388 | ||
@@ -3482,7 +3490,9 @@ void gk20a_mm_init_pdb(struct gk20a *g, void *inst_ptr, u64 pdb_addr) | |||
3482 | u32 pdb_addr_hi = u64_hi32(pdb_addr); | 3490 | u32 pdb_addr_hi = u64_hi32(pdb_addr); |
3483 | 3491 | ||
3484 | gk20a_mem_wr32(inst_ptr, ram_in_page_dir_base_lo_w(), | 3492 | gk20a_mem_wr32(inst_ptr, ram_in_page_dir_base_lo_w(), |
3485 | ram_in_page_dir_base_target_vid_mem_f() | | 3493 | (g->mm.vidmem_is_vidmem ? |
3494 | ram_in_page_dir_base_target_sys_mem_ncoh_f() : | ||
3495 | ram_in_page_dir_base_target_vid_mem_f()) | | ||
3486 | ram_in_page_dir_base_vol_true_f() | | 3496 | ram_in_page_dir_base_vol_true_f() | |
3487 | ram_in_page_dir_base_lo_f(pdb_addr_lo)); | 3497 | ram_in_page_dir_base_lo_f(pdb_addr_lo)); |
3488 | 3498 | ||
@@ -3774,7 +3784,9 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm) | |||
3774 | 3784 | ||
3775 | gk20a_writel(g, fb_mmu_invalidate_pdb_r(), | 3785 | gk20a_writel(g, fb_mmu_invalidate_pdb_r(), |
3776 | fb_mmu_invalidate_pdb_addr_f(addr_lo) | | 3786 | fb_mmu_invalidate_pdb_addr_f(addr_lo) | |
3777 | fb_mmu_invalidate_pdb_aperture_vid_mem_f()); | 3787 | (g->mm.vidmem_is_vidmem ? |
3788 | fb_mmu_invalidate_pdb_aperture_sys_mem_f() : | ||
3789 | fb_mmu_invalidate_pdb_aperture_vid_mem_f())); | ||
3778 | 3790 | ||
3779 | gk20a_writel(g, fb_mmu_invalidate_r(), | 3791 | gk20a_writel(g, fb_mmu_invalidate_r(), |
3780 | fb_mmu_invalidate_all_va_true_f() | | 3792 | fb_mmu_invalidate_all_va_true_f() | |