diff options
Diffstat (limited to 'meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5450-drm-amdgpu-Halt-rlc-cp-in-rlc_safe_mode.patch')
-rw-r--r-- | meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5450-drm-amdgpu-Halt-rlc-cp-in-rlc_safe_mode.patch | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5450-drm-amdgpu-Halt-rlc-cp-in-rlc_safe_mode.patch b/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5450-drm-amdgpu-Halt-rlc-cp-in-rlc_safe_mode.patch deleted file mode 100644 index 6e8eec12..00000000 --- a/meta-r1000/recipes-kernel/linux/linux-yocto-4.14.71/5450-drm-amdgpu-Halt-rlc-cp-in-rlc_safe_mode.patch +++ /dev/null @@ -1,130 +0,0 @@ -From c1018454bdefbf260d083e897f846e8b4bdcbc90 Mon Sep 17 00:00:00 2001 -From: Rex Zhu <Rex.Zhu@amd.com> -Date: Tue, 11 Sep 2018 10:33:38 +0800 -Subject: [PATCH 5450/5725] drm/amdgpu: Halt rlc/cp in rlc_safe_mode - -before halt rlc/cp, need to -1. enter rlc safe mode -2. wait rlc/cp idle - -Acked-by: Alex Deucher <alexander.deucher@amd.com> -Signed-off-by: Hang Zhou <hang.zhou@amd.com> -Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 86 ++++++++++++++++++++++++----------- - 1 file changed, 59 insertions(+), 27 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -index d1c8311..a632c8d 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -@@ -5079,6 +5079,55 @@ static int gfx_v8_0_kcq_disable(struct amdgpu_device *adev) - return r; - } - -+static bool gfx_v8_0_is_idle(void *handle) -+{ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ if (REG_GET_FIELD(RREG32(mmGRBM_STATUS), GRBM_STATUS, GUI_ACTIVE) -+ || RREG32(mmGRBM_STATUS2) != 0x8) -+ return false; -+ else -+ return true; -+} -+ -+static bool gfx_v8_0_rlc_is_idle(void *handle) -+{ -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ if (RREG32(mmGRBM_STATUS2) != 0x8) -+ return false; -+ else -+ return true; -+} -+ -+static int gfx_v8_0_wait_for_rlc_idle(void *handle) -+{ -+ unsigned int i; -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ for (i = 0; i < adev->usec_timeout; i++) { -+ if (gfx_v8_0_rlc_is_idle(handle)) -+ return 0; -+ -+ udelay(1); -+ } -+ return -ETIMEDOUT; -+} -+ -+static int gfx_v8_0_wait_for_idle(void *handle) -+{ -+ unsigned int i; -+ struct amdgpu_device *adev = (struct amdgpu_device *)handle; -+ -+ for (i = 0; i < adev->usec_timeout; i++) { -+ if (gfx_v8_0_is_idle(handle)) -+ return 0; -+ -+ udelay(1); -+ } -+ return -ETIMEDOUT; -+} -+ - static int gfx_v8_0_hw_fini(void *handle) - { - struct amdgpu_device *adev = (struct amdgpu_device *)handle; -@@ -5097,9 +5146,16 @@ static int gfx_v8_0_hw_fini(void *handle) - pr_debug("For SRIOV client, shouldn't do anything.\n"); - return 0; - } -- gfx_v8_0_cp_enable(adev, false); -- gfx_v8_0_rlc_stop(adev); -- -+ adev->gfx.rlc.funcs->enter_safe_mode(adev); -+ if (!gfx_v8_0_wait_for_idle(adev)) -+ gfx_v8_0_cp_enable(adev, false); -+ else -+ pr_err("cp is busy, skip halt cp\n"); -+ if (!gfx_v8_0_wait_for_rlc_idle(adev)) -+ gfx_v8_0_rlc_stop(adev); -+ else -+ pr_err("rlc is busy, skip halt rlc\n"); -+ adev->gfx.rlc.funcs->exit_safe_mode(adev); - return 0; - } - -@@ -5120,30 +5176,6 @@ static int gfx_v8_0_resume(void *handle) - return r; - } - --static bool gfx_v8_0_is_idle(void *handle) --{ -- struct amdgpu_device *adev = (struct amdgpu_device *)handle; -- -- if (REG_GET_FIELD(RREG32(mmGRBM_STATUS), GRBM_STATUS, GUI_ACTIVE)) -- return false; -- else -- return true; --} -- --static int gfx_v8_0_wait_for_idle(void *handle) --{ -- unsigned i; -- struct amdgpu_device *adev = (struct amdgpu_device *)handle; -- -- for (i = 0; i < adev->usec_timeout; i++) { -- if (gfx_v8_0_is_idle(handle)) -- return 0; -- -- udelay(1); -- } -- return -ETIMEDOUT; --} -- - static bool gfx_v8_0_check_soft_reset(void *handle) - { - struct amdgpu_device *adev = (struct amdgpu_device *)handle; --- -2.7.4 - |