Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amdgpu/gfx10: Add Cleaner Shader Support for GFX10.3.x GPUs

Enable the cleaner shader for other GFX10.3.x series of GPUs to provide
data isolation between GPU workloads. The cleaner shader is responsible
for clearing the Local Data Store (LDS), Vector General Purpose
Registers (VGPRs), and Scalar General Purpose Registers (SGPRs), which
helps prevent data leakage and ensures accurate computation results.

This update extends cleaner shader support to GFX10.3.x GPUs, previously
available for GFX10.3.0. It enhances security by clearing GPU memory
between processes and maintains a consistent GPU state across KGD and
KFD workloads.

Cc: Mario Sopena-Novales <mario.novales@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Srinivasan Shanmugam and committed by
Alex Deucher
9eab2453 60d4952d

+30
+30
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
··· 4810 4810 } 4811 4811 break; 4812 4812 case IP_VERSION(10, 3, 0): 4813 + case IP_VERSION(10, 3, 1): 4813 4814 case IP_VERSION(10, 3, 2): 4815 + case IP_VERSION(10, 3, 3): 4814 4816 case IP_VERSION(10, 3, 4): 4815 4817 case IP_VERSION(10, 3, 5): 4816 4818 adev->gfx.cleaner_shader_ptr = gfx_10_3_0_cleaner_shader_hex; ··· 4820 4818 if (adev->gfx.me_fw_version >= 64 && 4821 4819 adev->gfx.pfp_fw_version >= 100 && 4822 4820 adev->gfx.mec_fw_version >= 122) { 4821 + adev->gfx.enable_cleaner_shader = true; 4822 + r = amdgpu_gfx_cleaner_shader_sw_init(adev, adev->gfx.cleaner_shader_size); 4823 + if (r) { 4824 + adev->gfx.enable_cleaner_shader = false; 4825 + dev_err(adev->dev, "Failed to initialize cleaner shader\n"); 4826 + } 4827 + } 4828 + break; 4829 + case IP_VERSION(10, 3, 6): 4830 + adev->gfx.cleaner_shader_ptr = gfx_10_3_0_cleaner_shader_hex; 4831 + adev->gfx.cleaner_shader_size = sizeof(gfx_10_3_0_cleaner_shader_hex); 4832 + if (adev->gfx.me_fw_version >= 14 && 4833 + adev->gfx.pfp_fw_version >= 17 && 4834 + adev->gfx.mec_fw_version >= 24) { 4835 + adev->gfx.enable_cleaner_shader = true; 4836 + r = amdgpu_gfx_cleaner_shader_sw_init(adev, adev->gfx.cleaner_shader_size); 4837 + if (r) { 4838 + adev->gfx.enable_cleaner_shader = false; 4839 + dev_err(adev->dev, "Failed to initialize cleaner shader\n"); 4840 + } 4841 + } 4842 + break; 4843 + case IP_VERSION(10, 3, 7): 4844 + adev->gfx.cleaner_shader_ptr = gfx_10_3_0_cleaner_shader_hex; 4845 + adev->gfx.cleaner_shader_size = sizeof(gfx_10_3_0_cleaner_shader_hex); 4846 + if (adev->gfx.me_fw_version >= 4 && 4847 + adev->gfx.pfp_fw_version >= 9 && 4848 + adev->gfx.mec_fw_version >= 12) { 4823 4849 adev->gfx.enable_cleaner_shader = true; 4824 4850 r = amdgpu_gfx_cleaner_shader_sw_init(adev, adev->gfx.cleaner_shader_size); 4825 4851 if (r) {