diff mbox series

drm/rockchip: vop2: Avoid use regmap_reinit_cache at runtime

Message ID 20231217084415.2373043-1-andyshrk@163.com (mailing list archive)
State New, archived
Headers show
Series drm/rockchip: vop2: Avoid use regmap_reinit_cache at runtime | expand

Commit Message

Andy Yan Dec. 17, 2023, 8:44 a.m. UTC
From: Andy Yan <andy.yan@rock-chips.com>

Marek Report a possible irq lock inversion dependency warning when
commit 81a06f1d02e5 ("Revert "drm/rockchip: vop2: Use regcache_sync()
to fix suspend/resume"") lands linux-next.

I can reproduce this warning with:
CONFIG_PROVE_LOCKING=y
CONFIG_DEBUG_LOCKDEP=y

It seems than when use regmap_reinit_cache at runtime whith Mark's
commit 3d59c22bbb8d ("drm/rockchip: vop2: Convert to use maple tree
register cache"), it will trigger a possible irq lock inversion dependency
warning.

One solution is switch back to REGCACHE_RBTREE, but it seems that
REGCACHE_MAPLE is the future, so I avoid ues regmap_reinit_cache,
and drop all the regcache when vop is disabled, then we get a fresh
start at next enbable time.

[    8.425923] dwmmc_rockchip fe2b0000.mmc: IDMAC supports 32-bit address mode.
[    8.427020] dwmmc_rockchip fe2b0000.mmc: Using internal DMA controller.
[    8.428013] dwmmc_rockchip fe2b0000.mmc: Version ID is 270a
[    8.429088] dwmmc_rockchip fe2b0000.mmc: DW MMC controller at irq 78,32 bit host data width,256 deep fifo
[    8.454219] mmc_host mmc0: Bus speed (slot 0) = 375000Hz (slot req 400000Hz, actual 375000HZ div = 0)
[    8.465446] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_component_ops)
[    8.475586] dwhdmi-rockchip fe0a0000.hdmi: Detected HDMI TX controller v2.11a with HDCP (DWC HDMI 2.0 TX PHY)
[    8.484326] dwhdmi-rockchip fe0a0000.hdmi: registered DesignWare HDMI I2C bus driver
[    8.490505] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops dw_hdmi_rockchip_ops)
[    8.501151] [drm] Initialized rockchip 1.0.0 20140818 for display-subsystem on minor 0
[    8.895456]
[    8.895473] ========================================================
[    8.895480] WARNING: possible irq lock inversion dependency detected
[    8.895486] 6.7.0-rc5-next-20231215 #514 Not tainted
[    8.895496] --------------------------------------------------------
[    8.895501] swapper/0/0 just changed the state of lock:
[    8.895510] ffff0000070b6018 (rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock){-...}-{2:2}, at: regmap_lock_spinlock
+0x14/0x24
[    8.895560] but this lock took another, HARDIRQ-unsafe lock in the past:
[    8.895566]  (&mt->ma_lock){+.+.}-{2:2}
[    8.895580]
[    8.895580]
[    8.895580] and interrupts could create inverse lock ordering between them.
[    8.895580]
[    8.895585]
[    8.895585] other info that might help us debug this:
[    8.895590]  Possible interrupt unsafe locking scenario:
[    8.895590]
[    8.895594]        CPU0                    CPU1
[    8.895598]        ----                    ----
[    8.895602]   lock(&mt->ma_lock);
[    8.895614]                                local_irq_disable();
[    8.895617]                                lock(rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock);
[    8.895629]                                lock(&mt->ma_lock);
[    8.895641]   <Interrupt>
[    8.895644]   lock(rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock);
[    8.895655]
[    8.895655]  *** DEADLOCK ***
[    8.895655]
[    8.895659] no locks held by swapper/0/0.
[    8.895664]
[    8.895664] the shortest dependencies between 2nd lock and 1st lock:
[    8.895672]  -> (&mt->ma_lock){+.+.}-{2:2} ops: 12 {
[    8.895704]     HARDIRQ-ON-W at:
[    8.895713]                       lock_acquire+0x238/0x354
[    8.895732]                       _raw_spin_lock+0x3c/0x50
[    8.895749]                       regcache_maple_exit+0x64/0xc4
[    8.895766]                       regcache_exit+0x48/0xac
[    8.895780]                       regmap_reinit_cache+0x18/0x98
[    8.895793]	                     vop2_crtc_atomic_enable+0xefc/0x1074
[    8.895810]                       drm_atomic_helper_commit_modeset_enables+0xac/0x264
[    8.895826]                       drm_atomic_helper_commit_tail_rpm+0x2c/0x78
[    8.895841]                       commit_tail+0x9c/0x178
[    8.895855]                       drm_atomic_helper_commit+0x17c/0x1ac
[    8.895869]                       drm_atomic_commit+0xac/0xec
[    8.895885]                       drm_client_modeset_commit_atomic+0x230/0x290
[    8.895896]                       drm_client_modeset_commit_locked+0x54/0x1c4
[    8.895907]                       drm_client_modeset_commit+0x2c/0x50
[    8.895917]                       __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
[    8.895934]                       drm_fb_helper_set_par+0x30/0x48
[    8.895948]                       fbcon_init+0x40c/0x498
[    8.895961]                       visual_init+0xb0/0x108
[    8.895972]                       do_bind_con_driver+0x1b8/0x38c
[    8.895983]                       do_take_over_console+0x148/0x1d4
[    8.895993]                       do_fbcon_takeover+0x6c/0xe0
[    8.896003]                       fbcon_fb_registered+0x1f8/0x1fc
[    8.896014]                       register_framebuffer+0x158/0x228
[    8.896029]                       __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
[    8.896045]                       drm_fb_helper_initial_config+0x3c/0x48
[    8.896060]                       drm_fbdev_generic_client_hotplug+0xb8/0xd8
[    8.896074]                       drm_client_register+0x58/0xa0
[    8.896085]                       drm_fbdev_generic_setup+0xbc/0x144
[    8.896098]                       rockchip_drm_bind+0x1ec/0x1f8
[    8.896110]                       try_to_bring_up_aggregate_device+0x278/0x2d8
[    8.896127]                       __component_add+0xac/0x198
[    8.896139]                       component_add+0x10/0x18
[    8.896151]                       dw_hdmi_rockchip_probe+0x1c/0x24
[    8.896163]                       platform_probe+0x90/0xd8
[    8.896179]                       really_probe+0x114/0x3c0
[    8.896192]                       __driver_probe_device+0x7c/0x17c
[    8.896204]                       driver_probe_device+0x38/0x11c
[    8.896218]                       __device_attach_driver+0xb4/0x164
[    8.896230]                       bus_for_each_drv+0x78/0xdc
[    8.896241]                       __device_attach+0xfc/0x1ac
[    8.896253]                       device_initial_probe+0x10/0x18
[    8.896266]                       bus_probe_device+0xa8/0xac
[    8.896277]                       deferred_probe_work_func+0x98/0xe8
[    8.896290]                       process_scheduled_works+0x23c/0x5b8
[    8.896306]                       worker_thread+0x188/0x374
[    8.896319]                       kthread+0xe4/0x10c
[    8.896332]                       ret_from_fork+0x10/0x20
[    8.896345]     SOFTIRQ-ON-W at:
[    8.896355]                       lock_acquire+0x238/0x354
[    8.896370]                       _raw_spin_lock+0x3c/0x50
[    8.896384]                       regcache_maple_exit+0x64/0xc4
[    8.896399]                       regcache_exit+0x48/0xac
[    8.896411]                       regmap_reinit_cache+0x18/0x98
[    8.896423]                       vop2_crtc_atomic_enable+0xefc/0x1074
[    8.896437]                       drm_atomic_helper_commit_modeset_enables+0xac/0x264
[    8.896453]                       drm_atomic_helper_commit_tail_rpm+0x2c/0x78
[    8.896467]                       commit_tail+0x9c/0x178
[    8.896480]                       drm_atomic_helper_commit+0x17c/0x1ac
[    8.896494]                       drm_atomic_commit+0xac/0xec
[    8.896509]                       drm_client_modeset_commit_atomic+0x230/0x290
[    8.896520]                       drm_client_modeset_commit_locked+0x54/0x1c4
[    8.896530]                       drm_client_modeset_commit+0x2c/0x50
[    8.896540]                       __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
[    8.896558]                       drm_fb_helper_set_par+0x30/0x48
[    8.896572]                       fbcon_init+0x40c/0x498
[    8.896582]                       visual_init+0xb0/0x108
[    8.896591]                       do_bind_con_driver+0x1b8/0x38c
[    8.896601]                       do_take_over_console+0x148/0x1d4
[    8.896611]                       do_fbcon_takeover+0x6c/0xe0
[    8.896620]                       fbcon_fb_registered+0x1f8/0x1fc
[    8.896630]                       register_framebuffer+0x158/0x228
[    8.896645]                       __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
[    8.896660]                       drm_fb_helper_initial_config+0x3c/0x48
[    8.896674]                       drm_fbdev_generic_client_hotplug+0xb8/0xd8
[    8.896688]                       drm_client_register+0x58/0xa0
[    8.896698]                       drm_fbdev_generic_setup+0xbc/0x144
[    8.896711]                       rockchip_drm_bind+0x1ec/0x1f8
[    8.896724]                       try_to_bring_up_aggregate_device+0x278/0x2d8
[    8.896738]                       __component_add+0xac/0x198
[    8.896751]                       component_add+0x10/0x18
[    8.896763]                       dw_hdmi_rockchip_probe+0x1c/0x24
[    8.896773]                       platform_probe+0x90/0xd8
[    8.896789]                       really_probe+0x114/0x3c0
[    8.896801]                       __driver_probe_device+0x7c/0x17c
[    8.896814]                       driver_probe_device+0x38/0x11c
[    8.896827]                       __device_attach_driver+0xb4/0x164
[    8.896839]                       bus_for_each_drv+0x78/0xdc
[    8.896850]                       __device_attach+0xfc/0x1ac
[    8.896862]                       device_initial_probe+0x10/0x18
[    8.896875]                       bus_probe_device+0xa8/0xac
[    8.896886]                       deferred_probe_work_func+0x98/0xe8
[    8.896897]                       process_scheduled_works+0x23c/0x5b8
[    8.896911]                       worker_thread+0x188/0x374
[    8.896924]                       kthread+0xe4/0x10c
[    8.896935]                       ret_from_fork+0x10/0x20
[    8.896947]     INITIAL USE at:
[    8.896955]                      lock_acquire+0x238/0x354
[    8.896971]                      _raw_spin_lock+0x3c/0x50
[    8.896985]                      regcache_maple_exit+0x64/0xc4
[    8.896999]                      regcache_exit+0x48/0xac
[    8.897011]                      regmap_reinit_cache+0x18/0x98
[    8.897022]                      vop2_crtc_atomic_enable+0xefc/0x1074
[    8.897036]                      drm_atomic_helper_commit_modeset_enables+0xac/0x264
[    8.897051]                      drm_atomic_helper_commit_tail_rpm+0x2c/0x78
[    8.897065]                      commit_tail+0x9c/0x178
[    8.897079]                      drm_atomic_helper_commit+0x17c/0x1ac
[    8.897093]                      drm_atomic_commit+0xac/0xec
[    8.897107]                      drm_client_modeset_commit_atomic+0x230/0x290
[    8.897118]                      drm_client_modeset_commit_locked+0x54/0x1c4
[    8.897128]                      drm_client_modeset_commit+0x2c/0x50
[    8.897138]                      __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
[    8.897154]                      drm_fb_helper_set_par+0x30/0x48
[    8.897168]                      fbcon_init+0x40c/0x498
[    8.897179]                      visual_init+0xb0/0x108
[    8.897188]                      do_bind_con_driver+0x1b8/0x38c
[    8.897198]                      do_take_over_console+0x148/0x1d4
[    8.897208]                      do_fbcon_takeover+0x6c/0xe0
[    8.897218]                      fbcon_fb_registered+0x1f8/0x1fc
[    8.897228]                      register_framebuffer+0x158/0x228
[    8.897241]                      __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
[    8.897257]                      drm_fb_helper_initial_config+0x3c/0x48
[    8.897272]                      drm_fbdev_generic_client_hotplug+0xb8/0xd8
[    8.897286]                      drm_client_register+0x58/0xa0
[    8.897296]                      drm_fbdev_generic_setup+0xbc/0x144
[    8.897309]                      rockchip_drm_bind+0x1ec/0x1f8
[    8.897321]                      try_to_bring_up_aggregate_device+0x278/0x2d8
[    8.897336]                      __component_add+0xac/0x198
[    8.897348]                      component_add+0x10/0x18
[    8.897360]                      dw_hdmi_rockchip_probe+0x1c/0x24
[    8.897370]                      platform_probe+0x90/0xd8
[    8.897385]                      really_probe+0x114/0x3c0
[    8.897397]                      __driver_probe_device+0x7c/0x17c
[    8.897410]                      driver_probe_device+0x38/0x11c
[    8.897422]                      __device_attach_driver+0xb4/0x164
[    8.897434]                      bus_for_each_drv+0x78/0xdc
[    8.897445]                      __device_attach+0xfc/0x1ac
[    8.897456]                      device_initial_probe+0x10/0x18
[    8.897469]                      bus_probe_device+0xa8/0xac
[    8.897480]                      deferred_probe_work_func+0x98/0xe8
[    8.897492]                      process_scheduled_works+0x23c/0x5b8
[    8.897506]                      worker_thread+0x188/0x374
[    8.897518]                      kthread+0xe4/0x10c
[    8.897529]                      ret_from_fork+0x10/0x20
[    8.897541]   }
[    8.897545]   ... key      at: [<ffff800082efc820>]__key.20703+0x0/0x10
[    8.897561]   ... acquired at:
[    8.897566]    _raw_spin_lock+0x3c/0x50
[    8.897580]    regcache_maple_write+0x268/0x314
[    8.897595]    regcache_write+0x68/0x84
[    8.897607]    _regmap_read+0xd0/0x1f4
[    8.897619]    _regmap_update_bits+0xe0/0x140
[    8.897631]    regmap_update_bits_base+0x60/0x8c
[    8.897643]    regmap_field_update_bits_base+0x30/0x38
[    8.897656]    vop2_plane_atomic_update+0x8b0/0x1400
[    8.897669]    drm_atomic_helper_commit_planes+0xdc/0x2a0
[    8.897683]    drm_atomic_helper_commit_tail_rpm+0x3c/0x78
[    8.897697]    commit_tail+0x9c/0x178
[    8.897709]    drm_atomic_helper_commit+0x17c/0x1ac
[    8.897722]    drm_atomic_commit+0xac/0xec
[    8.897735]    drm_client_modeset_commit_atomic+0x230/0x290
[    8.897746]    drm_client_modeset_commit_locked+0x54/0x1c4
[    8.897758]    drm_client_modeset_commit+0x2c/0x50
[    8.897767]    __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
[    8.897784]    drm_fb_helper_set_par+0x30/0x48
[    8.897797]    fbcon_init+0x40c/0x498
[    8.897807]    visual_init+0xb0/0x108
[    8.897816]    do_bind_con_driver+0x1b8/0x38c
[    8.897825]    do_take_over_console+0x148/0x1d4
[    8.897835]    do_fbcon_takeover+0x6c/0xe0
[    8.897844]    fbcon_fb_registered+0x1f8/0x1fc
[    8.897854]    register_framebuffer+0x158/0x228
[    8.897866]    __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
[    8.897882]    drm_fb_helper_initial_config+0x3c/0x48
[    8.897895]    drm_fbdev_generic_client_hotplug+0xb8/0xd8
[    8.897908]    drm_client_register+0x58/0xa0
[    8.897917]    drm_fbdev_generic_setup+0xbc/0x144
[    8.897929]    rockchip_drm_bind+0x1ec/0x1f8
[    8.897941]    try_to_bring_up_aggregate_device+0x278/0x2d8
[    8.897956]    __component_add+0xac/0x198
[    8.897967]    component_add+0x10/0x18
[    8.897979]    dw_hdmi_rockchip_probe+0x1c/0x24
[    8.897988]    platform_probe+0x90/0xd8
[    8.898002]    really_probe+0x114/0x3c0
[    8.898013]    __driver_probe_device+0x7c/0x17c
[    8.898026]    driver_probe_device+0x38/0x11c
[    8.898038]    __device_attach_driver+0xb4/0x164
[    8.898049]    bus_for_each_drv+0x78/0xdc
[    8.898059]    __device_attach+0xfc/0x1ac
[    8.898070]    device_initial_probe+0x10/0x18
[    8.898082]    bus_probe_device+0xa8/0xac
[    8.898093]    deferred_probe_work_func+0x98/0xe8
[    8.898105]    process_scheduled_works+0x23c/0x5b8
[    8.898118]    worker_thread+0x188/0x374
[    8.898131]    kthread+0xe4/0x10c
[    8.898142]    ret_from_fork+0x10/0x20
[    8.898153]
[    8.898157] ->(rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock){-...}-{2:2} ops: 74
{
[    8.898185]    IN-HARDIRQ-W at:
[    8.898194]                     lock_acquire+0x238/0x354
[    8.898211]                     _raw_spin_lock_irqsave+0x50/0x6c
[    8.898227]                     regmap_lock_spinlock+0x14/0x24
[    8.898238]                     regmap_read+0x38/0x70
[    8.898250]                     vop2_isr+0x88/0x2ac
[    8.898263]                     __handle_irq_event_percpu+0xa4/0x2bc
[    8.898277]                     handle_irq_event_percpu+0x14/0x44
[    8.898290]                     handle_irq_event+0x44/0x90
[    8.898300]                     handle_fasteoi_irq+0xf8/0x1d4
[    8.898314]                     generic_handle_domain_irq+0x28/0x3c
[    8.898324]                     gic_handle_irq+0xb0/0x130
[    8.898334]                     call_on_irq_stack+0x24/0x34
[    8.898345]                     do_interrupt_handler+0xc4/0xdc
[    8.898359]                     el1_interrupt+0x3c/0x70
[    8.898375]                     el1h_64_irq_handler+0x14/0x1c
[    8.898390]                     el1h_64_irq+0x64/0x68
[    8.898398]                     default_idle_call+0xec/0x118
[    8.898409]                     do_idle+0x1c8/0x254
[    8.898420]                     cpu_startup_entry+0x30/0x38
[    8.898430]                     rest_init+0x13c/0x1cc
[    8.898440]                     arch_post_acpi_subsys_init+0x0/0x8
[    8.898455]                     start_kernel+0x7c0/0x968
[    8.898465]                     __primary_switched+0xb0/0xbc
[    8.898481]    INITIAL USE at:
[    8.898492]                    lock_acquire+0x238/0x354
[    8.898506]                    _raw_spin_lock_irqsave+0x50/0x6c
[    8.898520]                    regmap_lock_spinlock+0x14/0x24
[    8.898531]                    regmap_write+0x38/0x70
[    8.898544]                    vop2_crtc_atomic_enable+0xf64/0x1074
[    8.898560]                    drm_atomic_helper_commit_modeset_enables+0xac/0x264
[    8.898575]                    drm_atomic_helper_commit_tail_rpm+0x2c/0x78
[    8.898589]                    commit_tail+0x9c/0x178
[    8.898601]                    drm_atomic_helper_commit+0x17c/0x1ac
[    8.898615]                    drm_atomic_commit+0xac/0xec
[    8.898628]                    drm_client_modeset_commit_atomic+0x230/0x290
[    8.898639]                    drm_client_modeset_commit_locked+0x54/0x1c4
[    8.898649]                    drm_client_modeset_commit+0x2c/0x50
[    8.898660]                    __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
[    8.898675]                    drm_fb_helper_set_par+0x30/0x48
[    8.898689]                    fbcon_init+0x40c/0x498
[    8.898699]                    visual_init+0xb0/0x108
[    8.898709]                    do_bind_con_driver+0x1b8/0x38c
[    8.898719]                    do_take_over_console+0x148/0x1d4
[    8.898730]                    do_fbcon_takeover+0x6c/0xe0
[    8.898740]                    fbcon_fb_registered+0x1f8/0x1fc
[    8.898750]                    register_framebuffer+0x158/0x228
[    8.898763]                    __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
[    8.898779]                    drm_fb_helper_initial_config+0x3c/0x48
[    8.898793]                    drm_fbdev_generic_client_hotplug+0xb8/0xd8
[    8.898806]                    drm_client_register+0x58/0xa0
[    8.898815]                    drm_fbdev_generic_setup+0xbc/0x144
[    8.898830]                    rockchip_drm_bind+0x1ec/0x1f8
[    8.898842]                    try_to_bring_up_aggregate_device+0x278/0x2d8
[    8.898858]                    __component_add+0xac/0x198
[    8.898871]                    component_add+0x10/0x18
[    8.898885]                    dw_hdmi_rockchip_probe+0x1c/0x24
[    8.898894]                    platform_probe+0x90/0xd8
[    8.898909]                    really_probe+0x114/0x3c0
[    8.898921]                    __driver_probe_device+0x7c/0x17c
[    8.898933]                    driver_probe_device+0x38/0x11c
[    8.898945]                    __device_attach_driver+0xb4/0x164
[    8.898958]                    bus_for_each_drv+0x78/0xdc
[    8.898969]                    __device_attach+0xfc/0x1ac
[    8.898980]                    device_initial_probe+0x10/0x18
[    8.898993]                    bus_probe_device+0xa8/0xac
[    8.899004]                    deferred_probe_work_func+0x98/0xe8
[    8.899015]                    process_scheduled_works+0x23c/0x5b8
[    8.899029]                    worker_thread+0x188/0x374
[    8.899042]                    kthread+0xe4/0x10c
[    8.899053]                    ret_from_fork+0x10/0x20
[    8.899064]  }
[    8.899069]  ... key      at: [<ffff800082efbe90>]_key.73979+0x0/0x10
[    8.899086]  ... acquired at:
[    8.899091]    __lock_acquire+0x9d8/0x1950
[    8.899104]    lock_acquire+0x238/0x354
[    8.899117]    _raw_spin_lock_irqsave+0x50/0x6c
[    8.899131]    regmap_lock_spinlock+0x14/0x24
[    8.899142]    regmap_read+0x38/0x70
[    8.899154]    vop2_isr+0x88/0x2ac
[    8.899166]    __handle_irq_event_percpu+0xa4/0x2bc
[    8.899178]    handle_irq_event_percpu+0x14/0x44
[    8.899188]    handle_irq_event+0x44/0x90
[    8.899198]    handle_fasteoi_irq+0xf8/0x1d4
[    8.899211]    generic_handle_domain_irq+0x28/0x3c
[    8.899221]    gic_handle_irq+0xb0/0x130
[    8.899230]    call_on_irq_stack+0x24/0x34
[    8.899243]    do_interrupt_handler+0xc4/0xdc
[    8.899256]    el1_interrupt+0x3c/0x70
[    8.899270]    el1h_64_irq_handler+0x14/0x1c
[    8.899285]    el1h_64_irq+0x64/0x68
[    8.899293]    default_idle_call+0xec/0x118
[    8.899304]    do_idle+0x1c8/0x254
[    8.899313]    cpu_startup_entry+0x30/0x38
[    8.899321]    rest_init+0x13c/0x1cc
[    8.899331]    arch_post_acpi_subsys_init+0x0/0x8
[    8.899342]    start_kernel+0x7c0/0x968
[    8.899351]    __primary_switched+0xb0/0xbc
[    8.899365]
[    8.899368]
[    8.899368] stack backtrace:
[    8.899376] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc5-next-20231215 #514
[    8.899386] Hardware name: EmbedFire LubanCat 2 (DT)
[    8.899394] Call trace:
[    8.899399]  dump_backtrace+0xe4/0x124
[    8.899410]  show_stack+0x14/0x1c
[    8.899419]  dump_stack_lvl+0x78/0xd4
[    8.899430]  dump_stack+0x14/0x1c
[    8.899438]  print_irq_inversion_bug+0x28c/0x304
[    8.899453]  mark_lock.part.43+0x2c0/0x448
[    8.899466]  __lock_acquire+0x9d8/0x1950
[    8.899479]  lock_acquire+0x238/0x354
[    8.899492]  _raw_spin_lock_irqsave+0x50/0x6c
[    8.899507]  regmap_lock_spinlock+0x14/0x24
[    8.899517]  regmap_read+0x38/0x70
[    8.899528]  vop2_isr+0x88/0x2ac
[    8.899540]  __handle_irq_event_percpu+0xa4/0x2bc
[    8.899553]  handle_irq_event_percpu+0x14/0x44
[    8.899565]  handle_irq_event+0x44/0x90
[    8.899575]  handle_fasteoi_irq+0xf8/0x1d4
[    8.899589]  generic_handle_domain_irq+0x28/0x3c
[    8.899599]  gic_handle_irq+0xb0/0x130
[    8.899608]  call_on_irq_stack+0x24/0x34
[    8.899619]  do_interrupt_handler+0xc4/0xdc
[    8.899631]  el1_interrupt+0x3c/0x70
[    8.899645]  el1h_64_irq_handler+0x14/0x1c
[    8.899659]  el1h_64_irq+0x64/0x68
[    8.899669]  default_idle_call+0xec/0x118
[    8.899679]  do_idle+0x1c8/0x254
[    8.899689]  cpu_startup_entry+0x30/0x38
[    8.899698]  rest_init+0x13c/0x1cc
[    8.899708]  arch_post_acpi_subsys_init+0x0/0x8
[    8.899720]  start_kernel+0x7c0/0x968
[    8.899731]  __primary_switched+0xb0/0xbc
[    8.946839] Console: switching to colour frame buffer device 240x67
[   10.230883] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device

