]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: Check SQ_CONFIG register support on SRIOV
authorTony Yi <Tony.Yi@amd.com>
Mon, 9 Jun 2025 19:09:28 +0000 (14:09 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 16 Jul 2025 20:14:21 +0000 (16:14 -0400)
On SRIOV environments, check if RLCG supports
SQ_CONFIG register programming.

Signed-off-by: Tony Yi <Tony.Yi@amd.com>
Reviewed-by: Zhigang Luo <zhigang.luo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h
drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h
drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c

index 9320461bb4860e45ff3617aeb566f7f7934f5d64..3da3ebb1d9a134132643e1b82a9595c3232e1222 100644 (file)
@@ -152,8 +152,10 @@ enum AMDGIM_REG_ACCESS_FLAG {
        AMDGIM_FEATURE_MMHUB_REG_RLC_EN   = (1 << 1),
        /* Use RLC to program GC regs */
        AMDGIM_FEATURE_GC_REG_RLC_EN      = (1 << 2),
-       /* Use PSP to program L1_TLB_CNTL*/
+       /* Use PSP to program L1_TLB_CNTL */
        AMDGIM_FEATURE_L1_TLB_CNTL_PSP_EN = (1 << 3),
+       /* Use RLCG to program SQ_CONFIG1 */
+       AMDGIM_FEATURE_REG_ACCESS_SQ_CONFIG = (1 << 4),
 };
 
 struct amdgim_pf2vf_info_v1 {
@@ -346,6 +348,10 @@ struct amdgpu_video_codec_info;
 #define amdgpu_sriov_rlcg_error_report_enabled(adev) \
         (amdgpu_sriov_reg_indirect_mmhub(adev) || amdgpu_sriov_reg_indirect_gc(adev))
 
+#define amdgpu_sriov_reg_access_sq_config(adev) \
+(amdgpu_sriov_vf((adev)) && \
+       ((adev)->virt.reg_access & (AMDGIM_FEATURE_REG_ACCESS_SQ_CONFIG)))
+
 #define amdgpu_passthrough(adev) \
 ((adev)->virt.caps & AMDGPU_PASSTHROUGH_MODE)
 
index 92ca13097aaa8726c6ef3a5594900b64ae8aad5c..33edad1f9dcd6d292663e3717936a44de8871c72 100644 (file)
@@ -113,7 +113,8 @@ union amd_sriov_reg_access_flags {
                uint32_t vf_reg_access_mmhub            : 1;
                uint32_t vf_reg_access_gc               : 1;
                uint32_t vf_reg_access_l1_tlb_cntl      : 1;
-               uint32_t reserved                       : 28;
+               uint32_t vf_reg_access_sq_config        : 1;
+               uint32_t reserved                       : 27;
        } flags;
        uint32_t all;
 };
index 3c10595125e0c4185accfe926b7a4f57b837f026..7314ad08fde3129cbde7e7904a80634795bf2bba 100644 (file)
@@ -1351,7 +1351,9 @@ static void gfx_v9_4_3_constants_init(struct amdgpu_device *adev)
        switch (amdgpu_ip_version(adev, GC_HWIP, 0)) {
        /* ToDo: GC 9.4.4 */
        case IP_VERSION(9, 4, 3):
-               if (adev->gfx.mec_fw_version >= 184)
+               if (adev->gfx.mec_fw_version >= 184 &&
+                   (amdgpu_sriov_reg_access_sq_config(adev) ||
+                    !amdgpu_sriov_vf(adev)))
                        adev->gmc.xnack_flags |= AMDGPU_GMC_XNACK_FLAG_CHAIN;
                break;
        case IP_VERSION(9, 5, 0):