summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorPrike Liang <Prike.Liang@amd.com>2026-06-29 14:47:23 +0800
committerAlex Deucher <alexander.deucher@amd.com>2026-07-15 09:15:40 -0400
commit56f7ea845e7d42db1fed48a0ec58fa09b95fabd7 (patch)
treeb60cb08cffb94b8fb398fe9992301d21a8484fc9 /drivers/gpu
parenta5cd2fbe7b45fbd4e5c01d1411742df17395a043 (diff)
downloadlinux-56f7ea845e7d42db1fed48a0ec58fa09b95fabd7.tar.gz
linux-56f7ea845e7d42db1fed48a0ec58fa09b95fabd7.zip
drm/amdgpu: add RS64 local memory context array init/fini
Add amdgpu_mes_rs64mem_init() and amdgpu_mes_rs64mem_fini() to manage the RS64 local memory context arrays used by the MES scheduler. Signed-off-by: Prike Liang <Prike.Liang@amd.com> Reviewed-by: Michael Chen <michael.chen@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c44
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h7
2 files changed, 51 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
index c66e69b62361..8ba1c941c03d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c
@@ -921,6 +921,50 @@ int amdgpu_mes_update_enforce_isolation(struct amdgpu_device *adev)
return r;
}
+/**
+ * amdgpu_mes_rs64mem_init - initialize RS64 local memory context arrays
+ *
+ * @mes: MES instance
+ *
+ * Returns 0 on success, negative errno on failure.
+ */
+int amdgpu_mes_rs64mem_init(struct amdgpu_mes *mes)
+{
+ struct amdgpu_device *adev = container_of(mes, struct amdgpu_device, mes);
+ int r;
+
+ if (!mes->use_rs64mem)
+ return 0;
+
+ r = amdgpu_bo_create_kernel(adev, PAGE_SIZE, PAGE_SIZE,
+ AMDGPU_GEM_DOMAIN_GTT,
+ &mes->ctx_array_size_bo,
+ &mes->ctx_array_size_gpu_addr,
+ (void **)&mes->ctx_array_size_cpu_ptr);
+ if (r) {
+ dev_err(adev->dev,
+ "Failed to allocate ctx array size BO, r=%d\n", r);
+ return r;
+ }
+
+ memset(mes->ctx_array_size_cpu_ptr, 0, PAGE_SIZE);
+
+ return 0;
+}
+
+/**
+ * amdgpu_mes_rs64mem_fini - tear down RS64 local memory management
+ */
+void amdgpu_mes_rs64mem_fini(struct amdgpu_mes *mes)
+{
+ if (mes->ctx_array_size_bo) {
+ amdgpu_bo_free_kernel(&mes->ctx_array_size_bo,
+ &mes->ctx_array_size_gpu_addr,
+ (void **)&mes->ctx_array_size_cpu_ptr);
+ }
+ mes->use_rs64mem = false;
+}
+
#if defined(CONFIG_DEBUG_FS)
static int amdgpu_debugfs_mes_event_log_show(struct seq_file *m, void *unused)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
index 389e3324caea..520bcd8ee202 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h
@@ -171,6 +171,11 @@ struct amdgpu_mes {
bool compute_pipe_reset_enabled;
bool gfx_pipe_reset_enabled;
+
+ bool use_rs64mem;
+ struct amdgpu_bo *ctx_array_size_bo;
+ uint64_t ctx_array_size_gpu_addr;
+ uint32_t *ctx_array_size_cpu_ptr;
};
struct amdgpu_mes_hung_queue_hqd_info {
@@ -617,4 +622,6 @@ bool amdgpu_mes_queue_reset_by_mes_supported(struct amdgpu_device *adev);
int amdgpu_mes_update_enforce_isolation(struct amdgpu_device *adev);
+int amdgpu_mes_rs64mem_init(struct amdgpu_mes *mes);
+void amdgpu_mes_rs64mem_fini(struct amdgpu_mes *mes);
#endif /* __AMDGPU_MES_H__ */