diff options
| -rw-r--r-- | drivers/gpu/nvgpu/os/linux/nvidia_p2p.c | 3 | ||||
| -rw-r--r-- | include/linux/nv-p2p.h | 29 |
2 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c b/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c index 2b0211da..87db8c5c 100644 --- a/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c +++ b/drivers/gpu/nvgpu/os/linux/nvidia_p2p.c | |||
| @@ -91,6 +91,7 @@ int nvidia_p2p_get_pages(u64 vaddr, u64 size, | |||
| 91 | goto free_pages; | 91 | goto free_pages; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | (*page_table)->version = NVIDIA_P2P_PAGE_TABLE_VERSION; | ||
| 94 | (*page_table)->pages = pages; | 95 | (*page_table)->pages = pages; |
| 95 | (*page_table)->entries = user_pages; | 96 | (*page_table)->entries = user_pages; |
| 96 | (*page_table)->page_size = NVIDIA_P2P_PAGE_SIZE_4KB; | 97 | (*page_table)->page_size = NVIDIA_P2P_PAGE_SIZE_4KB; |
| @@ -207,6 +208,8 @@ int nvidia_p2p_dma_map_pages(struct device *dev, | |||
| 207 | if (ret) { | 208 | if (ret) { |
| 208 | goto free_sgt; | 209 | goto free_sgt; |
| 209 | } | 210 | } |
| 211 | |||
| 212 | (*dma_mapping)->version = NVIDIA_P2P_DMA_MAPPING_VERSION; | ||
| 210 | (*dma_mapping)->sgt = sgt; | 213 | (*dma_mapping)->sgt = sgt; |
| 211 | (*dma_mapping)->dev = dev; | 214 | (*dma_mapping)->dev = dev; |
| 212 | (*dma_mapping)->direction = direction; | 215 | (*dma_mapping)->direction = direction; |
diff --git a/include/linux/nv-p2p.h b/include/linux/nv-p2p.h index 124e136f..64b92cbf 100644 --- a/include/linux/nv-p2p.h +++ b/include/linux/nv-p2p.h | |||
| @@ -30,6 +30,23 @@ | |||
| 30 | #define NVIDIA_P2P_PINNED 0x1 | 30 | #define NVIDIA_P2P_PINNED 0x1 |
| 31 | #define NVIDIA_P2P_MAPPED 0x2 | 31 | #define NVIDIA_P2P_MAPPED 0x2 |
| 32 | 32 | ||
| 33 | #define NVIDIA_P2P_MAJOR_VERSION_MASK 0xffff0000 | ||
| 34 | #define NVIDIA_P2P_MINOR_VERSION_MASK 0x0000ffff | ||
| 35 | |||
| 36 | #define NVIDIA_P2P_MAJOR_VERSION(v) \ | ||
| 37 | (((v) & NVIDIA_P2P_MAJOR_VERSION_MASK) >> 16) | ||
| 38 | |||
| 39 | #define NVIDIA_P2P_MINOR_VERSION(v) \ | ||
| 40 | (((v) & NVIDIA_P2P_MINOR_VERSION_MASK)) | ||
| 41 | |||
| 42 | #define NVIDIA_P2P_MAJOR_VERSION_MATCHES(p, v) \ | ||
| 43 | (NVIDIA_P2P_MAJOR_VERSION((p)->version) == NVIDIA_P2P_MAJOR_VERSION(v)) | ||
| 44 | |||
| 45 | #define NVIDIA_P2P_VERSION_COMPATIBLE(p, v) \ | ||
| 46 | (NVIDIA_P2P_MAJOR_VERSION_MATCHES(p, v) && \ | ||
| 47 | (NVIDIA_P2P_MINOR_VERSION((p)->version) >= \ | ||
| 48 | (NVIDIA_P2P_MINOR_VERSION(v)))) | ||
| 49 | |||
| 33 | enum nvidia_p2p_page_size_type { | 50 | enum nvidia_p2p_page_size_type { |
| 34 | NVIDIA_P2P_PAGE_SIZE_4KB = 0, | 51 | NVIDIA_P2P_PAGE_SIZE_4KB = 0, |
| 35 | NVIDIA_P2P_PAGE_SIZE_64KB, | 52 | NVIDIA_P2P_PAGE_SIZE_64KB, |
| @@ -38,6 +55,7 @@ enum nvidia_p2p_page_size_type { | |||
| 38 | }; | 55 | }; |
| 39 | 56 | ||
| 40 | struct nvidia_p2p_page_table { | 57 | struct nvidia_p2p_page_table { |
| 58 | u32 version; | ||
| 41 | u32 page_size; | 59 | u32 page_size; |
| 42 | u64 size; | 60 | u64 size; |
| 43 | u32 entries; | 61 | u32 entries; |
| @@ -54,6 +72,7 @@ struct nvidia_p2p_page_table { | |||
| 54 | }; | 72 | }; |
| 55 | 73 | ||
| 56 | struct nvidia_p2p_dma_mapping { | 74 | struct nvidia_p2p_dma_mapping { |
| 75 | u32 version; | ||
| 57 | dma_addr_t *hw_address; | 76 | dma_addr_t *hw_address; |
| 58 | u32 *hw_len; | 77 | u32 *hw_len; |
| 59 | u32 entries; | 78 | u32 entries; |
| @@ -64,6 +83,11 @@ struct nvidia_p2p_dma_mapping { | |||
| 64 | enum dma_data_direction direction; | 83 | enum dma_data_direction direction; |
| 65 | }; | 84 | }; |
| 66 | 85 | ||
| 86 | #define NVIDIA_P2P_PAGE_TABLE_VERSION 0x00010000 | ||
| 87 | |||
| 88 | #define NVIDIA_P2P_PAGE_TABLE_VERSION_COMPATIBLE(p) \ | ||
| 89 | NVIDIA_P2P_VERSION_COMPATIBLE(p, NVIDIA_P2P_PAGE_TABLE_VERSION) | ||
| 90 | |||
| 67 | /* | 91 | /* |
| 68 | * @brief | 92 | * @brief |
| 69 | * Make the pages underlying a range of GPU virtual memory | 93 | * Make the pages underlying a range of GPU virtual memory |
| @@ -124,6 +148,11 @@ int nvidia_p2p_put_pages(struct nvidia_p2p_page_table *page_table); | |||
| 124 | */ | 148 | */ |
| 125 | int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table); | 149 | int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table); |
| 126 | 150 | ||
| 151 | #define NVIDIA_P2P_DMA_MAPPING_VERSION 0x00010000 | ||
| 152 | |||
| 153 | #define NVIDIA_P2P_DMA_MAPPING_VERSION_COMPATIBLE(p) \ | ||
| 154 | NVIDIA_P2P_VERSION_COMPATIBLE(p, NVIDIA_P2P_DMA_MAPPING_VERSION) | ||
| 155 | |||
| 127 | /* | 156 | /* |
| 128 | * @brief | 157 | * @brief |
| 129 | * Map the pages retrieved using nvidia_p2p_get_pages and | 158 | * Map the pages retrieved using nvidia_p2p_get_pages and |
