Merge tag 'drm-fixes-2025-06-06' of https://gitlab.freedesktop.org/drm/kernel
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Jun 2025 16:26:47 +0000 (09:26 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Jun 2025 16:26:47 +0000 (09:26 -0700)
Pull more drm fixes from Simona Vetter:
 "Another small batch of drm fixes, this time with a different baseline
  and hence separate.

  Drivers:
   - ivpu:
       - dma_resv locking
       - warning fixes
       - reset failure handling
       - improve logging
       - update fw file names
       - fix cmdqueue unregister
   - panel-simple: add Evervision VGG644804

  Core Changes:
   - sysfb: screen_info type check
   - video: screen_info for relocated pci fb
   - drm/sched: signal fence of killed job
   - dummycon: deferred takeover fix"

* tag 'drm-fixes-2025-06-06' of https://gitlab.freedesktop.org/drm/kernel:
  sysfb: Fix screen_info type check for VGA
  video: screen_info: Relocate framebuffers behind PCI bridges
  accel/ivpu: Fix warning in ivpu_gem_bo_free()
  accel/ivpu: Trigger device recovery on engine reset/resume failure
  accel/ivpu: Use dma_resv_lock() instead of a custom mutex
  drm/panel-simple: fix the warnings for the Evervision VGG644804
  accel/ivpu: Reorder Doorbell Unregister and Command Queue Destruction
  accel/ivpu: Use firmware names from upstream repo
  accel/ivpu: Improve buffer object logging
  dummycon: Trigger redraw when switching consoles with deferred takeover
  drm/scheduler: signal scheduled fence when kill job

1  2 
drivers/accel/ivpu/ivpu_gem.c
drivers/gpu/drm/panel/panel-simple.c

index e0d242d9f3e506bd37c33c9549507cf43f18ef6f,248bfebeaa22d2e08acbb24a210335a414829682..59cfcf3eaded967c314e68271f297734b1f19c3d
@@@ -28,11 -28,21 +28,21 @@@ static inline void ivpu_dbg_bo(struct i
  {
        ivpu_dbg(vdev, BO,
                 "%6s: bo %8p vpu_addr %9llx size %8zu ctx %d has_pages %d dma_mapped %d mmu_mapped %d wc %d imported %d\n",
-                action, bo, bo->vpu_addr, ivpu_bo_size(bo), bo->ctx ? bo->ctx->id : 0,
+                action, bo, bo->vpu_addr, ivpu_bo_size(bo), bo->ctx_id,
                 (bool)bo->base.pages, (bool)bo->base.sgt, bo->mmu_mapped, bo->base.map_wc,
 -               (bool)bo->base.base.import_attach);
 +               (bool)drm_gem_is_imported(&bo->base.base));
  }
  
+ static inline int ivpu_bo_lock(struct ivpu_bo *bo)
+ {
+       return dma_resv_lock(bo->base.base.resv, NULL);
+ }
+ static inline void ivpu_bo_unlock(struct ivpu_bo *bo)
+ {
+       dma_resv_unlock(bo->base.base.resv);
+ }
  /*
   * ivpu_bo_pin() - pin the backing physical pages and map them to VPU.
   *
@@@ -122,10 -130,9 +130,9 @@@ static void ivpu_bo_unbind_locked(struc
                bo->ctx = NULL;
        }
  
 -      if (bo->base.base.import_attach)
 +      if (drm_gem_is_imported(&bo->base.base))
                return;
  
-       dma_resv_lock(bo->base.base.resv, NULL);
        if (bo->base.sgt) {
                dma_unmap_sgtable(vdev->drm.dev, bo->base.sgt, DMA_BIDIRECTIONAL, 0);
                sg_free_table(bo->base.sgt);
@@@ -277,12 -285,16 +285,16 @@@ static void ivpu_gem_bo_free(struct drm
        list_del(&bo->bo_list_node);
        mutex_unlock(&vdev->bo_list_lock);
  
-       drm_WARN_ON(&vdev->drm, !dma_resv_test_signaled(obj->resv, DMA_RESV_USAGE_READ));
+       drm_WARN_ON(&vdev->drm, !drm_gem_is_imported(&bo->base.base) &&
+                   !dma_resv_test_signaled(obj->resv, DMA_RESV_USAGE_READ));
+       drm_WARN_ON(&vdev->drm, ivpu_bo_size(bo) == 0);
+       drm_WARN_ON(&vdev->drm, bo->base.vaddr);
  
        ivpu_bo_unbind_locked(bo);
-       mutex_destroy(&bo->lock);
+       drm_WARN_ON(&vdev->drm, bo->mmu_mapped);
+       drm_WARN_ON(&vdev->drm, bo->ctx);
  
 -      drm_WARN_ON(obj->dev, bo->base.pages_use_count > 1);
 +      drm_WARN_ON(obj->dev, refcount_read(&bo->base.pages_use_count) > 1);
        drm_gem_shmem_free(&bo->base);
  }
  
@@@ -361,9 -376,9 +376,9 @@@ ivpu_bo_create(struct ivpu_device *vdev
                goto err_put;
  
        if (flags & DRM_IVPU_BO_MAPPABLE) {
-               dma_resv_lock(bo->base.base.resv, NULL);
+               ivpu_bo_lock(bo);
 -              ret = drm_gem_shmem_vmap(&bo->base, &map);
 +              ret = drm_gem_shmem_vmap_locked(&bo->base, &map);
-               dma_resv_unlock(bo->base.base.resv);
+               ivpu_bo_unlock(bo);
  
                if (ret)
                        goto err_put;
@@@ -386,9 -401,9 +401,9 @@@ void ivpu_bo_free(struct ivpu_bo *bo
        struct iosys_map map = IOSYS_MAP_INIT_VADDR(bo->base.vaddr);
  
        if (bo->flags & DRM_IVPU_BO_MAPPABLE) {
-               dma_resv_lock(bo->base.base.resv, NULL);
+               ivpu_bo_lock(bo);
 -              drm_gem_shmem_vunmap(&bo->base, &map);
 +              drm_gem_shmem_vunmap_locked(&bo->base, &map);
-               dma_resv_unlock(bo->base.base.resv);
+               ivpu_bo_unlock(bo);
        }
  
        drm_gem_object_put(&bo->base.base);
Simple merge