]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amdgpu: Add fw_reserved reserve-region
authorLijo Lazar <lijo.lazar@amd.com>
Wed, 25 Mar 2026 11:47:10 +0000 (17:17 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 3 Apr 2026 17:49:47 +0000 (13:49 -0400)
Use reserve region helpers for initializing/reserving fw_reserved region.

Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h

index d39b695cd925967b98a8527e59b7cd6f55c8d54f..ee6c4b724146029474e461889893459232b5b569 100644 (file)
@@ -1076,14 +1076,15 @@ int psp_update_fw_reservation(struct psp_context *psp)
                return 0;
        }
 
-       amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory, NULL, NULL);
+       amdgpu_ttm_unmark_vram_reserved(adev, AMDGPU_RESV_FW);
 
        reserv_size = roundup(reserv_size, SZ_1M);
 
-       ret = amdgpu_bo_create_kernel_at(adev, reserv_addr, reserv_size, &adev->mman.fw_reserved_memory, NULL);
+       amdgpu_ttm_init_vram_resv(adev, AMDGPU_RESV_FW,
+                                 reserv_addr, reserv_size, false);
+       ret = amdgpu_ttm_mark_vram_reserved(adev, AMDGPU_RESV_FW);
        if (ret) {
                dev_err(adev->dev, "reserve fw region failed(%d)!\n", ret);
-               amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory, NULL, NULL);
                return ret;
        }
 
index 6edcb771329930d40bb0b5f12088e15547fbf466..6c644cfe6695d80cf61faf9c519f7613b52ee26b 100644 (file)
@@ -5726,7 +5726,7 @@ out:
 
 static void amdgpu_ras_critical_region_init(struct amdgpu_device *adev)
 {
-       amdgpu_ras_add_critical_region(adev, adev->mman.fw_reserved_memory);
+       amdgpu_ras_add_critical_region(adev, adev->mman.resv_region[AMDGPU_RESV_FW].bo);
 }
 
 static void amdgpu_ras_critical_region_fini(struct amdgpu_device *adev)
index 30e2478cf474a3345678f92f9d85c1440515a2e5..8758ec6f7809c1bea47f8b819134af9e325a29ff 100644 (file)
@@ -1913,13 +1913,12 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev)
                ctx->init = PSP_MEM_TRAIN_RESERVE_SUCCESS;
        }
 
-       ret = amdgpu_bo_create_kernel_at(
-               adev, adev->gmc.real_vram_size - reserve_size, reserve_size,
-               &adev->mman.fw_reserved_memory, NULL);
+       amdgpu_ttm_init_vram_resv(adev, AMDGPU_RESV_FW,
+                                 adev->gmc.real_vram_size - reserve_size,
+                                 reserve_size, false);
+       ret = amdgpu_ttm_mark_vram_reserved(adev, AMDGPU_RESV_FW);
        if (ret) {
                dev_err(adev->dev, "alloc tmr failed(%d)!\n", ret);
-               amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory, NULL,
-                                     NULL);
                return ret;
        }
 
@@ -2334,8 +2333,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
                amdgpu_ttm_unmark_vram_reserved(adev, AMDGPU_RESV_STOLEN_VGA);
                amdgpu_ttm_unmark_vram_reserved(adev, AMDGPU_RESV_STOLEN_EXTENDED);
                /* return the FW reserved memory back to VRAM */
-               amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory, NULL,
-                                     NULL);
+               amdgpu_ttm_unmark_vram_reserved(adev, AMDGPU_RESV_FW);
                amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory_extend, NULL,
                                      NULL);
                amdgpu_ttm_unmark_vram_reserved(adev, AMDGPU_RESV_STOLEN_RESERVED);
index 63e8a7fe441d81deba20f1fc4ff9a205b1d732a0..a03620d50838f7efa3108db7e84eaa4f7a70200e 100644 (file)
@@ -106,7 +106,6 @@ struct amdgpu_mman {
        bool                    keep_stolen_vga_memory;
 
        /* fw reserved memory */
-       struct amdgpu_bo                *fw_reserved_memory;
        struct amdgpu_bo                *fw_reserved_memory_extend;
 
        /* firmware VRAM reservation */