1. 31 Oct, 2023 8 commits
    • Karol Wachowski's avatar
      accel/ivpu: Make DMA allocations for MMU600 write combined · 3bcc5209
      Karol Wachowski authored
      Previously using dma_alloc_wc() API we created cache coherent
      (mapped as write-back) mappings.
      
      Because we disable MMU600 snooping it was required to do costly
      page walk and cache flushes after each page table modification.
      
      With write-combined buffers it's possible to do a single write memory
      barrier to flush write-combined buffer to memory which simplifies the
      driver and significantly reduce time of map/unmap operations.
      
      Mapping time of 255 MB is reduced from 2.5 ms to 500 us.
      Signed-off-by: default avatarKarol Wachowski <karol.wachowski@linux.intel.com>
      Reviewed-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Reviewed-by: default avatarJeffrey Hugo <quic_jhugo@quicinc.com>
      Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231028155936.1183342-7-stanislaw.gruszka@linux.intel.com
      3bcc5209
    • Karol Wachowski's avatar
      e013aa9a
    • Stanislaw Gruszka's avatar
      accel/ivpu: Abort pending rx ipc on reset · ba6b035d
      Stanislaw Gruszka authored
      Waking up process, which wait for particular condition, will go to
      sleep again on wake_up() if the condition is not met. Add abort flag
      to wake up IPC receivers, which will finish with -ECANCELED error.
      
      This is only needed for reset, run time power management prevent to
      suspend VPU when there is pending IPC processing or pending job.
      Reviewed-by: default avatarKarol Wachowski <karol.wachowski@linux.intel.com>
      Reviewed-by: default avatarJeffrey Hugo <quic_jhugo@quicinc.com>
      Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231028155936.1183342-5-stanislaw.gruszka@linux.intel.com
      ba6b035d
    • Stanislaw Gruszka's avatar
      accel/ivpu: Stop job_done_thread on suspend · 57c7e3e4
      Stanislaw Gruszka authored
      Stop job_done thread when going to suspend. Use kthread_park() instead
      of kthread_stop() to avoid memory allocation and potential failure
      on resume.
      
      Use separate function as thread wake up condition. Use spin lock to assure
      rx_msg_list is properly protected against concurrent access. This avoid
      race condition when the rx_msg_list list is modified and read in
      ivpu_ipc_recive() at the same time.
      Reviewed-by: default avatarKarol Wachowski <karol.wachowski@linux.intel.com>
      Reviewed-by: default avatarJeffrey Hugo <quic_jhugo@quicinc.com>
      Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231028155936.1183342-4-stanislaw.gruszka@linux.intel.com
      57c7e3e4
    • Stanislaw Gruszka's avatar
      accel/ivpu: Assure device is off if power up sequence fail · a06eb9be
      Stanislaw Gruszka authored
      We should not leave device half enabled if there is failure somewhere
      it power up sequence. Fix device init and resume paths.
      Reviewed-by: default avatarKarol Wachowski <karol.wachowski@linux.intel.com>
      Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Reviewed-by: default avatarJeffrey Hugo <quic_jhugo@quicinc.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231028155936.1183342-3-stanislaw.gruszka@linux.intel.com
      a06eb9be
    • Krystian Pradzynski's avatar
      accel/ivpu/40xx: Allow to change profiling frequency · bfc87f90
      Krystian Pradzynski authored
      Profiling freq is a debug firmware feature. It switches default clock
      to higher resolution for fine-grained and more accurate firmware task
      profiling. We already configure it during boot up of VPU4.
      
      Add debugfs knob and helpers per HW generation that allow to change it.
      For vpu37xx the implementation is empty as profiling frequency can only
      be changed on VPU4 or newer.
      Signed-off-by: default avatarKrystian Pradzynski <krystian.pradzynski@linux.intel.com>
      Reviewed-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Reviewed-by: default avatarJeffrey Hugo <quic_jhugo@quicinc.com>
      Signed-off-by: default avatarStanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20231028155936.1183342-2-stanislaw.gruszka@linux.intel.com
      bfc87f90
    • Tomi Valkeinen's avatar
      Revert "drm/omapdrm: Annotate dma-fence critical section in commit path" · 9d7c8c06
      Tomi Valkeinen authored
      This reverts commit 250aa229.
      
      The DMA-fence annotations cause a lockdep warning (see below). As per
      https://patchwork.freedesktop.org/patch/462170/ it sounds like the
      annotations don't work correctly.
      
      ======================================================
      WARNING: possible circular locking dependency detected
      6.5.0-rc2+ #2 Not tainted
      ------------------------------------------------------
      kmstest/219 is trying to acquire lock:
      c4705838 (&hdmi->lock){+.+.}-{3:3}, at: hdmi5_bridge_mode_set+0x1c/0x50
      
      but task is already holding lock:
      c11e1128 (dma_fence_map){++++}-{0:0}, at: omap_atomic_commit_tail+0x14/0xbc
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #2 (dma_fence_map){++++}-{0:0}:
             __dma_fence_might_wait+0x48/0xb4
             dma_resv_lockdep+0x1b8/0x2bc
             do_one_initcall+0x68/0x3b0
             kernel_init_freeable+0x260/0x34c
             kernel_init+0x14/0x140
             ret_from_fork+0x14/0x28
      
      -> #1 (fs_reclaim){+.+.}-{0:0}:
             fs_reclaim_acquire+0x70/0xa8
             __kmem_cache_alloc_node+0x3c/0x368
             kmalloc_trace+0x28/0x58
             _drm_do_get_edid+0x7c/0x35c
             hdmi5_bridge_get_edid+0xc8/0x1ac
             drm_bridge_connector_get_modes+0x64/0xc0
             drm_helper_probe_single_connector_modes+0x170/0x528
             drm_client_modeset_probe+0x208/0x1334
             __drm_fb_helper_initial_config_and_unlock+0x30/0x548
             omap_fbdev_client_hotplug+0x3c/0x6c
             drm_client_register+0x58/0x94
             pdev_probe+0x544/0x6b0
             platform_probe+0x58/0xbc
             really_probe+0xd8/0x3fc
             __driver_probe_device+0x94/0x1f4
             driver_probe_device+0x2c/0xc4
             __device_attach_driver+0xa4/0x11c
             bus_for_each_drv+0x84/0xdc
             __device_attach+0xac/0x20c
             bus_probe_device+0x8c/0x90
             device_add+0x588/0x7e0
             platform_device_add+0x110/0x24c
             platform_device_register_full+0x108/0x15c
             dss_bind+0x90/0xc0
             try_to_bring_up_aggregate_device+0x1e0/0x2c8
             __component_add+0xa4/0x174
             hdmi5_probe+0x1c8/0x270
             platform_probe+0x58/0xbc
             really_probe+0xd8/0x3fc
             __driver_probe_device+0x94/0x1f4
             driver_probe_device+0x2c/0xc4
             __device_attach_driver+0xa4/0x11c
             bus_for_each_drv+0x84/0xdc
             __device_attach+0xac/0x20c
             bus_probe_device+0x8c/0x90
             deferred_probe_work_func+0x8c/0xd8
             process_one_work+0x2ac/0x6e4
             worker_thread+0x30/0x4ec
             kthread+0x100/0x124
             ret_from_fork+0x14/0x28
      
      -> #0 (&hdmi->lock){+.+.}-{3:3}:
             __lock_acquire+0x145c/0x29cc
             lock_acquire.part.0+0xb4/0x258
             __mutex_lock+0x90/0x950
             mutex_lock_nested+0x1c/0x24
             hdmi5_bridge_mode_set+0x1c/0x50
             drm_bridge_chain_mode_set+0x48/0x5c
             crtc_set_mode+0x188/0x1d0
             omap_atomic_commit_tail+0x2c/0xbc
             commit_tail+0x9c/0x188
             drm_atomic_helper_commit+0x158/0x18c
             drm_atomic_commit+0xa4/0xe8
             drm_mode_atomic_ioctl+0x9a4/0xc38
             drm_ioctl+0x210/0x4a8
             sys_ioctl+0x138/0xf00
             ret_fast_syscall+0x0/0x1c
      
      other info that might help us debug this:
      
      Chain exists of:
        &hdmi->lock --> fs_reclaim --> dma_fence_map
      
       Possible unsafe locking scenario:
      
             CPU0                    CPU1
             ----                    ----
        rlock(dma_fence_map);
                                     lock(fs_reclaim);
                                     lock(dma_fence_map);
        lock(&hdmi->lock);
      
       *** DEADLOCK ***
      
      3 locks held by kmstest/219:
       #0: f1011de4 (crtc_ww_class_acquire){+.+.}-{0:0}, at: drm_mode_atomic_ioctl+0xf0/0xc38
       #1: c47059c8 (crtc_ww_class_mutex){+.+.}-{3:3}, at: modeset_lock+0xf8/0x230
       #2: c11e1128 (dma_fence_map){++++}-{0:0}, at: omap_atomic_commit_tail+0x14/0xbc
      
      stack backtrace:
      CPU: 1 PID: 219 Comm: kmstest Not tainted 6.5.0-rc2+ #2
      Hardware name: Generic DRA74X (Flattened Device Tree)
       unwind_backtrace from show_stack+0x10/0x14
       show_stack from dump_stack_lvl+0x58/0x70
       dump_stack_lvl from check_noncircular+0x164/0x198
       check_noncircular from __lock_acquire+0x145c/0x29cc
       __lock_acquire from lock_acquire.part.0+0xb4/0x258
       lock_acquire.part.0 from __mutex_lock+0x90/0x950
       __mutex_lock from mutex_lock_nested+0x1c/0x24
       mutex_lock_nested from hdmi5_bridge_mode_set+0x1c/0x50
       hdmi5_bridge_mode_set from drm_bridge_chain_mode_set+0x48/0x5c
       drm_bridge_chain_mode_set from crtc_set_mode+0x188/0x1d0
       crtc_set_mode from omap_atomic_commit_tail+0x2c/0xbc
       omap_atomic_commit_tail from commit_tail+0x9c/0x188
       commit_tail from drm_atomic_helper_commit+0x158/0x18c
       drm_atomic_helper_commit from drm_atomic_commit+0xa4/0xe8
       drm_atomic_commit from drm_mode_atomic_ioctl+0x9a4/0xc38
       drm_mode_atomic_ioctl from drm_ioctl+0x210/0x4a8
       drm_ioctl from sys_ioctl+0x138/0xf00
       sys_ioctl from ret_fast_syscall+0x0/0x1c
      Exception stack(0xf1011fa8 to 0xf1011ff0)
      1fa0:                   00466d58 be9ab510 00000003 c03864bc be9ab510 be9ab4e0
      1fc0: 00466d58 be9ab510 c03864bc 00000036 00466ef0 00466fc0 00467020 00466f20
      1fe0: b6bc7ef4 be9ab4d0 b6bbbb00 b6cb2cc0
      
      Fixes: 250aa229 ("drm/omapdrm: Annotate dma-fence critical section in commit path")
      Reviewed-by: default avatarAradhya Bhatia <a-bhatia1@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230920-dma-fence-annotation-revert-v1-2-7ebf6f7f5bf6@ideasonboard.com
      9d7c8c06
    • Tomi Valkeinen's avatar
      Revert "drm/tidss: Annotate dma-fence critical section in commit path" · ca34d816
      Tomi Valkeinen authored
      This reverts commit 4d56a4f0.
      
      The DMA-fence annotations cause a lockdep warning (see below). As per
      https://patchwork.freedesktop.org/patch/462170/ it sounds like the
      annotations don't work correctly.
      
      ======================================================
      WARNING: possible circular locking dependency detected
      6.6.0-rc2+ #1 Not tainted
      ------------------------------------------------------
      kmstest/733 is trying to acquire lock:
      ffff8000819377f0 (fs_reclaim){+.+.}-{0:0}, at: __kmem_cache_alloc_node+0x58/0x2d4
      
      but task is already holding lock:
      ffff800081a06aa0 (dma_fence_map){++++}-{0:0}, at: tidss_atomic_commit_tail+0x20/0xc0 [tidss]
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #2 (dma_fence_map){++++}-{0:0}:
             __dma_fence_might_wait+0x5c/0xd0
             dma_resv_lockdep+0x1a4/0x32c
             do_one_initcall+0x84/0x2fc
             kernel_init_freeable+0x28c/0x4c4
             kernel_init+0x24/0x1dc
             ret_from_fork+0x10/0x20
      
      -> #1 (mmu_notifier_invalidate_range_start){+.+.}-{0:0}:
             fs_reclaim_acquire+0x70/0xe4
             __kmem_cache_alloc_node+0x58/0x2d4
             kmalloc_trace+0x38/0x78
             __kthread_create_worker+0x3c/0x150
             kthread_create_worker+0x64/0x8c
             workqueue_init+0x1e8/0x2f0
             kernel_init_freeable+0x11c/0x4c4
             kernel_init+0x24/0x1dc
             ret_from_fork+0x10/0x20
      
      -> #0 (fs_reclaim){+.+.}-{0:0}:
             __lock_acquire+0x1370/0x20d8
             lock_acquire+0x1e8/0x308
             fs_reclaim_acquire+0xd0/0xe4
             __kmem_cache_alloc_node+0x58/0x2d4
             __kmalloc_node_track_caller+0x58/0xf0
             kmemdup+0x34/0x60
             regmap_bulk_write+0x64/0x2c0
             tc358768_bridge_pre_enable+0x8c/0x12d0 [tc358768]
             drm_atomic_bridge_call_pre_enable+0x68/0x80 [drm]
             drm_atomic_bridge_chain_pre_enable+0x50/0x158 [drm]
             drm_atomic_helper_commit_modeset_enables+0x164/0x264 [drm_kms_helper]
             tidss_atomic_commit_tail+0x58/0xc0 [tidss]
             commit_tail+0xa0/0x188 [drm_kms_helper]
             drm_atomic_helper_commit+0x1a8/0x1c0 [drm_kms_helper]
             drm_atomic_commit+0xa8/0xe0 [drm]
             drm_mode_atomic_ioctl+0x9ec/0xc80 [drm]
             drm_ioctl_kernel+0xc4/0x170 [drm]
             drm_ioctl+0x234/0x4b0 [drm]
             drm_compat_ioctl+0x110/0x12c [drm]
             __arm64_compat_sys_ioctl+0x128/0x150
             invoke_syscall+0x48/0x110
             el0_svc_common.constprop.0+0x40/0xe0
             do_el0_svc_compat+0x1c/0x38
             el0_svc_compat+0x48/0xb4
             el0t_32_sync_handler+0xb0/0x138
             el0t_32_sync+0x194/0x198
      
      other info that might help us debug this:
      
      Chain exists of:
        fs_reclaim --> mmu_notifier_invalidate_range_start --> dma_fence_map
      
       Possible unsafe locking scenario:
      
             CPU0                    CPU1
             ----                    ----
        rlock(dma_fence_map);
                                     lock(mmu_notifier_invalidate_range_start);
                                     lock(dma_fence_map);
        lock(fs_reclaim);
      
       *** DEADLOCK ***
      
      3 locks held by kmstest/733:
       #0: ffff800082e5bba0 (crtc_ww_class_acquire){+.+.}-{0:0}, at: drm_mode_atomic_ioctl+0x118/0xc80 [drm]
       #1: ffff000004224c88 (crtc_ww_class_mutex){+.+.}-{3:3}, at: modeset_lock+0xdc/0x1a0 [drm]
       #2: ffff800081a06aa0 (dma_fence_map){++++}-{0:0}, at: tidss_atomic_commit_tail+0x20/0xc0 [tidss]
      
      stack backtrace:
      CPU: 0 PID: 733 Comm: kmstest Not tainted 6.6.0-rc2+ #1
      Hardware name: Toradex Verdin AM62 on Verdin Development Board (DT)
      Call trace:
       dump_backtrace+0x98/0x118
       show_stack+0x18/0x24
       dump_stack_lvl+0x60/0xac
       dump_stack+0x18/0x24
       print_circular_bug+0x288/0x368
       check_noncircular+0x168/0x17c
       __lock_acquire+0x1370/0x20d8
       lock_acquire+0x1e8/0x308
       fs_reclaim_acquire+0xd0/0xe4
       __kmem_cache_alloc_node+0x58/0x2d4
       __kmalloc_node_track_caller+0x58/0xf0
       kmemdup+0x34/0x60
       regmap_bulk_write+0x64/0x2c0
       tc358768_bridge_pre_enable+0x8c/0x12d0 [tc358768]
       drm_atomic_bridge_call_pre_enable+0x68/0x80 [drm]
       drm_atomic_bridge_chain_pre_enable+0x50/0x158 [drm]
       drm_atomic_helper_commit_modeset_enables+0x164/0x264 [drm_kms_helper]
       tidss_atomic_commit_tail+0x58/0xc0 [tidss]
       commit_tail+0xa0/0x188 [drm_kms_helper]
       drm_atomic_helper_commit+0x1a8/0x1c0 [drm_kms_helper]
       drm_atomic_commit+0xa8/0xe0 [drm]
       drm_mode_atomic_ioctl+0x9ec/0xc80 [drm]
       drm_ioctl_kernel+0xc4/0x170 [drm]
       drm_ioctl+0x234/0x4b0 [drm]
       drm_compat_ioctl+0x110/0x12c [drm]
       __arm64_compat_sys_ioctl+0x128/0x150
       invoke_syscall+0x48/0x110
       el0_svc_common.constprop.0+0x40/0xe0
       do_el0_svc_compat+0x1c/0x38
       el0_svc_compat+0x48/0xb4
       el0t_32_sync_handler+0xb0/0x138
       el0t_32_sync+0x194/0x198
      
      Fixes: 4d56a4f0 ("drm/tidss: Annotate dma-fence critical section in commit path")
      Reviewed-by: default avatarAradhya Bhatia <a-bhatia1@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20230920-dma-fence-annotation-revert-v1-1-7ebf6f7f5bf6@ideasonboard.com
      ca34d816
  2. 30 Oct, 2023 14 commits
  3. 27 Oct, 2023 10 commits
  4. 26 Oct, 2023 8 commits