diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0307-drm-amdgpu-use-separate-scheduler-entity-for-VCE-sub.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0307-drm-amdgpu-use-separate-scheduler-entity-for-VCE-sub.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0307-drm-amdgpu-use-separate-scheduler-entity-for-VCE-sub.patch b/common/recipes-kernel/linux/files/0307-drm-amdgpu-use-separate-scheduler-entity-for-VCE-sub.patch new file mode 100644 index 00000000..62def6ed --- /dev/null +++ b/common/recipes-kernel/linux/files/0307-drm-amdgpu-use-separate-scheduler-entity-for-VCE-sub.patch @@ -0,0 +1,83 @@ +From b34557f0e92a2845169ae3bbda078d120e702722 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Wed, 10 Feb 2016 17:43:00 +0100 +Subject: [PATCH 0307/1110] drm/amdgpu: use separate scheduler entity for VCE + submissions +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This allows us to remove the kernel context and use a better +priority for the submissions. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 16 +++++++++++++++- + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 5db8e71..84ee4fe 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -1633,6 +1633,7 @@ struct amdgpu_vce { + struct amdgpu_ring ring[AMDGPU_MAX_VCE_RINGS]; + struct amdgpu_irq_src irq; + unsigned harvest_config; ++ struct amd_sched_entity entity; + }; + + /* +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +index 4239083..547e084 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +@@ -74,6 +74,8 @@ static void amdgpu_vce_idle_work_handler(struct work_struct *work); + */ + int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) + { ++ struct amdgpu_ring *ring; ++ struct amd_sched_rq *rq; + const char *fw_name; + const struct common_firmware_header *hdr; + unsigned ucode_version, version_major, version_minor, binary_id; +@@ -170,6 +172,16 @@ int amdgpu_vce_sw_init(struct amdgpu_device *adev, unsigned long size) + return r; + } + ++ ++ ring = &adev->vce.ring[0]; ++ rq = &ring->sched.sched_rq[AMD_SCHED_PRIORITY_NORMAL]; ++ r = amd_sched_entity_init(&ring->sched, &adev->vce.entity, ++ rq, amdgpu_sched_jobs); ++ if (r != 0) { ++ DRM_ERROR("Failed setting up VCE run queue.\n"); ++ return r; ++ } ++ + for (i = 0; i < AMDGPU_MAX_VCE_HANDLES; ++i) { + atomic_set(&adev->vce.handles[i], 0); + adev->vce.filp[i] = NULL; +@@ -190,6 +202,8 @@ int amdgpu_vce_sw_fini(struct amdgpu_device *adev) + if (adev->vce.vcpu_bo == NULL) + return 0; + ++ amd_sched_entity_fini(&adev->vce.ring[0].sched, &adev->vce.entity); ++ + amdgpu_bo_unref(&adev->vce.vcpu_bo); + + amdgpu_ring_fini(&adev->vce.ring[0]); +@@ -508,7 +522,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle, + + amdgpu_job_free(job); + } else { +- r = amdgpu_job_submit(job, ring, NULL, ++ r = amdgpu_job_submit(job, ring, &ring->adev->vce.entity, + AMDGPU_FENCE_OWNER_UNDEFINED, &f); + if (r) + goto err; +-- +2.7.4 + |