| From fa61a7422cf4c598590bf65e9ebd5ac0a97491d5 Mon Sep 17 00:00:00 2001 |
| From: Alex Deucher <alexander.deucher@amd.com> |
| Date: Thu, 14 Nov 2019 11:39:05 -0500 |
| Subject: [PATCH] drm/amdgpu: disable gfxoff when using register read interface |
| |
| commit c57040d333c6729ce99c2cb95061045ff84c89ea upstream. |
| |
| When gfxoff is enabled, accessing gfx registers via MMIO |
| can lead to a hang. |
| |
| Bug: https://bugzilla.kernel.org/show_bug.cgi?id=205497 |
| Acked-by: Xiaojie Yuan <xiaojie.yuan@amd.com> |
| Reviewed-by: Evan Quan <evan.quan@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |
| index 8709ed53987b..b3c9ab4e4a55 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |
| @@ -635,15 +635,19 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file |
| return -ENOMEM; |
| alloc_size = info->read_mmr_reg.count * sizeof(*regs); |
| |
| - for (i = 0; i < info->read_mmr_reg.count; i++) |
| + amdgpu_gfx_off_ctrl(adev, false); |
| + for (i = 0; i < info->read_mmr_reg.count; i++) { |
| if (amdgpu_asic_read_register(adev, se_num, sh_num, |
| info->read_mmr_reg.dword_offset + i, |
| ®s[i])) { |
| DRM_DEBUG_KMS("unallowed offset %#x\n", |
| info->read_mmr_reg.dword_offset + i); |
| kfree(regs); |
| + amdgpu_gfx_off_ctrl(adev, true); |
| return -EFAULT; |
| } |
| + } |
| + amdgpu_gfx_off_ctrl(adev, true); |
| n = copy_to_user(out, regs, min(size, alloc_size)); |
| kfree(regs); |
| return n ? -EFAULT : 0; |
| -- |
| 2.7.4 |
| |