diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3122-drm-amdgpu-Fix-hard-hang-for-S-G-display-BOs.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3122-drm-amdgpu-Fix-hard-hang-for-S-G-display-BOs.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3122-drm-amdgpu-Fix-hard-hang-for-S-G-display-BOs.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3122-drm-amdgpu-Fix-hard-hang-for-S-G-display-BOs.patch new file mode 100644 index 00000000..ea5f57d4 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3122-drm-amdgpu-Fix-hard-hang-for-S-G-display-BOs.patch @@ -0,0 +1,69 @@ +From 0896382d968bf924ae82d06e1077384094abb61d Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <andrey.grodzovsky@amd.com> +Date: Mon, 15 Jul 2019 18:04:08 -0400 +Subject: [PATCH 3122/4256] drm/amdgpu: Fix hard hang for S/G display BOs. + +HW requires for caching to be unset for scanout BO +mappings when the BO placement is in GTT memory. +Usually the flag to unset is passed from user mode +but for FB mode this was missing. + +v2: +Keep all BO placement logic in amdgpu_display_supported_domains + +Suggested-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Tested-by: Shirish S <shirish.s@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 7 +++---- + drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 ++- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +index 5cbde74b97dd..ce594ef5af4d 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c +@@ -139,14 +139,14 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, + mode_cmd->pitches[0] = amdgpu_align_pitch(adev, mode_cmd->width, cpp, + fb_tiled); + domain = amdgpu_display_supported_domains(adev); +- + height = ALIGN(mode_cmd->height, 8); + size = mode_cmd->pitches[0] * height; + aligned_size = ALIGN(size, PAGE_SIZE); + ret = amdgpu_gem_object_create(adev, aligned_size, 0, domain, + AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | +- AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | +- AMDGPU_GEM_CREATE_VRAM_CLEARED, ++ AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS | ++ AMDGPU_GEM_CREATE_VRAM_CLEARED | ++ AMDGPU_GEM_CREATE_CPU_GTT_USWC, + ttm_bo_type_kernel, NULL, &gobj); + if (ret) { + pr_err("failed to allocate framebuffer (%d)\n", aligned_size); +@@ -168,7 +168,6 @@ static int amdgpufb_create_pinned_object(struct amdgpu_fbdev *rfbdev, + dev_err(adev->dev, "FB failed to set tiling flags\n"); + } + +- + ret = amdgpu_bo_pin(abo, domain); + if (ret) { + amdgpu_bo_unreserve(abo); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +index 1ae59641d23f..1b51194036b5 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +@@ -829,7 +829,8 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv, + struct amdgpu_device *adev = dev->dev_private; + struct drm_gem_object *gobj; + uint32_t handle; +- u64 flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; ++ u64 flags = AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED | ++ AMDGPU_GEM_CREATE_CPU_GTT_USWC; + u32 domain; + int r; + +-- +2.17.1 + |