use amdgpu_bo_create_vram_restricted_kernel to reserve bo at
specified position and keep the original data intact.

Signed-off-by: Horace Chen <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 44 ++++++------------------------
 1 file changed, 8 insertions(+), 36 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 2ff2c54..c0c6eab 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -687,45 +687,17 @@ int amdgpu_fw_reserve_vram_init(struct amdgpu_device 
*adev)
        adev->fw_vram_usage.reserved_bo = NULL;
 
        if (adev->fw_vram_usage.size > 0 &&
-               adev->fw_vram_usage.size <= vram_size) {
+           adev->fw_vram_usage.size <= vram_size) {
+               r = amdgpu_bo_create_vram_restricted_kernel(adev,
+                    adev->fw_vram_usage.start_offset,
+                    adev->fw_vram_usage.size, PAGE_SIZE,
+                    AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
+                    AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS,
+                    &adev->fw_vram_usage.reserved_bo,
+                    &gpu_addr, &adev->fw_vram_usage.va);
 
-               r = amdgpu_bo_create(adev, adev->fw_vram_usage.size,
-                       PAGE_SIZE, true, 0,
-                       AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED |
-                       AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS, NULL, NULL, 0,
-                       &adev->fw_vram_usage.reserved_bo);
-               if (r)
-                       goto error_create;
-
-               r = amdgpu_bo_reserve(adev->fw_vram_usage.reserved_bo, false);
-               if (r)
-                       goto error_reserve;
-               r = amdgpu_bo_pin_restricted(adev->fw_vram_usage.reserved_bo,
-                       AMDGPU_GEM_DOMAIN_VRAM,
-                       adev->fw_vram_usage.start_offset,
-                       (adev->fw_vram_usage.start_offset +
-                       adev->fw_vram_usage.size), &gpu_addr);
-               if (r)
-                       goto error_pin;
-               r = amdgpu_bo_kmap(adev->fw_vram_usage.reserved_bo,
-                       &adev->fw_vram_usage.va);
-               if (r)
-                       goto error_kmap;
-
-               amdgpu_bo_unreserve(adev->fw_vram_usage.reserved_bo);
        }
        return r;
-
-error_kmap:
-       amdgpu_bo_unpin(adev->fw_vram_usage.reserved_bo);
-error_pin:
-       amdgpu_bo_unreserve(adev->fw_vram_usage.reserved_bo);
-error_reserve:
-       amdgpu_bo_unref(&adev->fw_vram_usage.reserved_bo);
-error_create:
-       adev->fw_vram_usage.va = NULL;
-       adev->fw_vram_usage.reserved_bo = NULL;
-       return r;
 }
 
 
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to