From 77ee4144ce112de624a279300d7969dfa80e0b7e Mon Sep 17 00:00:00 2001 From: Preetham Chandru R Date: Wed, 6 Mar 2019 16:20:22 +0530 Subject: 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 Reviewed-on: https://git-master.nvidia.com/r/2029086 (cherry picked from commit 8bbbd09caa06f7c0f17a48e129d4fd07ce6fa9be) Reviewed-on: https://git-master.nvidia.com/r/2071427 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Bibek Basu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/nvidia_p2p.c | 3 +++ include/linux/nv-p2p.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) 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, goto free_pages; } + (*page_table)->version = NVIDIA_P2P_PAGE_TABLE_VERSION; (*page_table)->pages = pages; (*page_table)->entries = user_pages; (*page_table)->page_size = NVIDIA_P2P_PAGE_SIZE_4KB; @@ -207,6 +208,8 @@ int nvidia_p2p_dma_map_pages(struct device *dev, if (ret) { goto free_sgt; } + + (*dma_mapping)->version = NVIDIA_P2P_DMA_MAPPING_VERSION; (*dma_mapping)->sgt = sgt; (*dma_mapping)->dev = dev; (*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 @@ #define NVIDIA_P2P_PINNED 0x1 #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 { NVIDIA_P2P_PAGE_SIZE_4KB = 0, NVIDIA_P2P_PAGE_SIZE_64KB, @@ -38,6 +55,7 @@ enum nvidia_p2p_page_size_type { }; struct nvidia_p2p_page_table { + u32 version; u32 page_size; u64 size; u32 entries; @@ -54,6 +72,7 @@ struct nvidia_p2p_page_table { }; struct nvidia_p2p_dma_mapping { + u32 version; dma_addr_t *hw_address; u32 *hw_len; u32 entries; @@ -64,6 +83,11 @@ struct nvidia_p2p_dma_mapping { 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 * 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); +#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 * Map the pages retrieved using nvidia_p2p_get_pages and -- cgit v1.2.2