diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3616-drm-amdgpu-don-t-use-MM-idle_work-for-SRIOV-v2.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3616-drm-amdgpu-don-t-use-MM-idle_work-for-SRIOV-v2.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3616-drm-amdgpu-don-t-use-MM-idle_work-for-SRIOV-v2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3616-drm-amdgpu-don-t-use-MM-idle_work-for-SRIOV-v2.patch new file mode 100644 index 00000000..94870c17 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3616-drm-amdgpu-don-t-use-MM-idle_work-for-SRIOV-v2.patch @@ -0,0 +1,92 @@ +From 07625a961637a4cecf7e1419a7661057df78eb2c Mon Sep 17 00:00:00 2001 +From: Monk Liu <Monk.Liu@amd.com> +Date: Fri, 19 Jan 2018 20:29:17 +0800 +Subject: [PATCH 3616/4131] drm/amdgpu: don't use MM idle_work for SRIOV(v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +SRIOV doesn't give VF cg/pg feature so the MM's idle_work +is skipped for SR-IOV + +v2: +remove superfluous changes +since idle_work is not scheduled for SR-IOV so the condition +check for SR-IOV inside idle_work also can be dropped + +v3: +drop the SRIOV check in amdgpu_vce/uvd_suspend + +Change-Id: I6dd7ea48d23b0fee74ecb9e93b53bfe36b0e8164 +Signed-off-by: Monk Liu <Monk.Liu@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 9 ++++----- + drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 6 ++---- + 2 files changed, 6 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +index 2019e12..893daeb14 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +@@ -1117,9 +1117,6 @@ static void amdgpu_uvd_idle_work_handler(struct work_struct *work) + container_of(work, struct amdgpu_device, uvd.idle_work.work); + unsigned fences = amdgpu_fence_count_emitted(&adev->uvd.ring); + +- if (amdgpu_sriov_vf(adev)) +- return; +- + if (fences == 0) { + if (adev->pm.dpm_enabled) { + amdgpu_dpm_enable_uvd(adev, false); +@@ -1139,11 +1136,12 @@ static void amdgpu_uvd_idle_work_handler(struct work_struct *work) + void amdgpu_uvd_ring_begin_use(struct amdgpu_ring *ring) + { + struct amdgpu_device *adev = ring->adev; +- bool set_clocks = !cancel_delayed_work_sync(&adev->uvd.idle_work); ++ bool set_clocks; + + if (amdgpu_sriov_vf(adev)) + return; + ++ set_clocks = !cancel_delayed_work_sync(&adev->uvd.idle_work); + if (set_clocks) { + if (adev->pm.dpm_enabled) { + amdgpu_dpm_enable_uvd(adev, true); +@@ -1159,7 +1157,8 @@ void amdgpu_uvd_ring_begin_use(struct amdgpu_ring *ring) + + void amdgpu_uvd_ring_end_use(struct amdgpu_ring *ring) + { +- schedule_delayed_work(&ring->adev->uvd.idle_work, UVD_IDLE_TIMEOUT); ++ if (!amdgpu_sriov_vf(ring->adev)) ++ schedule_delayed_work(&ring->adev->uvd.idle_work, UVD_IDLE_TIMEOUT); + } + + /** +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +index fc5dcb2..c034b63 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +@@ -300,9 +300,6 @@ static void amdgpu_vce_idle_work_handler(struct work_struct *work) + container_of(work, struct amdgpu_device, vce.idle_work.work); + unsigned i, count = 0; + +- if (amdgpu_sriov_vf(adev)) +- return; +- + for (i = 0; i < adev->vce.num_rings; i++) + count += amdgpu_fence_count_emitted(&adev->vce.ring[i]); + +@@ -362,7 +359,8 @@ void amdgpu_vce_ring_begin_use(struct amdgpu_ring *ring) + */ + void amdgpu_vce_ring_end_use(struct amdgpu_ring *ring) + { +- schedule_delayed_work(&ring->adev->vce.idle_work, VCE_IDLE_TIMEOUT); ++ if (!amdgpu_sriov_vf(ring->adev)) ++ schedule_delayed_work(&ring->adev->vce.idle_work, VCE_IDLE_TIMEOUT); + } + + /** +-- +2.7.4 + |