[PATCH 1/2] drm/amdgpu/gfx9: Enable Cleaner Shader for GFX9.4.2 Hardware

Alex Deucher alexdeucher at gmail.com
Thu Oct 17 16:16:03 UTC 2024


On Thu, Oct 17, 2024 at 2:49 AM Srinivasan Shanmugam
<srinivasan.shanmugam at amd.com> wrote:
>
> This patch adds support for the cleaner shader feature onto GFX9.4.2
> hardware, as part of the leftover locals feature. The cleaner shader is
> important for ensuring process isolation and maintaining KGD/KFD
> serialization by clearing GPU memory before it is reused.
>
> The patch updates the `gfx_v9_0_sw_init` function to initialize the
> cleaner shader if the MEC firmware version is 88 or higher. It sets the
> `cleaner_shader_ptr` and `cleaner_shader_size` to the appropriate values
> and attempts to initialize the cleaner shader.
>
> This change ensures that the GPU memory is properly cleared between
> different processes, preventing data leakage and enhancing security. It
> also aligns with the serialization mechanism between KGD and KFD,
> ensuring that the GPU state is consistent across different workloads.
>
> Cc: Christian König <christian.koenig at amd.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam at amd.com>

You could probably merge these two patches into one or if you prefer,
switch the order of the patches.  Otherwise, if you only apply patch
1, the code will work, but the shader will be invalid.  Either way:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c                | 12 ++++++++++++
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_0_cleaner_shader.h |  7 ++++++-
>  2 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index b4c4b9916289..66947850d7e4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -2223,6 +2223,18 @@ static int gfx_v9_0_sw_init(struct amdgpu_ip_block *ip_block)
>         }
>
>         switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
> +       case IP_VERSION(9, 4, 2):
> +               adev->gfx.cleaner_shader_ptr = gfx_9_4_2_cleaner_shader_hex;
> +               adev->gfx.cleaner_shader_size = sizeof(gfx_9_4_2_cleaner_shader_hex);
> +               if (adev->gfx.mec_fw_version >= 88) {
> +                       adev->gfx.enable_cleaner_shader = true;
> +                       r = amdgpu_gfx_cleaner_shader_sw_init(adev, adev->gfx.cleaner_shader_size);
> +                       if (r) {
> +                               adev->gfx.enable_cleaner_shader = false;
> +                               dev_err(adev->dev, "Failed to initialize cleaner shader\n");
> +                       }
> +               }
> +               break;
>         default:
>                 adev->gfx.enable_cleaner_shader = false;
>                 break;
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0_cleaner_shader.h b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0_cleaner_shader.h
> index 36c0292b5110..cfb73e729b0a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0_cleaner_shader.h
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0_cleaner_shader.h
> @@ -1,6 +1,6 @@
>  /* SPDX-License-Identifier: MIT */
>  /*
> - * Copyright 2018 Advanced Micro Devices, Inc.
> + * Copyright 2024 Advanced Micro Devices, Inc.
>   *
>   * Permission is hereby granted, free of charge, to any person obtaining a
>   * copy of this software and associated documentation files (the "Software"),
> @@ -24,3 +24,8 @@
>  static const u32 __maybe_unused gfx_9_0_cleaner_shader_hex[] = {
>         /* Add the cleaner shader code here */
>  };
> +
> +/* Define the cleaner shader gfx_9_4_2 */
> +static const u32 __maybe_unused gfx_9_4_2_cleaner_shader_hex[] = {
> +       /* Add the cleaner shader code here */
> +};
> --
> 2.34.1
>


More information about the amd-gfx mailing list