From fa4ecf5730a75269e85cc41c2ad2ee61307e72a9 Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Wed, 15 Mar 2017 15:54:16 -0700 Subject: gpu: nvgpu: Split mem_desc from MM code Split the mem_desc code out from the MM code. This is to help simplify the MM code and make it easier to abstract the DMA allocation routines. JIRA NVGPU-12 Change-Id: I2ccb643efe6bbed80d1360a580ff5593acb407bd Signed-off-by: Alex Waterman Reviewed-on: http://git-master/r/1323324 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 82 ++------------------------------------ 1 file changed, 4 insertions(+), 78 deletions(-) (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.h') diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index b425ec5c..da8bbb0a 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -39,60 +40,12 @@ outer_flush_range(pa, pa + (size_t)(size)); \ } while (0) -/* - * Real location of a buffer - gk20a_aperture_mask() will deduce what will be - * told to the gpu about the aperture, but this flag designates where the - * memory actually was allocated from. - */ -enum gk20a_aperture { - APERTURE_INVALID, /* unallocated or N/A */ - APERTURE_SYSMEM, - APERTURE_VIDMEM -}; - enum gk20a_mem_rw_flag { gk20a_mem_flag_none = 0, gk20a_mem_flag_read_only = 1, gk20a_mem_flag_write_only = 2, }; -static inline const char *gk20a_aperture_str(enum gk20a_aperture aperture) -{ - switch (aperture) { - case APERTURE_INVALID: return "invalid"; - case APERTURE_SYSMEM: return "sysmem"; - case APERTURE_VIDMEM: return "vidmem"; - }; - return "UNKNOWN"; -} - -struct mem_desc { - void *cpu_va; /* sysmem only */ - struct page **pages; /* sysmem only */ - struct sg_table *sgt; - enum gk20a_aperture aperture; - size_t size; - u64 gpu_va; - bool fixed; /* vidmem only */ - bool user_mem; /* vidmem only */ - struct nvgpu_allocator *allocator; /* vidmem only */ - struct nvgpu_list_node clear_list_entry; /* vidmem only */ - bool skip_wmb; - unsigned long flags; -}; - -static inline struct mem_desc * -mem_desc_from_clear_list_entry(struct nvgpu_list_node *node) -{ - return (struct mem_desc *) - ((uintptr_t)node - offsetof(struct mem_desc, clear_list_entry)); -}; - -struct mem_desc_sub { - u32 offset; - u32 size; -}; - struct gpfifo_desc { struct mem_desc mem; u32 entry_num; @@ -511,36 +464,9 @@ enum gmmu_pgsz_gk20a __get_pte_size_fixed_map(struct vm_gk20a *vm, u64 base, u64 size); enum gmmu_pgsz_gk20a __get_pte_size(struct vm_gk20a *vm, u64 base, u64 size); -struct nvgpu_page_alloc * -get_vidmem_page_alloc(struct scatterlist *sgl); - -/* - * Buffer accessors - wrap between begin() and end() if there is no permanent - * kernel mapping for this buffer. - */ - -int gk20a_mem_begin(struct gk20a *g, struct mem_desc *mem); -/* nop for null mem, like with free() or vunmap() */ -void gk20a_mem_end(struct gk20a *g, struct mem_desc *mem); - -/* word-indexed offset */ -u32 gk20a_mem_rd32(struct gk20a *g, struct mem_desc *mem, u32 w); -/* byte offset (32b-aligned) */ -u32 gk20a_mem_rd(struct gk20a *g, struct mem_desc *mem, u32 offset); -/* memcpy to cpu, offset and size in bytes (32b-aligned) */ -void gk20a_mem_rd_n(struct gk20a *g, struct mem_desc *mem, u32 offset, - void *dest, u32 size); - -/* word-indexed offset */ -void gk20a_mem_wr32(struct gk20a *g, struct mem_desc *mem, u32 w, u32 data); -/* byte offset (32b-aligned) */ -void gk20a_mem_wr(struct gk20a *g, struct mem_desc *mem, u32 offset, u32 data); -/* memcpy from cpu, offset and size in bytes (32b-aligned) */ -void gk20a_mem_wr_n(struct gk20a *g, struct mem_desc *mem, u32 offset, - void *src, u32 size); -/* size and offset in bytes (32b-aligned), filled with the constant byte c */ -void gk20a_memset(struct gk20a *g, struct mem_desc *mem, u32 offset, - u32 c, u32 size); +void set_vidmem_page_alloc(struct scatterlist *sgl, u64 addr); +bool is_vidmem_page_alloc(u64 addr); +struct nvgpu_page_alloc *get_vidmem_page_alloc(struct scatterlist *sgl); #if 0 /*related to addr bits above, concern below TBD on which is accurate */ #define bar1_instance_block_shift_gk20a() (max_physaddr_bits_gk20a() -\ -- cgit v1.2.2