]> Git Repo - J-linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
Merge patch series "scsi: ufs: core: Always read the descriptors with max length"
[J-linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_object.c
index 919bbea2e3ac2a0117315c4eacb5e736582db202..4e684c2afc709f622a1bbbf1f6d74b1ff3371b76 100644 (file)
@@ -346,17 +346,16 @@ int amdgpu_bo_create_kernel(struct amdgpu_device *adev,
  * @adev: amdgpu device object
  * @offset: offset of the BO
  * @size: size of the BO
- * @domain: where to place it
  * @bo_ptr:  used to initialize BOs in structures
  * @cpu_addr: optional CPU address mapping
  *
- * Creates a kernel BO at a specific offset in the address space of the domain.
+ * Creates a kernel BO at a specific offset in VRAM.
  *
  * Returns:
  * 0 on success, negative error code otherwise.
  */
 int amdgpu_bo_create_kernel_at(struct amdgpu_device *adev,
-                              uint64_t offset, uint64_t size, uint32_t domain,
+                              uint64_t offset, uint64_t size,
                               struct amdgpu_bo **bo_ptr, void **cpu_addr)
 {
        struct ttm_operation_ctx ctx = { false, false };
@@ -366,8 +365,9 @@ int amdgpu_bo_create_kernel_at(struct amdgpu_device *adev,
        offset &= PAGE_MASK;
        size = ALIGN(size, PAGE_SIZE);
 
-       r = amdgpu_bo_create_reserved(adev, size, PAGE_SIZE, domain, bo_ptr,
-                                     NULL, cpu_addr);
+       r = amdgpu_bo_create_reserved(adev, size, PAGE_SIZE,
+                                     AMDGPU_GEM_DOMAIN_VRAM, bo_ptr, NULL,
+                                     cpu_addr);
        if (r)
                return r;
 
@@ -422,6 +422,8 @@ void amdgpu_bo_free_kernel(struct amdgpu_bo **bo, u64 *gpu_addr,
        if (*bo == NULL)
                return;
 
+       WARN_ON(amdgpu_ttm_adev((*bo)->tbo.bdev)->in_suspend);
+
        if (likely(amdgpu_bo_reserve(*bo, true) == 0)) {
                if (cpu_addr)
                        amdgpu_bo_kunmap(*bo);
@@ -446,27 +448,24 @@ static bool amdgpu_bo_validate_size(struct amdgpu_device *adev,
 
        /*
         * If GTT is part of requested domains the check must succeed to
-        * allow fall back to GTT
+        * allow fall back to GTT.
         */
        if (domain & AMDGPU_GEM_DOMAIN_GTT) {
                man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
 
-               if (size < man->size)
+               if (man && size < man->size)
                        return true;
-               else
-                       goto fail;
-       }
-
-       if (domain & AMDGPU_GEM_DOMAIN_VRAM) {
+               else if (!man)
+                       WARN_ON_ONCE("GTT domain requested but GTT mem manager uninitialized");
+               goto fail;
+       } else if (domain & AMDGPU_GEM_DOMAIN_VRAM) {
                man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
 
-               if (size < man->size)
+               if (man && size < man->size)
                        return true;
-               else
-                       goto fail;
+               goto fail;
        }
 
-
        /* TODO add more domains checks, such as AMDGPU_GEM_DOMAIN_CPU */
        return true;
 
@@ -581,7 +580,11 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
                bo->flags |= AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE;
 
        bo->tbo.bdev = &adev->mman.bdev;
-       amdgpu_bo_placement_from_domain(bo, bp->domain);
+       if (bp->domain & (AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA |
+                         AMDGPU_GEM_DOMAIN_GDS))
+               amdgpu_bo_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_CPU);
+       else
+               amdgpu_bo_placement_from_domain(bo, bp->domain);
        if (bp->type == ttm_bo_type_kernel)
                bo->tbo.priority = 1;
 
@@ -1506,7 +1509,8 @@ u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo)
 uint32_t amdgpu_bo_get_preferred_domain(struct amdgpu_device *adev,
                                            uint32_t domain)
 {
-       if (domain == (AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT)) {
+       if ((domain == (AMDGPU_GEM_DOMAIN_VRAM | AMDGPU_GEM_DOMAIN_GTT)) &&
+           ((adev->asic_type == CHIP_CARRIZO) || (adev->asic_type == CHIP_STONEY))) {
                domain = AMDGPU_GEM_DOMAIN_VRAM;
                if (adev->gmc.real_vram_size <= AMDGPU_SG_THRESHOLD)
                        domain = AMDGPU_GEM_DOMAIN_GTT;
This page took 0.030909 seconds and 4 git commands to generate.