summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/os/linux/nvidia_p2p.c3
-rw-r--r--include/linux/nv-p2p.h29
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
33enum nvidia_p2p_page_size_type { 50enum 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
40struct nvidia_p2p_page_table { 57struct 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
56struct nvidia_p2p_dma_mapping { 74struct 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 */
125int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table); 149int 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