diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h index 0d3547e1..52e5d4db 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h | |||
@@ -19,7 +19,6 @@ | |||
19 | #define MM_GK20A_H | 19 | #define MM_GK20A_H |
20 | 20 | ||
21 | #include <linux/scatterlist.h> | 21 | #include <linux/scatterlist.h> |
22 | #include <linux/dma-attrs.h> | ||
23 | #include <linux/iommu.h> | 22 | #include <linux/iommu.h> |
24 | #include <soc/tegra/chip-id.h> | 23 | #include <soc/tegra/chip-id.h> |
25 | #include <linux/vmalloc.h> | 24 | #include <linux/vmalloc.h> |
@@ -80,6 +79,7 @@ struct mem_desc { | |||
80 | struct nvgpu_allocator *allocator; /* vidmem only */ | 79 | struct nvgpu_allocator *allocator; /* vidmem only */ |
81 | struct list_head clear_list_entry; /* vidmem only */ | 80 | struct list_head clear_list_entry; /* vidmem only */ |
82 | bool skip_wmb; | 81 | bool skip_wmb; |
82 | unsigned long flags; | ||
83 | }; | 83 | }; |
84 | 84 | ||
85 | struct mem_desc_sub { | 85 | struct mem_desc_sub { |
@@ -545,40 +545,55 @@ u64 gk20a_gmmu_fixed_map(struct vm_gk20a *vm, | |||
545 | bool priv, | 545 | bool priv, |
546 | enum gk20a_aperture aperture); | 546 | enum gk20a_aperture aperture); |
547 | 547 | ||
548 | /* Flags for the below gk20a_gmmu_{alloc,alloc_map}_flags* */ | ||
549 | |||
550 | /* | ||
551 | * Don't create a virtual kernel mapping for the buffer but only allocate it; | ||
552 | * this may save some resources. The buffer can be mapped later explicitly. | ||
553 | */ | ||
554 | #define NVGPU_DMA_NO_KERNEL_MAPPING (1 << 0) | ||
555 | /* | ||
556 | * Don't allow building the buffer from individual pages but require a | ||
557 | * physically contiguous block. | ||
558 | */ | ||
559 | #define NVGPU_DMA_FORCE_CONTIGUOUS (1 << 1) | ||
560 | /* | ||
561 | * Make the mapping read-only. | ||
562 | */ | ||
563 | #define NVGPU_DMA_READ_ONLY (1 << 2) | ||
564 | |||
548 | int gk20a_gmmu_alloc_map(struct vm_gk20a *vm, size_t size, | 565 | int gk20a_gmmu_alloc_map(struct vm_gk20a *vm, size_t size, |
549 | struct mem_desc *mem); | 566 | struct mem_desc *mem); |
550 | int gk20a_gmmu_alloc_map_attr(struct vm_gk20a *vm, enum dma_attr attr, | 567 | int gk20a_gmmu_alloc_map_flags(struct vm_gk20a *vm, unsigned long flags, |
551 | size_t size, struct mem_desc *mem); | 568 | size_t size, struct mem_desc *mem); |
552 | 569 | ||
553 | int gk20a_gmmu_alloc_map_sys(struct vm_gk20a *vm, size_t size, | 570 | int gk20a_gmmu_alloc_map_sys(struct vm_gk20a *vm, size_t size, |
554 | struct mem_desc *mem); | 571 | struct mem_desc *mem); |
555 | int gk20a_gmmu_alloc_map_attr_sys(struct vm_gk20a *vm, enum dma_attr attr, | 572 | int gk20a_gmmu_alloc_map_flags_sys(struct vm_gk20a *vm, unsigned long flags, |
556 | size_t size, struct mem_desc *mem); | 573 | size_t size, struct mem_desc *mem); |
557 | 574 | ||
558 | int gk20a_gmmu_alloc_map_vid(struct vm_gk20a *vm, size_t size, | 575 | int gk20a_gmmu_alloc_map_vid(struct vm_gk20a *vm, size_t size, |
559 | struct mem_desc *mem); | 576 | struct mem_desc *mem); |
560 | int gk20a_gmmu_alloc_map_attr_vid(struct vm_gk20a *vm, enum dma_attr attr, | 577 | int gk20a_gmmu_alloc_map_flags_vid(struct vm_gk20a *vm, unsigned long flags, |
561 | size_t size, struct mem_desc *mem); | 578 | size_t size, struct mem_desc *mem); |
562 | 579 | ||
563 | void gk20a_gmmu_unmap_free(struct vm_gk20a *vm, struct mem_desc *mem); | 580 | void gk20a_gmmu_unmap_free(struct vm_gk20a *vm, struct mem_desc *mem); |
564 | 581 | ||
565 | int gk20a_gmmu_alloc(struct gk20a *g, size_t size, struct mem_desc *mem); | 582 | int gk20a_gmmu_alloc(struct gk20a *g, size_t size, struct mem_desc *mem); |
566 | int gk20a_gmmu_alloc_attr(struct gk20a *g, enum dma_attr attr, size_t size, | 583 | int gk20a_gmmu_alloc_flags(struct gk20a *g, unsigned long flags, size_t size, |
567 | struct mem_desc *mem); | 584 | struct mem_desc *mem); |
568 | 585 | ||
569 | int gk20a_gmmu_alloc_sys(struct gk20a *g, size_t size, struct mem_desc *mem); | 586 | int gk20a_gmmu_alloc_sys(struct gk20a *g, size_t size, struct mem_desc *mem); |
570 | int gk20a_gmmu_alloc_attr_sys(struct gk20a *g, enum dma_attr attr, size_t size, | 587 | int gk20a_gmmu_alloc_flags_sys(struct gk20a *g, unsigned long flags, |
571 | struct mem_desc *mem); | 588 | size_t size, struct mem_desc *mem); |
572 | 589 | ||
573 | int gk20a_gmmu_alloc_vid(struct gk20a *g, size_t size, struct mem_desc *mem); | 590 | int gk20a_gmmu_alloc_vid(struct gk20a *g, size_t size, struct mem_desc *mem); |
574 | int gk20a_gmmu_alloc_attr_vid(struct gk20a *g, enum dma_attr attr, size_t size, | 591 | int gk20a_gmmu_alloc_flags_vid(struct gk20a *g, unsigned long flags, |
575 | struct mem_desc *mem); | 592 | size_t size, struct mem_desc *mem); |
576 | int gk20a_gmmu_alloc_attr_vid_at(struct gk20a *g, enum dma_attr attr, | 593 | int gk20a_gmmu_alloc_flags_vid_at(struct gk20a *g, unsigned long flags, |
577 | size_t size, struct mem_desc *mem, dma_addr_t at); | 594 | size_t size, struct mem_desc *mem, dma_addr_t at); |
578 | 595 | ||
579 | void gk20a_gmmu_free(struct gk20a *g, struct mem_desc *mem); | 596 | void gk20a_gmmu_free(struct gk20a *g, struct mem_desc *mem); |
580 | void gk20a_gmmu_free_attr(struct gk20a *g, enum dma_attr attr, | ||
581 | struct mem_desc *mem); | ||
582 | 597 | ||
583 | static inline phys_addr_t gk20a_mem_phys(struct mem_desc *mem) | 598 | static inline phys_addr_t gk20a_mem_phys(struct mem_desc *mem) |
584 | { | 599 | { |