Fixes: 81a06f1d02e5 ("Revert "drm/rockchip: vop2: Use regcache_sync() to fix suspend/resume"")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Closes: https://lore.kernel.org/all/98a9f15d-30ac-47bf-9b93-3aa2c9900f7b@samsung.com/
Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
---

 drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

Comments

Marek Szyprowski Dec. 18, 2023, 10:25 a.m. UTC | #1
On 17.12.2023 09:44, Andy Yan wrote:
> From: Andy Yan <andy.yan@rock-chips.com>
>
> Marek Report a possible irq lock inversion dependency warning when
> commit 81a06f1d02e5 ("Revert "drm/rockchip: vop2: Use regcache_sync()
> to fix suspend/resume"") lands linux-next.
>
> I can reproduce this warning with:
> CONFIG_PROVE_LOCKING=y
> CONFIG_DEBUG_LOCKDEP=y
>
> It seems than when use regmap_reinit_cache at runtime whith Mark's
> commit 3d59c22bbb8d ("drm/rockchip: vop2: Convert to use maple tree
> register cache"), it will trigger a possible irq lock inversion dependency
> warning.
>
> One solution is switch back to REGCACHE_RBTREE, but it seems that
> REGCACHE_MAPLE is the future, so I avoid ues regmap_reinit_cache,
> and drop all the regcache when vop is disabled, then we get a fresh
> start at next enbable time.
>
> [    8.425923] dwmmc_rockchip fe2b0000.mmc: IDMAC supports 32-bit address mode.
> [    8.427020] dwmmc_rockchip fe2b0000.mmc: Using internal DMA controller.
> [    8.428013] dwmmc_rockchip fe2b0000.mmc: Version ID is 270a
> [    8.429088] dwmmc_rockchip fe2b0000.mmc: DW MMC controller at irq 78,32 bit host data width,256 deep fifo
> [    8.454219] mmc_host mmc0: Bus speed (slot 0) = 375000Hz (slot req 400000Hz, actual 375000HZ div = 0)
> [    8.465446] rockchip-drm display-subsystem: bound fe040000.vop (ops vop2_component_ops)
> [    8.475586] dwhdmi-rockchip fe0a0000.hdmi: Detected HDMI TX controller v2.11a with HDCP (DWC HDMI 2.0 TX PHY)
> [    8.484326] dwhdmi-rockchip fe0a0000.hdmi: registered DesignWare HDMI I2C bus driver
> [    8.490505] rockchip-drm display-subsystem: bound fe0a0000.hdmi (ops dw_hdmi_rockchip_ops)
> [    8.501151] [drm] Initialized rockchip 1.0.0 20140818 for display-subsystem on minor 0
> [    8.895456]
> [    8.895473] ========================================================
> [    8.895480] WARNING: possible irq lock inversion dependency detected
> [    8.895486] 6.7.0-rc5-next-20231215 #514 Not tainted
> [    8.895496] --------------------------------------------------------
> [    8.895501] swapper/0/0 just changed the state of lock:
> [    8.895510] ffff0000070b6018 (rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock){-...}-{2:2}, at: regmap_lock_spinlock
> +0x14/0x24
> [    8.895560] but this lock took another, HARDIRQ-unsafe lock in the past:
> [    8.895566]  (&mt->ma_lock){+.+.}-{2:2}
> [    8.895580]
> [    8.895580]
> [    8.895580] and interrupts could create inverse lock ordering between them.
> [    8.895580]
> [    8.895585]
> [    8.895585] other info that might help us debug this:
> [    8.895590]  Possible interrupt unsafe locking scenario:
> [    8.895590]
> [    8.895594]        CPU0                    CPU1
> [    8.895598]        ----                    ----
> [    8.895602]   lock(&mt->ma_lock);
> [    8.895614]                                local_irq_disable();
> [    8.895617]                                lock(rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock);
> [    8.895629]                                lock(&mt->ma_lock);
> [    8.895641]   <Interrupt>
> [    8.895644]   lock(rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock);
> [    8.895655]
> [    8.895655]  *** DEADLOCK ***
> [    8.895655]
> [    8.895659] no locks held by swapper/0/0.
> [    8.895664]
> [    8.895664] the shortest dependencies between 2nd lock and 1st lock:
> [    8.895672]  -> (&mt->ma_lock){+.+.}-{2:2} ops: 12 {
> [    8.895704]     HARDIRQ-ON-W at:
> [    8.895713]                       lock_acquire+0x238/0x354
> [    8.895732]                       _raw_spin_lock+0x3c/0x50
> [    8.895749]                       regcache_maple_exit+0x64/0xc4
> [    8.895766]                       regcache_exit+0x48/0xac
> [    8.895780]                       regmap_reinit_cache+0x18/0x98
> [    8.895793]	                     vop2_crtc_atomic_enable+0xefc/0x1074
> [    8.895810]                       drm_atomic_helper_commit_modeset_enables+0xac/0x264
> [    8.895826]                       drm_atomic_helper_commit_tail_rpm+0x2c/0x78
> [    8.895841]                       commit_tail+0x9c/0x178
> [    8.895855]                       drm_atomic_helper_commit+0x17c/0x1ac
> [    8.895869]                       drm_atomic_commit+0xac/0xec
> [    8.895885]                       drm_client_modeset_commit_atomic+0x230/0x290
> [    8.895896]                       drm_client_modeset_commit_locked+0x54/0x1c4
> [    8.895907]                       drm_client_modeset_commit+0x2c/0x50
> [    8.895917]                       __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
> [    8.895934]                       drm_fb_helper_set_par+0x30/0x48
> [    8.895948]                       fbcon_init+0x40c/0x498
> [    8.895961]                       visual_init+0xb0/0x108
> [    8.895972]                       do_bind_con_driver+0x1b8/0x38c
> [    8.895983]                       do_take_over_console+0x148/0x1d4
> [    8.895993]                       do_fbcon_takeover+0x6c/0xe0
> [    8.896003]                       fbcon_fb_registered+0x1f8/0x1fc
> [    8.896014]                       register_framebuffer+0x158/0x228
> [    8.896029]                       __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
> [    8.896045]                       drm_fb_helper_initial_config+0x3c/0x48
> [    8.896060]                       drm_fbdev_generic_client_hotplug+0xb8/0xd8
> [    8.896074]                       drm_client_register+0x58/0xa0
> [    8.896085]                       drm_fbdev_generic_setup+0xbc/0x144
> [    8.896098]                       rockchip_drm_bind+0x1ec/0x1f8
> [    8.896110]                       try_to_bring_up_aggregate_device+0x278/0x2d8
> [    8.896127]                       __component_add+0xac/0x198
> [    8.896139]                       component_add+0x10/0x18
> [    8.896151]                       dw_hdmi_rockchip_probe+0x1c/0x24
> [    8.896163]                       platform_probe+0x90/0xd8
> [    8.896179]                       really_probe+0x114/0x3c0
> [    8.896192]                       __driver_probe_device+0x7c/0x17c
> [    8.896204]                       driver_probe_device+0x38/0x11c
> [    8.896218]                       __device_attach_driver+0xb4/0x164
> [    8.896230]                       bus_for_each_drv+0x78/0xdc
> [    8.896241]                       __device_attach+0xfc/0x1ac
> [    8.896253]                       device_initial_probe+0x10/0x18
> [    8.896266]                       bus_probe_device+0xa8/0xac
> [    8.896277]                       deferred_probe_work_func+0x98/0xe8
> [    8.896290]                       process_scheduled_works+0x23c/0x5b8
> [    8.896306]                       worker_thread+0x188/0x374
> [    8.896319]                       kthread+0xe4/0x10c
> [    8.896332]                       ret_from_fork+0x10/0x20
> [    8.896345]     SOFTIRQ-ON-W at:
> [    8.896355]                       lock_acquire+0x238/0x354
> [    8.896370]                       _raw_spin_lock+0x3c/0x50
> [    8.896384]                       regcache_maple_exit+0x64/0xc4
> [    8.896399]                       regcache_exit+0x48/0xac
> [    8.896411]                       regmap_reinit_cache+0x18/0x98
> [    8.896423]                       vop2_crtc_atomic_enable+0xefc/0x1074
> [    8.896437]                       drm_atomic_helper_commit_modeset_enables+0xac/0x264
> [    8.896453]                       drm_atomic_helper_commit_tail_rpm+0x2c/0x78
> [    8.896467]                       commit_tail+0x9c/0x178
> [    8.896480]                       drm_atomic_helper_commit+0x17c/0x1ac
> [    8.896494]                       drm_atomic_commit+0xac/0xec
> [    8.896509]                       drm_client_modeset_commit_atomic+0x230/0x290
> [    8.896520]                       drm_client_modeset_commit_locked+0x54/0x1c4
> [    8.896530]                       drm_client_modeset_commit+0x2c/0x50
> [    8.896540]                       __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
> [    8.896558]                       drm_fb_helper_set_par+0x30/0x48
> [    8.896572]                       fbcon_init+0x40c/0x498
> [    8.896582]                       visual_init+0xb0/0x108
> [    8.896591]                       do_bind_con_driver+0x1b8/0x38c
> [    8.896601]                       do_take_over_console+0x148/0x1d4
> [    8.896611]                       do_fbcon_takeover+0x6c/0xe0
> [    8.896620]                       fbcon_fb_registered+0x1f8/0x1fc
> [    8.896630]                       register_framebuffer+0x158/0x228
> [    8.896645]                       __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
> [    8.896660]                       drm_fb_helper_initial_config+0x3c/0x48
> [    8.896674]                       drm_fbdev_generic_client_hotplug+0xb8/0xd8
> [    8.896688]                       drm_client_register+0x58/0xa0
> [    8.896698]                       drm_fbdev_generic_setup+0xbc/0x144
> [    8.896711]                       rockchip_drm_bind+0x1ec/0x1f8
> [    8.896724]                       try_to_bring_up_aggregate_device+0x278/0x2d8
> [    8.896738]                       __component_add+0xac/0x198
> [    8.896751]                       component_add+0x10/0x18
> [    8.896763]                       dw_hdmi_rockchip_probe+0x1c/0x24
> [    8.896773]                       platform_probe+0x90/0xd8
> [    8.896789]                       really_probe+0x114/0x3c0
> [    8.896801]                       __driver_probe_device+0x7c/0x17c
> [    8.896814]                       driver_probe_device+0x38/0x11c
> [    8.896827]                       __device_attach_driver+0xb4/0x164
> [    8.896839]                       bus_for_each_drv+0x78/0xdc
> [    8.896850]                       __device_attach+0xfc/0x1ac
> [    8.896862]                       device_initial_probe+0x10/0x18
> [    8.896875]                       bus_probe_device+0xa8/0xac
> [    8.896886]                       deferred_probe_work_func+0x98/0xe8
> [    8.896897]                       process_scheduled_works+0x23c/0x5b8
> [    8.896911]                       worker_thread+0x188/0x374
> [    8.896924]                       kthread+0xe4/0x10c
> [    8.896935]                       ret_from_fork+0x10/0x20
> [    8.896947]     INITIAL USE at:
> [    8.896955]                      lock_acquire+0x238/0x354
> [    8.896971]                      _raw_spin_lock+0x3c/0x50
> [    8.896985]                      regcache_maple_exit+0x64/0xc4
> [    8.896999]                      regcache_exit+0x48/0xac
> [    8.897011]                      regmap_reinit_cache+0x18/0x98
> [    8.897022]                      vop2_crtc_atomic_enable+0xefc/0x1074
> [    8.897036]                      drm_atomic_helper_commit_modeset_enables+0xac/0x264
> [    8.897051]                      drm_atomic_helper_commit_tail_rpm+0x2c/0x78
> [    8.897065]                      commit_tail+0x9c/0x178
> [    8.897079]                      drm_atomic_helper_commit+0x17c/0x1ac
> [    8.897093]                      drm_atomic_commit+0xac/0xec
> [    8.897107]                      drm_client_modeset_commit_atomic+0x230/0x290
> [    8.897118]                      drm_client_modeset_commit_locked+0x54/0x1c4
> [    8.897128]                      drm_client_modeset_commit+0x2c/0x50
> [    8.897138]                      __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
> [    8.897154]                      drm_fb_helper_set_par+0x30/0x48
> [    8.897168]                      fbcon_init+0x40c/0x498
> [    8.897179]                      visual_init+0xb0/0x108
> [    8.897188]                      do_bind_con_driver+0x1b8/0x38c
> [    8.897198]                      do_take_over_console+0x148/0x1d4
> [    8.897208]                      do_fbcon_takeover+0x6c/0xe0
> [    8.897218]                      fbcon_fb_registered+0x1f8/0x1fc
> [    8.897228]                      register_framebuffer+0x158/0x228
> [    8.897241]                      __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
> [    8.897257]                      drm_fb_helper_initial_config+0x3c/0x48
> [    8.897272]                      drm_fbdev_generic_client_hotplug+0xb8/0xd8
> [    8.897286]                      drm_client_register+0x58/0xa0
> [    8.897296]                      drm_fbdev_generic_setup+0xbc/0x144
> [    8.897309]                      rockchip_drm_bind+0x1ec/0x1f8
> [    8.897321]                      try_to_bring_up_aggregate_device+0x278/0x2d8
> [    8.897336]                      __component_add+0xac/0x198
> [    8.897348]                      component_add+0x10/0x18
> [    8.897360]                      dw_hdmi_rockchip_probe+0x1c/0x24
> [    8.897370]                      platform_probe+0x90/0xd8
> [    8.897385]                      really_probe+0x114/0x3c0
> [    8.897397]                      __driver_probe_device+0x7c/0x17c
> [    8.897410]                      driver_probe_device+0x38/0x11c
> [    8.897422]                      __device_attach_driver+0xb4/0x164
> [    8.897434]                      bus_for_each_drv+0x78/0xdc
> [    8.897445]                      __device_attach+0xfc/0x1ac
> [    8.897456]                      device_initial_probe+0x10/0x18
> [    8.897469]                      bus_probe_device+0xa8/0xac
> [    8.897480]                      deferred_probe_work_func+0x98/0xe8
> [    8.897492]                      process_scheduled_works+0x23c/0x5b8
> [    8.897506]                      worker_thread+0x188/0x374
> [    8.897518]                      kthread+0xe4/0x10c
> [    8.897529]                      ret_from_fork+0x10/0x20
> [    8.897541]   }
> [    8.897545]   ... key      at: [<ffff800082efc820>]__key.20703+0x0/0x10
> [    8.897561]   ... acquired at:
> [    8.897566]    _raw_spin_lock+0x3c/0x50
> [    8.897580]    regcache_maple_write+0x268/0x314
> [    8.897595]    regcache_write+0x68/0x84
> [    8.897607]    _regmap_read+0xd0/0x1f4
> [    8.897619]    _regmap_update_bits+0xe0/0x140
> [    8.897631]    regmap_update_bits_base+0x60/0x8c
> [    8.897643]    regmap_field_update_bits_base+0x30/0x38
> [    8.897656]    vop2_plane_atomic_update+0x8b0/0x1400
> [    8.897669]    drm_atomic_helper_commit_planes+0xdc/0x2a0
> [    8.897683]    drm_atomic_helper_commit_tail_rpm+0x3c/0x78
> [    8.897697]    commit_tail+0x9c/0x178
> [    8.897709]    drm_atomic_helper_commit+0x17c/0x1ac
> [    8.897722]    drm_atomic_commit+0xac/0xec
> [    8.897735]    drm_client_modeset_commit_atomic+0x230/0x290
> [    8.897746]    drm_client_modeset_commit_locked+0x54/0x1c4
> [    8.897758]    drm_client_modeset_commit+0x2c/0x50
> [    8.897767]    __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
> [    8.897784]    drm_fb_helper_set_par+0x30/0x48
> [    8.897797]    fbcon_init+0x40c/0x498
> [    8.897807]    visual_init+0xb0/0x108
> [    8.897816]    do_bind_con_driver+0x1b8/0x38c
> [    8.897825]    do_take_over_console+0x148/0x1d4
> [    8.897835]    do_fbcon_takeover+0x6c/0xe0
> [    8.897844]    fbcon_fb_registered+0x1f8/0x1fc
> [    8.897854]    register_framebuffer+0x158/0x228
> [    8.897866]    __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
> [    8.897882]    drm_fb_helper_initial_config+0x3c/0x48
> [    8.897895]    drm_fbdev_generic_client_hotplug+0xb8/0xd8
> [    8.897908]    drm_client_register+0x58/0xa0
> [    8.897917]    drm_fbdev_generic_setup+0xbc/0x144
> [    8.897929]    rockchip_drm_bind+0x1ec/0x1f8
> [    8.897941]    try_to_bring_up_aggregate_device+0x278/0x2d8
> [    8.897956]    __component_add+0xac/0x198
> [    8.897967]    component_add+0x10/0x18
> [    8.897979]    dw_hdmi_rockchip_probe+0x1c/0x24
> [    8.897988]    platform_probe+0x90/0xd8
> [    8.898002]    really_probe+0x114/0x3c0
> [    8.898013]    __driver_probe_device+0x7c/0x17c
> [    8.898026]    driver_probe_device+0x38/0x11c
> [    8.898038]    __device_attach_driver+0xb4/0x164
> [    8.898049]    bus_for_each_drv+0x78/0xdc
> [    8.898059]    __device_attach+0xfc/0x1ac
> [    8.898070]    device_initial_probe+0x10/0x18
> [    8.898082]    bus_probe_device+0xa8/0xac
> [    8.898093]    deferred_probe_work_func+0x98/0xe8
> [    8.898105]    process_scheduled_works+0x23c/0x5b8
> [    8.898118]    worker_thread+0x188/0x374
> [    8.898131]    kthread+0xe4/0x10c
> [    8.898142]    ret_from_fork+0x10/0x20
> [    8.898153]
> [    8.898157] ->(rockchip_drm_vop2:3116:(&vop2_regmap_config)->lock){-...}-{2:2} ops: 74
> {
> [    8.898185]    IN-HARDIRQ-W at:
> [    8.898194]                     lock_acquire+0x238/0x354
> [    8.898211]                     _raw_spin_lock_irqsave+0x50/0x6c
> [    8.898227]                     regmap_lock_spinlock+0x14/0x24
> [    8.898238]                     regmap_read+0x38/0x70
> [    8.898250]                     vop2_isr+0x88/0x2ac
> [    8.898263]                     __handle_irq_event_percpu+0xa4/0x2bc
> [    8.898277]                     handle_irq_event_percpu+0x14/0x44
> [    8.898290]                     handle_irq_event+0x44/0x90
> [    8.898300]                     handle_fasteoi_irq+0xf8/0x1d4
> [    8.898314]                     generic_handle_domain_irq+0x28/0x3c
> [    8.898324]                     gic_handle_irq+0xb0/0x130
> [    8.898334]                     call_on_irq_stack+0x24/0x34
> [    8.898345]                     do_interrupt_handler+0xc4/0xdc
> [    8.898359]                     el1_interrupt+0x3c/0x70
> [    8.898375]                     el1h_64_irq_handler+0x14/0x1c
> [    8.898390]                     el1h_64_irq+0x64/0x68
> [    8.898398]                     default_idle_call+0xec/0x118
> [    8.898409]                     do_idle+0x1c8/0x254
> [    8.898420]                     cpu_startup_entry+0x30/0x38
> [    8.898430]                     rest_init+0x13c/0x1cc
> [    8.898440]                     arch_post_acpi_subsys_init+0x0/0x8
> [    8.898455]                     start_kernel+0x7c0/0x968
> [    8.898465]                     __primary_switched+0xb0/0xbc
> [    8.898481]    INITIAL USE at:
> [    8.898492]                    lock_acquire+0x238/0x354
> [    8.898506]                    _raw_spin_lock_irqsave+0x50/0x6c
> [    8.898520]                    regmap_lock_spinlock+0x14/0x24
> [    8.898531]                    regmap_write+0x38/0x70
> [    8.898544]                    vop2_crtc_atomic_enable+0xf64/0x1074
> [    8.898560]                    drm_atomic_helper_commit_modeset_enables+0xac/0x264
> [    8.898575]                    drm_atomic_helper_commit_tail_rpm+0x2c/0x78
> [    8.898589]                    commit_tail+0x9c/0x178
> [    8.898601]                    drm_atomic_helper_commit+0x17c/0x1ac
> [    8.898615]                    drm_atomic_commit+0xac/0xec
> [    8.898628]                    drm_client_modeset_commit_atomic+0x230/0x290
> [    8.898639]                    drm_client_modeset_commit_locked+0x54/0x1c4
> [    8.898649]                    drm_client_modeset_commit+0x2c/0x50
> [    8.898660]                    __drm_fb_helper_restore_fbdev_mode_unlocked+0x88/0xf4
> [    8.898675]                    drm_fb_helper_set_par+0x30/0x48
> [    8.898689]                    fbcon_init+0x40c/0x498
> [    8.898699]                    visual_init+0xb0/0x108
> [    8.898709]                    do_bind_con_driver+0x1b8/0x38c
> [    8.898719]                    do_take_over_console+0x148/0x1d4
> [    8.898730]                    do_fbcon_takeover+0x6c/0xe0
> [    8.898740]                    fbcon_fb_registered+0x1f8/0x1fc
> [    8.898750]                    register_framebuffer+0x158/0x228
> [    8.898763]                    __drm_fb_helper_initial_config_and_unlock+0x304/0x4f8
> [    8.898779]                    drm_fb_helper_initial_config+0x3c/0x48
> [    8.898793]                    drm_fbdev_generic_client_hotplug+0xb8/0xd8
> [    8.898806]                    drm_client_register+0x58/0xa0
> [    8.898815]                    drm_fbdev_generic_setup+0xbc/0x144
> [    8.898830]                    rockchip_drm_bind+0x1ec/0x1f8
> [    8.898842]                    try_to_bring_up_aggregate_device+0x278/0x2d8
> [    8.898858]                    __component_add+0xac/0x198
> [    8.898871]                    component_add+0x10/0x18
> [    8.898885]                    dw_hdmi_rockchip_probe+0x1c/0x24
> [    8.898894]                    platform_probe+0x90/0xd8
> [    8.898909]                    really_probe+0x114/0x3c0
> [    8.898921]                    __driver_probe_device+0x7c/0x17c
> [    8.898933]                    driver_probe_device+0x38/0x11c
> [    8.898945]                    __device_attach_driver+0xb4/0x164
> [    8.898958]                    bus_for_each_drv+0x78/0xdc
> [    8.898969]                    __device_attach+0xfc/0x1ac
> [    8.898980]                    device_initial_probe+0x10/0x18
> [    8.898993]                    bus_probe_device+0xa8/0xac
> [    8.899004]                    deferred_probe_work_func+0x98/0xe8
> [    8.899015]                    process_scheduled_works+0x23c/0x5b8
> [    8.899029]                    worker_thread+0x188/0x374
> [    8.899042]                    kthread+0xe4/0x10c
> [    8.899053]                    ret_from_fork+0x10/0x20
> [    8.899064]  }
> [    8.899069]  ... key      at: [<ffff800082efbe90>]_key.73979+0x0/0x10
> [    8.899086]  ... acquired at:
> [    8.899091]    __lock_acquire+0x9d8/0x1950
> [    8.899104]    lock_acquire+0x238/0x354
> [    8.899117]    _raw_spin_lock_irqsave+0x50/0x6c
> [    8.899131]    regmap_lock_spinlock+0x14/0x24
> [    8.899142]    regmap_read+0x38/0x70
> [    8.899154]    vop2_isr+0x88/0x2ac
> [    8.899166]    __handle_irq_event_percpu+0xa4/0x2bc
> [    8.899178]    handle_irq_event_percpu+0x14/0x44
> [    8.899188]    handle_irq_event+0x44/0x90
> [    8.899198]    handle_fasteoi_irq+0xf8/0x1d4
> [    8.899211]    generic_handle_domain_irq+0x28/0x3c
> [    8.899221]    gic_handle_irq+0xb0/0x130
> [    8.899230]    call_on_irq_stack+0x24/0x34
> [    8.899243]    do_interrupt_handler+0xc4/0xdc
> [    8.899256]    el1_interrupt+0x3c/0x70
> [    8.899270]    el1h_64_irq_handler+0x14/0x1c
> [    8.899285]    el1h_64_irq+0x64/0x68
> [    8.899293]    default_idle_call+0xec/0x118
> [    8.899304]    do_idle+0x1c8/0x254
> [    8.899313]    cpu_startup_entry+0x30/0x38
> [    8.899321]    rest_init+0x13c/0x1cc
> [    8.899331]    arch_post_acpi_subsys_init+0x0/0x8
> [    8.899342]    start_kernel+0x7c0/0x968
> [    8.899351]    __primary_switched+0xb0/0xbc
> [    8.899365]
> [    8.899368]
> [    8.899368] stack backtrace:
> [    8.899376] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc5-next-20231215 #514
> [    8.899386] Hardware name: EmbedFire LubanCat 2 (DT)
> [    8.899394] Call trace:
> [    8.899399]  dump_backtrace+0xe4/0x124
> [    8.899410]  show_stack+0x14/0x1c
> [    8.899419]  dump_stack_lvl+0x78/0xd4
> [    8.899430]  dump_stack+0x14/0x1c
> [    8.899438]  print_irq_inversion_bug+0x28c/0x304
> [    8.899453]  mark_lock.part.43+0x2c0/0x448
> [    8.899466]  __lock_acquire+0x9d8/0x1950
> [    8.899479]  lock_acquire+0x238/0x354
> [    8.899492]  _raw_spin_lock_irqsave+0x50/0x6c
> [    8.899507]  regmap_lock_spinlock+0x14/0x24
> [    8.899517]  regmap_read+0x38/0x70
> [    8.899528]  vop2_isr+0x88/0x2ac
> [    8.899540]  __handle_irq_event_percpu+0xa4/0x2bc
> [    8.899553]  handle_irq_event_percpu+0x14/0x44
> [    8.899565]  handle_irq_event+0x44/0x90
> [    8.899575]  handle_fasteoi_irq+0xf8/0x1d4
> [    8.899589]  generic_handle_domain_irq+0x28/0x3c
> [    8.899599]  gic_handle_irq+0xb0/0x130
> [    8.899608]  call_on_irq_stack+0x24/0x34
> [    8.899619]  do_interrupt_handler+0xc4/0xdc
> [    8.899631]  el1_interrupt+0x3c/0x70
> [    8.899645]  el1h_64_irq_handler+0x14/0x1c
> [    8.899659]  el1h_64_irq+0x64/0x68
> [    8.899669]  default_idle_call+0xec/0x118
> [    8.899679]  do_idle+0x1c8/0x254
> [    8.899689]  cpu_startup_entry+0x30/0x38
> [    8.899698]  rest_init+0x13c/0x1cc
> [    8.899708]  arch_post_acpi_subsys_init+0x0/0x8
> [    8.899720]  start_kernel+0x7c0/0x968
> [    8.899731]  __primary_switched+0xb0/0xbc
> [    8.946839] Console: switching to colour frame buffer device 240x67
> [   10.230883] rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device
>
> Fixes: 81a06f1d02e5 ("Revert "drm/rockchip: vop2: Use regcache_sync() to fix suspend/resume"")
> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Marek Szyprowski <m.szyprowski@samsung.com>
> Closes: https://lore.kernel.org/all/98a9f15d-30ac-47bf-9b93-3aa2c9900f7b@samsung.com/
> Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
> ---
>
>   drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 8 ++------
>   1 file changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
> index 4beb04c83752..f2edaebfcaf9 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
> @@ -993,12 +993,6 @@ static void vop2_enable(struct vop2 *vop2)
>   		return;
>   	}
>   
> -	ret = regmap_reinit_cache(vop2->map, &vop2_regmap_config);
> -	if (ret) {
> -		drm_err(vop2->drm, "failed to reinit cache: %d\n", ret);
> -		return;
> -	}
> -
>   	if (vop2->data->soc_id == 3566)
>   		vop2_writel(vop2, RK3568_OTP_WIN_EN, 1);
>   
> @@ -1030,6 +1024,8 @@ static void vop2_disable(struct vop2 *vop2)
>   
>   	pm_runtime_put_sync(vop2->dev);
>   
> +	regcache_drop_region(vop2->map, 0, vop2_regmap_config.max_register);
> +
>   	clk_disable_unprepare(vop2->pclk);
>   	clk_disable_unprepare(vop2->aclk);
>   	clk_disable_unprepare(vop2->hclk);

