From bc85e79bbac62815dfde6a6fe1719e23c1c01a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Mon, 11 Jul 2022 00:48:51 -0400 Subject: [PATCH] ac/gpu_info: require amdgpu DRM 3.15.0 (kernel 4.12) from July 2017 to match the radeon requirement Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/amd/common/ac_gpu_info.c | 58 +++++------------------ src/gallium/drivers/radeonsi/radeon_uvd.c | 2 +- src/gallium/drivers/radeonsi/si_get.c | 2 +- 3 files changed, 15 insertions(+), 47 deletions(-) diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c index d3f07bc1339..0c3163806b9 100644 --- a/src/amd/common/ac_gpu_info.c +++ b/src/amd/common/ac_gpu_info.c @@ -614,9 +614,9 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info) assert(info->drm_major == 3); info->is_amdgpu = true; - if (info->drm_minor < 2) { + if (info->drm_minor < 15) { fprintf(stderr, "amdgpu: DRM version is %u.%u.%u, but this driver is " - "only compatible with 3.2.0 (kernel 4.7) or later.\n", + "only compatible with 3.15.0 (kernel 4.12) or later.\n", info->drm_major, info->drm_minor, info->drm_patchlevel); return false; } @@ -727,51 +727,19 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info) return false; } - if (info->drm_minor >= 9) { - struct drm_amdgpu_memory_info meminfo = {0}; + struct drm_amdgpu_memory_info meminfo = {0}; - r = amdgpu_query_info(dev, AMDGPU_INFO_MEMORY, sizeof(meminfo), &meminfo); - if (r) { - fprintf(stderr, "amdgpu: amdgpu_query_info(memory) failed.\n"); - return false; - } - - /* Note: usable_heap_size values can be random and can't be relied on. */ - info->gart_size_kb = DIV_ROUND_UP(meminfo.gtt.total_heap_size, 1024); - info->vram_size_kb = DIV_ROUND_UP(fix_vram_size(meminfo.vram.total_heap_size), 1024); - info->vram_vis_size_kb = DIV_ROUND_UP(meminfo.cpu_accessible_vram.total_heap_size, 1024); - } else { - /* This is a deprecated interface, which reports usable sizes - * (total minus pinned), but the pinned size computation is - * buggy, so the values returned from these functions can be - * random. - */ - struct amdgpu_heap_info vram, vram_vis, gtt; - - r = amdgpu_query_heap_info(dev, AMDGPU_GEM_DOMAIN_VRAM, 0, &vram); - if (r) { - fprintf(stderr, "amdgpu: amdgpu_query_heap_info(vram) failed.\n"); - return false; - } - - r = amdgpu_query_heap_info(dev, AMDGPU_GEM_DOMAIN_VRAM, AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED, - &vram_vis); - if (r) { - fprintf(stderr, "amdgpu: amdgpu_query_heap_info(vram_vis) failed.\n"); - return false; - } - - r = amdgpu_query_heap_info(dev, AMDGPU_GEM_DOMAIN_GTT, 0, >t); - if (r) { - fprintf(stderr, "amdgpu: amdgpu_query_heap_info(gtt) failed.\n"); - return false; - } - - info->gart_size_kb = DIV_ROUND_UP(gtt.heap_size, 1024); - info->vram_size_kb = DIV_ROUND_UP(fix_vram_size(vram.heap_size), 1024); - info->vram_vis_size_kb = DIV_ROUND_UP(vram_vis.heap_size, 1024); + r = amdgpu_query_info(dev, AMDGPU_INFO_MEMORY, sizeof(meminfo), &meminfo); + if (r) { + fprintf(stderr, "amdgpu: amdgpu_query_info(memory) failed.\n"); + return false; } + /* Note: usable_heap_size values can be random and can't be relied on. */ + info->gart_size_kb = DIV_ROUND_UP(meminfo.gtt.total_heap_size, 1024); + info->vram_size_kb = DIV_ROUND_UP(fix_vram_size(meminfo.vram.total_heap_size), 1024); + info->vram_vis_size_kb = DIV_ROUND_UP(meminfo.cpu_accessible_vram.total_heap_size, 1024); + if (info->drm_minor >= 41) { amdgpu_query_video_caps_info(dev, AMDGPU_INFO_VIDEO_CAPS_DECODE, sizeof(info->dec_caps), &(info->dec_caps)); @@ -969,7 +937,7 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info) /* Disable sparse mappings on GFX6 due to VM faults in CP DMA. Enable them once * these faults are mitigated in software. */ - info->has_sparse_vm_mappings = info->gfx_level >= GFX7 && info->drm_minor >= 13; + info->has_sparse_vm_mappings = info->gfx_level >= GFX7; info->has_scheduled_fence_dependency = info->drm_minor >= 28; info->mid_command_buffer_preemption_enabled = device_info.ids_flags & AMDGPU_IDS_FLAGS_PREEMPTION; info->has_tmz_support = has_tmz_support(dev, info, device_info.ids_flags); diff --git a/src/gallium/drivers/radeonsi/radeon_uvd.c b/src/gallium/drivers/radeonsi/radeon_uvd.c index f5d30a78ab1..c8b8cf54096 100644 --- a/src/gallium/drivers/radeonsi/radeon_uvd.c +++ b/src/gallium/drivers/radeonsi/radeon_uvd.c @@ -1317,7 +1317,7 @@ struct pipe_video_codec *si_common_uvd_create_decoder(struct pipe_context *conte si_vid_clear_buffer(context, &dec->ctx); } - if (sctx->family >= CHIP_POLARIS10 && sctx->screen->info.drm_minor >= 3) { + if (sctx->family >= CHIP_POLARIS10) { if (!si_vid_create_buffer(dec->screen, &dec->sessionctx, UVD_SESSION_CONTEXT_SIZE, PIPE_USAGE_DEFAULT)) { RVID_ERR("Can't allocated session ctx.\n"); diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index a1115b08580..20243b4d6b3 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -997,7 +997,7 @@ static void si_query_memory_info(struct pipe_screen *screen, struct pipe_memory_ info->device_memory_evicted = ws->query_value(ws, RADEON_NUM_BYTES_MOVED) / 1024; - if (sscreen->info.is_amdgpu && sscreen->info.drm_minor >= 4) + if (sscreen->info.is_amdgpu) info->nr_device_memory_evictions = ws->query_value(ws, RADEON_NUM_EVICTIONS); else /* Just return the number of evicted 64KB pages. */