aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5382-drm-amdgpu-move-context-related-stuff-to-amdgpu_ctx..patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5382-drm-amdgpu-move-context-related-stuff-to-amdgpu_ctx..patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5382-drm-amdgpu-move-context-related-stuff-to-amdgpu_ctx..patch251
1 files changed, 251 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5382-drm-amdgpu-move-context-related-stuff-to-amdgpu_ctx..patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5382-drm-amdgpu-move-context-related-stuff-to-amdgpu_ctx..patch
new file mode 100644
index 00000000..bed7eac5
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5382-drm-amdgpu-move-context-related-stuff-to-amdgpu_ctx..patch
@@ -0,0 +1,251 @@
+From 1d42babc16089c12bb60a35c9726619ce7d9d05d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Wed, 18 Jul 2018 16:34:49 +0200
+Subject: [PATCH 5382/5725] drm/amdgpu: move context related stuff to
+ amdgpu_ctx.h
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Further unmangle amdgpu.h.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
+Reviewed-by: Huang Rui <ray.huang@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu.h | 75 +----------------------
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h | 100 +++++++++++++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 1 +
+ 3 files changed, 103 insertions(+), 73 deletions(-)
+ create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+index 7a8b8fe..c7736d0 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+@@ -28,6 +28,8 @@
+ #ifndef __AMDGPU_H__
+ #define __AMDGPU_H__
+
++#include "amdgpu_ctx.h"
++
+ #include <linux/atomic.h>
+ #include <linux/wait.h>
+ #include <linux/list.h>
+@@ -233,8 +235,6 @@ int amdgpu_device_ip_wait_for_idle(struct amdgpu_device *adev,
+ bool amdgpu_device_ip_is_idle(struct amdgpu_device *adev,
+ enum amd_ip_block_type block_type);
+
+-#define AMDGPU_MAX_IP_NUM 16
+-
+ struct amdgpu_ip_block_status {
+ bool valid;
+ bool sw;
+@@ -496,20 +496,6 @@ struct amdgpu_ib {
+
+ extern const struct drm_sched_backend_ops amdgpu_sched_ops;
+
+-/*
+- * Queue manager
+- */
+-struct amdgpu_queue_mapper {
+- int hw_ip;
+- struct mutex lock;
+- /* protected by lock */
+- struct amdgpu_ring *queue_map[AMDGPU_MAX_RINGS];
+-};
+-
+-struct amdgpu_queue_mgr {
+- struct amdgpu_queue_mapper mapper[AMDGPU_MAX_IP_NUM];
+-};
+-
+ int amdgpu_queue_mgr_init(struct amdgpu_device *adev,
+ struct amdgpu_queue_mgr *mgr);
+ int amdgpu_queue_mgr_fini(struct amdgpu_device *adev,
+@@ -520,63 +506,6 @@ int amdgpu_queue_mgr_map(struct amdgpu_device *adev,
+ struct amdgpu_ring **out_ring);
+
+ /*
+- * context related structures
+- */
+-
+-struct amdgpu_ctx_ring {
+- uint64_t sequence;
+- struct dma_fence **fences;
+- struct drm_sched_entity entity;
+- struct list_head sem_dep_list;
+- struct mutex sem_lock;
+-};
+-
+-struct amdgpu_ctx {
+- struct kref refcount;
+- struct amdgpu_device *adev;
+- struct amdgpu_queue_mgr queue_mgr;
+- unsigned reset_counter;
+- unsigned reset_counter_query;
+- uint32_t vram_lost_counter;
+- spinlock_t ring_lock;
+- struct dma_fence **fences;
+- struct amdgpu_ctx_ring rings[AMDGPU_MAX_RINGS];
+- bool preamble_presented;
+- enum drm_sched_priority init_priority;
+- enum drm_sched_priority override_priority;
+- struct mutex lock;
+- atomic_t guilty;
+-};
+-
+-struct amdgpu_ctx_mgr {
+- struct amdgpu_device *adev;
+- struct mutex lock;
+- /* protected by lock */
+- struct idr ctx_handles;
+-};
+-
+-struct amdgpu_ctx *amdgpu_ctx_get(struct amdgpu_fpriv *fpriv, uint32_t id);
+-int amdgpu_ctx_put(struct amdgpu_ctx *ctx);
+-
+-void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx, struct amdgpu_ring *ring,
+- struct dma_fence *fence, uint64_t *seq);
+-struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
+- struct amdgpu_ring *ring, uint64_t seq);
+-void amdgpu_ctx_priority_override(struct amdgpu_ctx *ctx,
+- enum drm_sched_priority priority);
+-
+-int amdgpu_ctx_ioctl(struct drm_device *dev, void *data,
+- struct drm_file *filp);
+-
+-int amdgpu_ctx_wait_prev_fence(struct amdgpu_ctx *ctx, unsigned ring_id);
+-
+-void amdgpu_ctx_mgr_init(struct amdgpu_ctx_mgr *mgr);
+-void amdgpu_ctx_mgr_entity_fini(struct amdgpu_ctx_mgr *mgr);
+-void amdgpu_ctx_mgr_entity_flush(struct amdgpu_ctx_mgr *mgr);
+-void amdgpu_ctx_mgr_fini(struct amdgpu_ctx_mgr *mgr);
+-
+-
+-/*
+ * file private structure
+ */
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
+new file mode 100644
+index 0000000..b6eecc4
+--- /dev/null
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.h
+@@ -0,0 +1,100 @@
++/*
++ * Copyright 2018 Advanced Micro Devices, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++#ifndef __AMDGPU_CTX_H__
++#define __AMDGPU_CTX_H__
++
++#include "amdgpu_ring.h"
++
++struct drm_device;
++struct drm_file;
++struct amdgpu_fpriv;
++
++#define AMDGPU_MAX_IP_NUM 16
++
++/*
++ * Queue manager
++ */
++struct amdgpu_queue_mapper {
++ int hw_ip;
++ struct mutex lock;
++ /* protected by lock */
++ struct amdgpu_ring *queue_map[AMDGPU_MAX_RINGS];
++};
++
++struct amdgpu_queue_mgr {
++ struct amdgpu_queue_mapper mapper[AMDGPU_MAX_IP_NUM];
++};
++
++struct amdgpu_ctx_ring {
++ uint64_t sequence;
++ struct dma_fence **fences;
++ struct drm_sched_entity entity;
++ struct list_head sem_dep_list;
++ struct mutex sem_lock;
++};
++
++struct amdgpu_ctx {
++ struct kref refcount;
++ struct amdgpu_device *adev;
++ struct amdgpu_queue_mgr queue_mgr;
++ unsigned reset_counter;
++ unsigned reset_counter_query;
++ uint32_t vram_lost_counter;
++ spinlock_t ring_lock;
++ struct dma_fence **fences;
++ struct amdgpu_ctx_ring rings[AMDGPU_MAX_RINGS];
++ bool preamble_presented;
++ enum drm_sched_priority init_priority;
++ enum drm_sched_priority override_priority;
++ struct mutex lock;
++ atomic_t guilty;
++};
++
++struct amdgpu_ctx_mgr {
++ struct amdgpu_device *adev;
++ struct mutex lock;
++ /* protected by lock */
++ struct idr ctx_handles;
++};
++
++struct amdgpu_ctx *amdgpu_ctx_get(struct amdgpu_fpriv *fpriv, uint32_t id);
++int amdgpu_ctx_put(struct amdgpu_ctx *ctx);
++
++void amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx, struct amdgpu_ring *ring,
++ struct dma_fence *fence, uint64_t *seq);
++struct dma_fence *amdgpu_ctx_get_fence(struct amdgpu_ctx *ctx,
++ struct amdgpu_ring *ring, uint64_t seq);
++void amdgpu_ctx_priority_override(struct amdgpu_ctx *ctx,
++ enum drm_sched_priority priority);
++
++int amdgpu_ctx_ioctl(struct drm_device *dev, void *data,
++ struct drm_file *filp);
++
++int amdgpu_ctx_wait_prev_fence(struct amdgpu_ctx *ctx, unsigned ring_id);
++
++void amdgpu_ctx_mgr_init(struct amdgpu_ctx_mgr *mgr);
++void amdgpu_ctx_mgr_entity_fini(struct amdgpu_ctx_mgr *mgr);
++void amdgpu_ctx_mgr_entity_flush(struct amdgpu_ctx_mgr *mgr);
++void amdgpu_ctx_mgr_fini(struct amdgpu_ctx_mgr *mgr);
++
++#endif
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+index 6467c9c..a42130e 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+@@ -27,6 +27,7 @@
+ #include <drm/amdgpu_drm.h>
+ #include <drm/gpu_scheduler.h>
+ #include <drm/drm_print.h>
++#include <drm/drmP.h>
+
+ /* max number of rings */
+ #define AMDGPU_MAX_RINGS 21
+--
+2.7.4
+