Best regards
Heiko Stuebner Dec. 25, 2023, 12:21 a.m. UTC | #2
On Sun, 17 Dec 2023 16:44:15 +0800, Andy Yan wrote:
> From: Andy Yan <andy.yan@rock-chips.com>
> 
> Marek Report a possible irq lock inversion dependency warning when
> commit 81a06f1d02e5 ("Revert "drm/rockchip: vop2: Use regcache_sync()
> to fix suspend/resume"") lands linux-next.
> 
> I can reproduce this warning with:
> CONFIG_PROVE_LOCKING=y
> CONFIG_DEBUG_LOCKDEP=y
> 
> [...]

Applied, thanks!

[1/1] drm/rockchip: vop2: Avoid use regmap_reinit_cache at runtime
      commit: 3ee348eb36f14e9303a7e9757efb91b0bbf3f7a9

Best regards,
diff mbox series

Patch

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
index 4beb04c83752..f2edaebfcaf9 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c
@@ -993,12 +993,6 @@  static void vop2_enable(struct vop2 *vop2)
 		return;
 	}
 
-	ret = regmap_reinit_cache(vop2->map, &vop2_regmap_config);
-	if (ret) {
-		drm_err(vop2->drm, "failed to reinit cache: %d\n", ret);
-		return;
-	}
-
 	if (vop2->data->soc_id == 3566)
 		vop2_writel(vop2, RK3568_OTP_WIN_EN, 1);
 
@@ -1030,6 +1024,8 @@  static void vop2_disable(struct vop2 *vop2)
 
 	pm_runtime_put_sync(vop2->dev);
 
+	regcache_drop_region(vop2->map, 0, vop2_regmap_config.max_register);
+
 	clk_disable_unprepare(vop2->pclk);
 	clk_disable_unprepare(vop2->aclk);
 	clk_disable_unprepare(vop2->hclk);