[Public] I think this may have already been fixed with this patch: https://gitlab.freedesktop.org/agd5f/linux/-/commit/2a7b9a8437130fd328001f4edfac8eec98dfe298
Alex ________________________________ From: Mahapatra, Rajib <rajib.mahapa...@amd.com> Sent: Thursday, August 26, 2021 2:07 PM To: Wentland, Harry <harry.wentl...@amd.com>; Kazlauskas, Nicholas <nicholas.kazlaus...@amd.com>; Deucher, Alexander <alexander.deuc...@amd.com>; Wu, Hersen <hersenxs...@amd.com> Cc: amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>; Mahapatra, Rajib <rajib.mahapa...@amd.com> Subject: [PATCH] drm/amd/display: Set the domain as GTT when VRAM size <= 32 MB [Why] In lower carve out (<= 32 MB) devices, it was unable to pin framebuffer in VRAM domain for some BO allocations. The device shows below error logs and sometimes it reboots too. amdgpu 0000:02:00.0: amdgpu: 00000000d721431c pin failed [drm:dm_plane_helper_prepare_fb] *ERROR* Failed to pin framebuffer with error -12 [How] Place the domain as GTT when VRAM size <= 32 MB. Signed-off-by: Rajib Mahapatra <rajib.mahapa...@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index dc3c6b3a00e5..d719be448eec 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -236,6 +236,7 @@ extern int amdgpu_num_kcq; #define AMDGPU_VM_MAX_NUM_CTX 4096 #define AMDGPU_SG_THRESHOLD (256*1024*1024) +#define AMDGPU_VRAM_MIN_THRESHOLD (32*1024*1024) #define AMDGPU_DEFAULT_GTT_SIZE_MB 3072ULL /* 3GB by default */ #define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS 3000 #define AMDGPU_MAX_USEC_TIMEOUT 100000 /* 100 ms */ diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index e1e57e7465a7..f71391599be1 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -7106,8 +7106,16 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane, return r; } - if (plane->type != DRM_PLANE_TYPE_CURSOR) + if (plane->type != DRM_PLANE_TYPE_CURSOR) { domain = amdgpu_display_supported_domains(adev, rbo->flags); + /* + * Handle devices with lower carve out. + */ + if (adev->gmc.real_vram_size <= AMDGPU_VRAM_MIN_THRESHOLD) { + domain |= (domain & AMDGPU_GEM_DOMAIN_GTT) ? domain : + AMDGPU_GEM_DOMAIN_GTT; + } + } else domain = AMDGPU_GEM_DOMAIN_VRAM; -- 2.25.1