gpu: nvgpu: add compatibility version

Add compatibility version to page table and dma mapping structure.

Bug 200438879

Change-Id: I04b4601f71ae2b3e75843f39f5445ecca2b16677
Signed-off-by: Preetham Chandru R <pchandru@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2029086
Reviewed-by: Stephen Warren <swarren@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Alex Waterman <alexw@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Preetham Chandru R
2019-03-06 16:20:22 +05:30
committed by mobile promotions
parent aa72f2d03a
commit 8bbbd09caa
2 changed files with 32 additions and 0 deletions

View File

@@ -91,6 +91,7 @@ int nvidia_p2p_get_pages(u64 vaddr, u64 size,
goto free_pages; goto free_pages;
} }
(*page_table)->version = NVIDIA_P2P_PAGE_TABLE_VERSION;
(*page_table)->pages = pages; (*page_table)->pages = pages;
(*page_table)->entries = user_pages; (*page_table)->entries = user_pages;
(*page_table)->page_size = NVIDIA_P2P_PAGE_SIZE_4KB; (*page_table)->page_size = NVIDIA_P2P_PAGE_SIZE_4KB;
@@ -207,6 +208,8 @@ int nvidia_p2p_dma_map_pages(struct device *dev,
if (ret) { if (ret) {
goto free_sgt; goto free_sgt;
} }
(*dma_mapping)->version = NVIDIA_P2P_DMA_MAPPING_VERSION;
(*dma_mapping)->sgt = sgt; (*dma_mapping)->sgt = sgt;
(*dma_mapping)->dev = dev; (*dma_mapping)->dev = dev;
(*dma_mapping)->direction = direction; (*dma_mapping)->direction = direction;

View File

@@ -30,6 +30,23 @@
#define NVIDIA_P2P_PINNED 0x1 #define NVIDIA_P2P_PINNED 0x1
#define NVIDIA_P2P_MAPPED 0x2 #define NVIDIA_P2P_MAPPED 0x2
#define NVIDIA_P2P_MAJOR_VERSION_MASK 0xffff0000
#define NVIDIA_P2P_MINOR_VERSION_MASK 0x0000ffff
#define NVIDIA_P2P_MAJOR_VERSION(v) \
(((v) & NVIDIA_P2P_MAJOR_VERSION_MASK) >> 16)
#define NVIDIA_P2P_MINOR_VERSION(v) \
(((v) & NVIDIA_P2P_MINOR_VERSION_MASK))
#define NVIDIA_P2P_MAJOR_VERSION_MATCHES(p, v) \
(NVIDIA_P2P_MAJOR_VERSION((p)->version) == NVIDIA_P2P_MAJOR_VERSION(v))
#define NVIDIA_P2P_VERSION_COMPATIBLE(p, v) \
(NVIDIA_P2P_MAJOR_VERSION_MATCHES(p, v) && \
(NVIDIA_P2P_MINOR_VERSION((p)->version) >= \
(NVIDIA_P2P_MINOR_VERSION(v))))
enum nvidia_p2p_page_size_type { enum nvidia_p2p_page_size_type {
NVIDIA_P2P_PAGE_SIZE_4KB = 0, NVIDIA_P2P_PAGE_SIZE_4KB = 0,
NVIDIA_P2P_PAGE_SIZE_64KB, NVIDIA_P2P_PAGE_SIZE_64KB,
@@ -38,6 +55,7 @@ enum nvidia_p2p_page_size_type {
}; };
struct nvidia_p2p_page_table { struct nvidia_p2p_page_table {
u32 version;
u32 page_size; u32 page_size;
u64 size; u64 size;
u32 entries; u32 entries;
@@ -54,6 +72,7 @@ struct nvidia_p2p_page_table {
}; };
struct nvidia_p2p_dma_mapping { struct nvidia_p2p_dma_mapping {
u32 version;
dma_addr_t *hw_address; dma_addr_t *hw_address;
u32 *hw_len; u32 *hw_len;
u32 entries; u32 entries;
@@ -64,6 +83,11 @@ struct nvidia_p2p_dma_mapping {
enum dma_data_direction direction; enum dma_data_direction direction;
}; };
#define NVIDIA_P2P_PAGE_TABLE_VERSION 0x00010000
#define NVIDIA_P2P_PAGE_TABLE_VERSION_COMPATIBLE(p) \
NVIDIA_P2P_VERSION_COMPATIBLE(p, NVIDIA_P2P_PAGE_TABLE_VERSION)
/* /*
* @brief * @brief
* Make the pages underlying a range of GPU virtual memory * 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);
*/ */
int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table); int nvidia_p2p_free_page_table(struct nvidia_p2p_page_table *page_table);
#define NVIDIA_P2P_DMA_MAPPING_VERSION 0x00010000
#define NVIDIA_P2P_DMA_MAPPING_VERSION_COMPATIBLE(p) \
NVIDIA_P2P_VERSION_COMPATIBLE(p, NVIDIA_P2P_DMA_MAPPING_VERSION)
/* /*
* @brief * @brief
* Map the pages retrieved using nvidia_p2p_get_pages and * Map the pages retrieved using nvidia_p2p_get_pages and