drm/amdgpu: add get_gfx_shadow_info callback for gfx11
authorAlex Deucher <alexander.deucher@amd.com>
Thu, 9 Mar 2023 20:10:14 +0000 (15:10 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 24 Apr 2023 22:16:38 +0000 (18:16 -0400)
Used to get the size and alignment requirements for
the gfx shadow buffer for preemption.

v2: use FW version check to determine whether to
    return a valid size here
    return an error if not supported (Alex)
v3: drop GDS (Alex)
v4: make amdgpu_gfx_shadow_info mandatory (Alex)

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c

index b8b2886..543af07 100644 (file)
@@ -818,6 +818,27 @@ static void gfx_v11_0_select_me_pipe_q(struct amdgpu_device *adev,
        soc21_grbm_select(adev, me, pipe, q, vm);
 }
 
+/* all sizes are in bytes */
+#define MQD_SHADOW_BASE_SIZE      73728
+#define MQD_SHADOW_BASE_ALIGNMENT 256
+#define MQD_FWWORKAREA_SIZE       484
+#define MQD_FWWORKAREA_ALIGNMENT  256
+
+static int gfx_v11_0_get_gfx_shadow_info(struct amdgpu_device *adev,
+                                        struct amdgpu_gfx_shadow_info *shadow_info)
+{
+       if (adev->gfx.cp_gfx_shadow) {
+               shadow_info->shadow_size = MQD_SHADOW_BASE_SIZE;
+               shadow_info->shadow_alignment = MQD_SHADOW_BASE_ALIGNMENT;
+               shadow_info->csa_size = MQD_FWWORKAREA_SIZE;
+               shadow_info->csa_alignment = MQD_FWWORKAREA_ALIGNMENT;
+               return 0;
+       } else {
+               memset(shadow_info, 0, sizeof(struct amdgpu_gfx_shadow_info));
+               return -ENOTSUPP;
+       }
+}
+
 static const struct amdgpu_gfx_funcs gfx_v11_0_gfx_funcs = {
        .get_gpu_clock_counter = &gfx_v11_0_get_gpu_clock_counter,
        .select_se_sh = &gfx_v11_0_select_se_sh,
@@ -826,6 +847,7 @@ static const struct amdgpu_gfx_funcs gfx_v11_0_gfx_funcs = {
        .read_wave_vgprs = &gfx_v11_0_read_wave_vgprs,
        .select_me_pipe_q = &gfx_v11_0_select_me_pipe_q,
        .update_perfmon_mgcg = &gfx_v11_0_update_perf_clk,
+       .get_gfx_shadow_info = &gfx_v11_0_get_gfx_shadow_info,
 };
 
 static int gfx_v11_0_gpu_early_init(struct amdgpu_device *adev)