aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-graphics/drm/files/0115-amdgpu-implement-direct-gma.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-graphics/drm/files/0115-amdgpu-implement-direct-gma.patch')
-rw-r--r--meta-amdfalconx86/recipes-graphics/drm/files/0115-amdgpu-implement-direct-gma.patch187
1 files changed, 0 insertions, 187 deletions
diff --git a/meta-amdfalconx86/recipes-graphics/drm/files/0115-amdgpu-implement-direct-gma.patch b/meta-amdfalconx86/recipes-graphics/drm/files/0115-amdgpu-implement-direct-gma.patch
deleted file mode 100644
index bb19c3a2..00000000
--- a/meta-amdfalconx86/recipes-graphics/drm/files/0115-amdgpu-implement-direct-gma.patch
+++ /dev/null
@@ -1,187 +0,0 @@
-From 1474cc7321f29b223249f9f7c09797534aa67288 Mon Sep 17 00:00:00 2001
-From: Flora Cui <Flora.Cui@amd.com>
-Date: Thu, 11 Aug 2016 15:25:14 +0800
-Subject: [PATCH 115/117] amdgpu: implement direct gma
-
-Change-Id: I37a6a0f79a91b8e793fc90eb3955045bebf24848
-Signed-off-by: Flora Cui <Flora.Cui@amd.com>
----
- amdgpu/amdgpu.h | 43 +++++++++++++++++++++++++++++++++++++
- amdgpu/amdgpu_bo.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++-
- include/drm/amdgpu_drm.h | 12 +++++++++++
- 3 files changed, 109 insertions(+), 1 deletion(-)
-
-diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
-index 763a3a6..525bf8e 100644
---- a/amdgpu/amdgpu.h
-+++ b/amdgpu/amdgpu.h
-@@ -727,6 +727,49 @@ int amdgpu_find_bo_by_cpu_mapping(amdgpu_device_handle dev,
- amdgpu_bo_handle *buf_handle,
- uint64_t *offset_in_bo);
-
-+/**
-+ * Request GPU access to physical memory from 3rd party device.
-+ *
-+ * \param dev - [in] Device handle. See #amdgpu_device_initialize()
-+ * \param phys_address - [in] Physical address from 3rd party device which
-+ * we want to map to GPU address space (make GPU accessible)
-+ * (This address must be correctly aligned).
-+ * \param size - [in] Size of allocation (must be correctly aligned)
-+ * \param buf_handle - [out] Buffer handle for the userptr memory
-+ * resource on submission and be used in other operations.
-+ *
-+ *
-+ * \return 0 on success\n
-+ * <0 - Negative POSIX Error code
-+ *
-+ * \note
-+ * This call should guarantee that such memory will be persistently
-+ * "locked" / make non-pageable. The purpose of this call is to provide
-+ * opportunity for GPU get access to this resource during submission.
-+ *
-+ *
-+ * Supported (theoretical) max. size of mapping is restricted only by
-+ * capability.direct_gma_size. See #amdgpu_query_capability()
-+ *
-+ * It is responsibility of caller to correctly specify physical_address
-+*/
-+int amdgpu_create_bo_from_phys_mem(amdgpu_device_handle dev,
-+ uint64_t phys_address, uint64_t size,
-+ amdgpu_bo_handle *buf_handle);
-+
-+/**
-+ * Get physical address from BO
-+ *
-+ * \param buf_handle - [in] Buffer handle for the physical address.
-+ * \param phys_address - [out] Physical address of this BO.
-+ *
-+ *
-+ * \return 0 on success\n
-+ * <0 - Negative POSIX Error code
-+ *
-+*/
-+int amdgpu_bo_get_phys_address(amdgpu_bo_handle buf_handle,
-+ uint64_t *phys_address);
-
- /**
- * Free previosuly allocated memory
-diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c
-index a07d0b5..6abc5e3 100644
---- a/amdgpu/amdgpu_bo.c
-+++ b/amdgpu/amdgpu_bo.c
-@@ -87,7 +87,8 @@ int amdgpu_bo_alloc(amdgpu_device_handle dev,
- int r = 0;
-
- /* It's an error if the heap is not specified */
-- if (!(heap & (AMDGPU_GEM_DOMAIN_GTT | AMDGPU_GEM_DOMAIN_VRAM)))
-+ if (!(heap & (AMDGPU_GEM_DOMAIN_GTT | AMDGPU_GEM_DOMAIN_VRAM
-+ | AMDGPU_GEM_DOMAIN_DGMA)))
- return -EINVAL;
-
- bo = calloc(1, sizeof(struct amdgpu_bo));
-@@ -570,6 +571,58 @@ int amdgpu_get_bo_from_fb_id(amdgpu_device_handle dev, unsigned int fb_id, struc
- return r;
- }
-
-+int amdgpu_create_bo_from_phys_mem(amdgpu_device_handle dev,
-+ uint64_t phys_address, uint64_t size,
-+ amdgpu_bo_handle *buf_handle)
-+{
-+ struct drm_amdgpu_gem_dgma args;
-+ amdgpu_bo_handle bo;
-+ int r;
-+
-+ if (phys_address == 0 || phys_address & 4095 ||
-+ size == 0 || size & 4095)
-+ return -EINVAL;
-+
-+ args.addr = phys_address;
-+ args.size = size;
-+ args.op = AMDGPU_GEM_DGMA_IMPORT;
-+ r = drmCommandWriteRead(dev->fd, DRM_AMDGPU_GEM_DGMA,
-+ &args, sizeof(args));
-+ if (r)
-+ return r;
-+
-+ bo = calloc(1, sizeof(struct amdgpu_bo));
-+ if (!bo)
-+ return -ENOMEM;
-+
-+ atomic_set(&bo->refcount, 1);
-+ pthread_mutex_init(&bo->cpu_access_mutex, NULL);
-+ bo->dev = dev;
-+ bo->alloc_size = size;
-+ bo->handle = args.handle;
-+
-+ *buf_handle = bo;
-+
-+ return 0;
-+}
-+
-+int amdgpu_bo_get_phys_address(amdgpu_bo_handle buf_handle,
-+ uint64_t *phys_address)
-+{
-+ struct drm_amdgpu_gem_dgma args;
-+ int r;
-+
-+ args.op = AMDGPU_GEM_DGMA_QUERY_PHYS_ADDR;
-+ args.handle = buf_handle->handle;
-+ r = drmCommandWriteRead(buf_handle->dev->fd, DRM_AMDGPU_GEM_DGMA,
-+ &args, sizeof(args));
-+ if (r)
-+ return r;
-+
-+ *phys_address = args.addr;
-+ return 0;
-+}
-+
- int amdgpu_bo_free(amdgpu_bo_handle buf_handle)
- {
- /* Just drop the reference. */
-diff --git a/include/drm/amdgpu_drm.h b/include/drm/amdgpu_drm.h
-index 14d800e..413a9dc 100644
---- a/include/drm/amdgpu_drm.h
-+++ b/include/drm/amdgpu_drm.h
-@@ -47,6 +47,7 @@
- #define DRM_AMDGPU_GEM_OP 0x10
- #define DRM_AMDGPU_GEM_USERPTR 0x11
- /* hybrid specific ioctls */
-+#define DRM_AMDGPU_GEM_DGMA 0x5c
- #define DRM_AMDGPU_FREESYNC 0x5d
- #define DRM_AMDGPU_WAIT_FENCES 0x5e
- #define DRM_AMDGPU_GEM_FIND_BO 0x5f
-@@ -64,6 +65,7 @@
- #define DRM_IOCTL_AMDGPU_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_OP, struct drm_amdgpu_gem_op)
- #define DRM_IOCTL_AMDGPU_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_USERPTR, struct drm_amdgpu_gem_userptr)
- /* hybrid specific ioctls */
-+#define DRM_IOCTL_AMDGPU_GEM_DGMA DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_DGMA, struct drm_amdgpu_gem_dgma)
- #define DRM_IOCTL_AMDGPU_FREESYNC DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FREESYNC, struct drm_amdgpu_freesync)
- #define DRM_IOCTL_AMDGPU_WAIT_FENCES DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_FENCES, union drm_amdgpu_wait_fences)
- #define DRM_IOCTL_AMDGPU_GEM_FIND_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_FIND_BO, struct drm_amdgpu_gem_find_bo)
-@@ -74,6 +76,7 @@
- #define AMDGPU_GEM_DOMAIN_GDS 0x8
- #define AMDGPU_GEM_DOMAIN_GWS 0x10
- #define AMDGPU_GEM_DOMAIN_OA 0x20
-+#define AMDGPU_GEM_DOMAIN_DGMA 0x40
-
- /* Flag that CPU access will be required for the case of VRAM domain */
- #define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0)
-@@ -209,6 +212,15 @@ struct drm_amdgpu_gem_userptr {
- uint32_t handle;
- };
-
-+#define AMDGPU_GEM_DGMA_IMPORT 0
-+#define AMDGPU_GEM_DGMA_QUERY_PHYS_ADDR 1
-+struct drm_amdgpu_gem_dgma {
-+ uint64_t addr;
-+ uint64_t size;
-+ uint32_t op;
-+ uint32_t handle;
-+};
-+
- struct drm_amdgpu_gem_find_bo {
- uint64_t addr;
- uint64_t size;
---
-2.7.4
-