]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdgpu: Add PSP fw version check for fw reserve GFX command
authorFrank Min <Frank.Min@amd.com>
Tue, 5 Aug 2025 14:30:54 +0000 (22:30 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 12 Aug 2025 20:07:31 +0000 (16:07 -0400)
The fw reserved GFX command is only supported starting from PSP fw
version 0x3a0e14 and 0x3b0e0d. Older versions do not support this command.

Add a version guard to ensure the command is only used when the running
PSP fw meets the minimum version requirement.

This ensures backward compatibility and safe operation across fw
revisions.

Fixes: a3b7f9c306e1 ("drm/amdgpu: reclaim psp fw reservation memory region")
Signed-off-by: Frank Min <Frank.Min@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 065e23170a1e09bc9104b761183e59562a029619)

drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c

index 0bd51a04be79820aa22a12b44000a34ec3ff04f5..23484317a5fa3bd161844e8f6c631a1b7231e68e 100644 (file)
@@ -1039,15 +1039,28 @@ int psp_update_fw_reservation(struct psp_context *psp)
 {
        int ret;
        uint64_t reserv_addr, reserv_addr_ext;
-       uint32_t reserv_size, reserv_size_ext;
+       uint32_t reserv_size, reserv_size_ext, mp0_ip_ver;
        struct amdgpu_device *adev = psp->adev;
 
+       mp0_ip_ver = amdgpu_ip_version(adev, MP0_HWIP, 0);
+
        if (amdgpu_sriov_vf(psp->adev))
                return 0;
 
-       if ((amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(14, 0, 2)) &&
-           (amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(14, 0, 3)))
+       switch (mp0_ip_ver) {
+       case IP_VERSION(14, 0, 2):
+               if (adev->psp.sos.fw_version < 0x3b0e0d)
+                       return 0;
+               break;
+
+       case IP_VERSION(14, 0, 3):
+               if (adev->psp.sos.fw_version < 0x3a0e14)
+                       return 0;
+               break;
+
+       default:
                return 0;
+       }
 
        ret = psp_get_fw_reservation_info(psp, GFX_CMD_ID_FB_FW_RESERV_ADDR, &reserv_addr, &reserv_size);
        if (ret)