Message ID | 20231211115719.1784834-1-andyshrk@163.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add VOP2 support on rk3588 | expand |
Dear All, On 11.12.2023 12:57, Andy Yan wrote: > From: Andy Yan <andy.yan@rock-chips.com> > > This reverts commit b63a553e8f5aa6574eeb535a551817a93c426d8c. > > regcache_sync will try to reload the configuration in regcache to > hardware, but the registers of 4 Cluster windows and Esmart1/2/3 on > the upcoming rk3588 can not be set successfully before internal PD > power on. > > Also it's better to keep the hardware register as it is before we really > enable it. > > So let's revert this version, and keep the first version: > commit afa965a45e01 ("drm/rockchip: vop2: fix suspend/resume") > > Signed-off-by: Andy Yan <andy.yan@rock-chips.com> > Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de> This patch landed in today's linux-next as commit 81a06f1d02e5 ("Revert "drm/rockchip: vop2: Use regcache_sync() to fix suspend/resume""). Unfortunately it triggers a following lock dep warning on my Odroid-M1 test board: ======================================================== WARNING: possible irq lock inversion dependency detected 6.7.0-rc3+ #14328 Not tainted -------------------------------------------------------- swapper/0/0 just changed the state of lock: ffff0001f3ae2c18 (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2}, at: regmap_lock_spinlock+0x18/0x2c but this lock took another, HARDIRQ-unsafe lock in the past: (&mt->ma_lock){+.+.}-{2:2} and interrupts could create inverse lock ordering between them. other info that might help us debug this: Possible interrupt unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&mt->ma_lock); local_irq_disable(); lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); lock(&mt->ma_lock); <Interrupt> lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); *** DEADLOCK *** no locks held by swapper/0/0. the shortest dependencies between 2nd lock and 1st lock: -> (&mt->ma_lock){+.+.}-{2:2} { HARDIRQ-ON-W at: lock_acquire+0x1e8/0x318 _raw_spin_lock+0x48/0x60 regcache_maple_exit+0x5c/0xc0 regcache_exit+0x48/0x74 regmap_reinit_cache+0x1c/0xc4 vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] drm_atomic_helper_commit_modeset_enables+0xb4/0x26c drm_atomic_helper_commit_tail_rpm+0x50/0xa0 commit_tail+0xa4/0x18c drm_atomic_helper_commit+0x19c/0x1b0 drm_atomic_commit+0xa8/0xe0 drm_client_modeset_commit_atomic+0x22c/0x298 drm_client_modeset_commit_locked+0x60/0x1c0 drm_client_modeset_commit+0x30/0x58 __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc drm_fb_helper_set_par+0x30/0x4c fbcon_init+0x234/0x4c0 visual_init+0xb0/0x108 do_bind_con_driver.isra.0+0x19c/0x394 do_take_over_console+0x144/0x1f0 do_fbcon_takeover+0x6c/0xe4 fbcon_fb_registered+0x1e0/0x1e8 register_framebuffer+0x19c/0x228 __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc drm_fb_helper_hotplug_event.part.0+0xf0/0x110 drm_fb_helper_hotplug_event+0x38/0x44 drm_fbdev_generic_client_hotplug+0x28/0xd4 drm_client_dev_hotplug+0xcc/0x130 output_poll_execute+0x204/0x23c process_one_work+0x1ec/0x53c worker_thread+0x298/0x408 kthread+0x124/0x128 ret_from_fork+0x10/0x20 SOFTIRQ-ON-W at: lock_acquire+0x1e8/0x318 _raw_spin_lock+0x48/0x60 regcache_maple_exit+0x5c/0xc0 regcache_exit+0x48/0x74 regmap_reinit_cache+0x1c/0xc4 vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] drm_atomic_helper_commit_modeset_enables+0xb4/0x26c drm_atomic_helper_commit_tail_rpm+0x50/0xa0 commit_tail+0xa4/0x18c drm_atomic_helper_commit+0x19c/0x1b0 drm_atomic_commit+0xa8/0xe0 drm_client_modeset_commit_atomic+0x22c/0x298 drm_client_modeset_commit_locked+0x60/0x1c0 drm_client_modeset_commit+0x30/0x58 __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc drm_fb_helper_set_par+0x30/0x4c fbcon_init+0x234/0x4c0 visual_init+0xb0/0x108 do_bind_con_driver.isra.0+0x19c/0x394 do_take_over_console+0x144/0x1f0 do_fbcon_takeover+0x6c/0xe4 fbcon_fb_registered+0x1e0/0x1e8 register_framebuffer+0x19c/0x228 __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc drm_fb_helper_hotplug_event.part.0+0xf0/0x110 drm_fb_helper_hotplug_event+0x38/0x44 drm_fbdev_generic_client_hotplug+0x28/0xd4 drm_client_dev_hotplug+0xcc/0x130 output_poll_execute+0x204/0x23c process_one_work+0x1ec/0x53c worker_thread+0x298/0x408 kthread+0x124/0x128 ret_from_fork+0x10/0x20 INITIAL USE at: lock_acquire+0x1e8/0x318 _raw_spin_lock+0x48/0x60 regcache_maple_exit+0x5c/0xc0 regcache_exit+0x48/0x74 regmap_reinit_cache+0x1c/0xc4 vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] drm_atomic_helper_commit_modeset_enables+0xb4/0x26c drm_atomic_helper_commit_tail_rpm+0x50/0xa0 commit_tail+0xa4/0x18c drm_atomic_helper_commit+0x19c/0x1b0 drm_atomic_commit+0xa8/0xe0 drm_client_modeset_commit_atomic+0x22c/0x298 drm_client_modeset_commit_locked+0x60/0x1c0 drm_client_modeset_commit+0x30/0x58 __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc drm_fb_helper_set_par+0x30/0x4c fbcon_init+0x234/0x4c0 visual_init+0xb0/0x108 do_bind_con_driver.isra.0+0x19c/0x394 do_take_over_console+0x144/0x1f0 do_fbcon_takeover+0x6c/0xe4 fbcon_fb_registered+0x1e0/0x1e8 register_framebuffer+0x19c/0x228 __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc drm_fb_helper_hotplug_event.part.0+0xf0/0x110 drm_fb_helper_hotplug_event+0x38/0x44 drm_fbdev_generic_client_hotplug+0x28/0xd4 drm_client_dev_hotplug+0xcc/0x130 output_poll_execute+0x204/0x23c process_one_work+0x1ec/0x53c worker_thread+0x298/0x408 kthread+0x124/0x128 ret_from_fork+0x10/0x20 } ... key at: [<ffff800083de53b0>] __key.0+0x0/0x10 ... acquired at: _raw_spin_lock+0x48/0x60 regcache_maple_write+0x1d8/0x31c regcache_write+0x6c/0x84 _regmap_read+0x1b4/0x1f4 _regmap_update_bits+0xec/0x134 regmap_field_update_bits_base+0x6c/0xa0 vop2_plane_atomic_update+0x380/0x11d0 [rockchipdrm] drm_atomic_helper_commit_planes+0xec/0x2a0 drm_atomic_helper_commit_tail_rpm+0x60/0xa0 commit_tail+0xa4/0x18c drm_atomic_helper_commit+0x19c/0x1b0 drm_atomic_commit+0xa8/0xe0 drm_client_modeset_commit_atomic+0x22c/0x298 drm_client_modeset_commit_locked+0x60/0x1c0 drm_client_modeset_commit+0x30/0x58 __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc drm_fb_helper_set_par+0x30/0x4c fbcon_init+0x234/0x4c0 visual_init+0xb0/0x108 do_bind_con_driver.isra.0+0x19c/0x394 do_take_over_console+0x144/0x1f0 do_fbcon_takeover+0x6c/0xe4 fbcon_fb_registered+0x1e0/0x1e8 register_framebuffer+0x19c/0x228 __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc drm_fb_helper_hotplug_event.part.0+0xf0/0x110 drm_fb_helper_hotplug_event+0x38/0x44 drm_fbdev_generic_client_hotplug+0x28/0xd4 drm_client_dev_hotplug+0xcc/0x130 output_poll_execute+0x204/0x23c process_one_work+0x1ec/0x53c worker_thread+0x298/0x408 kthread+0x124/0x128 ret_from_fork+0x10/0x20 -> (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2} { IN-HARDIRQ-W at: lock_acquire+0x1e8/0x318 _raw_spin_lock_irqsave+0x60/0x88 regmap_lock_spinlock+0x18/0x2c regmap_read+0x3c/0x78 vop2_isr+0x84/0x2a4 [rockchipdrm] __handle_irq_event_percpu+0xb0/0x2d4 handle_irq_event+0x4c/0xb8 handle_fasteoi_irq+0xa4/0x1cc generic_handle_domain_irq+0x2c/0x44 gic_handle_irq+0x4c/0x110 call_on_irq_stack+0x24/0x4c do_interrupt_handler+0x80/0x84 el1_interrupt+0x34/0x64 el1h_64_irq_handler+0x18/0x24 el1h_64_irq+0x64/0x68 default_idle_call+0x9c/0x150 do_idle+0x230/0x294 cpu_startup_entry+0x34/0x3c rest_init+0x100/0x190 arch_post_acpi_subsys_init+0x0/0x8 start_kernel+0x594/0x684 __primary_switched+0xbc/0xc4 INITIAL USE at: lock_acquire+0x1e8/0x318 _raw_spin_lock_irqsave+0x60/0x88 regmap_lock_spinlock+0x18/0x2c regmap_write+0x3c/0x78 vop2_crtc_atomic_enable+0x894/0xa0c [rockchipdrm] drm_atomic_helper_commit_modeset_enables+0xb4/0x26c drm_atomic_helper_commit_tail_rpm+0x50/0xa0 commit_tail+0xa4/0x18c drm_atomic_helper_commit+0x19c/0x1b0 drm_atomic_commit+0xa8/0xe0 drm_client_modeset_commit_atomic+0x22c/0x298 drm_client_modeset_commit_locked+0x60/0x1c0 drm_client_modeset_commit+0x30/0x58 __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc drm_fb_helper_set_par+0x30/0x4c fbcon_init+0x234/0x4c0 visual_init+0xb0/0x108 do_bind_con_driver.isra.0+0x19c/0x394 do_take_over_console+0x144/0x1f0 do_fbcon_takeover+0x6c/0xe4 fbcon_fb_registered+0x1e0/0x1e8 register_framebuffer+0x19c/0x228 __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc drm_fb_helper_hotplug_event.part.0+0xf0/0x110 drm_fb_helper_hotplug_event+0x38/0x44 drm_fbdev_generic_client_hotplug+0x28/0xd4 drm_client_dev_hotplug+0xcc/0x130 output_poll_execute+0x204/0x23c process_one_work+0x1ec/0x53c worker_thread+0x298/0x408 kthread+0x124/0x128 ret_from_fork+0x10/0x20 } ... key at: [<ffff80007c090a18>] _key.6+0x0/0xffffffffffffd5e8 [rockchipdrm] ... acquired at: __lock_acquire+0xad8/0x20c4 lock_acquire+0x1e8/0x318 _raw_spin_lock_irqsave+0x60/0x88 regmap_lock_spinlock+0x18/0x2c regmap_read+0x3c/0x78 vop2_isr+0x84/0x2a4 [rockchipdrm] __handle_irq_event_percpu+0xb0/0x2d4 handle_irq_event+0x4c/0xb8 handle_fasteoi_irq+0xa4/0x1cc generic_handle_domain_irq+0x2c/0x44 gic_handle_irq+0x4c/0x110 call_on_irq_stack+0x24/0x4c do_interrupt_handler+0x80/0x84 el1_interrupt+0x34/0x64 el1h_64_irq_handler+0x18/0x24 el1h_64_irq+0x64/0x68 default_idle_call+0x9c/0x150 do_idle+0x230/0x294 cpu_startup_entry+0x34/0x3c rest_init+0x100/0x190 arch_post_acpi_subsys_init+0x0/0x8 start_kernel+0x594/0x684 __primary_switched+0xbc/0xc4 stack backtrace: CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc3+ #14328 Hardware name: Hardkernel ODROID-M1 (DT) Call trace: dump_backtrace+0x98/0xf0 show_stack+0x18/0x24 dump_stack_lvl+0x60/0xac dump_stack+0x18/0x24 print_irq_inversion_bug.part.0+0x1ec/0x27c mark_lock+0x634/0x950 __lock_acquire+0xad8/0x20c4 lock_acquire+0x1e8/0x318 _raw_spin_lock_irqsave+0x60/0x88 regmap_lock_spinlock+0x18/0x2c regmap_read+0x3c/0x78 vop2_isr+0x84/0x2a4 [rockchipdrm] __handle_irq_event_percpu+0xb0/0x2d4 handle_irq_event+0x4c/0xb8 handle_fasteoi_irq+0xa4/0x1cc generic_handle_domain_irq+0x2c/0x44 gic_handle_irq+0x4c/0x110 call_on_irq_stack+0x24/0x4c do_interrupt_handler+0x80/0x84 el1_interrupt+0x34/0x64 el1h_64_irq_handler+0x18/0x24 el1h_64_irq+0x64/0x68 default_idle_call+0x9c/0x150 do_idle+0x230/0x294 cpu_startup_entry+0x34/0x3c rest_init+0x100/0x190 arch_post_acpi_subsys_init+0x0/0x8 start_kernel+0x594/0x684 __primary_switched+0xbc/0xc4 Console: switching to colour frame buffer device 240x67 rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device Reverting it on top of next-20231214 and resolving a conflict fixes/hides the above lock dep issue. > --- > > (no changes since v1) > > drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > index 312da5783362..57784d0a22a6 100644 > --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c > @@ -217,6 +217,8 @@ struct vop2 { > struct vop2_win win[]; > }; > > +static const struct regmap_config vop2_regmap_config; > + > static struct vop2_video_port *to_vop2_video_port(struct drm_crtc *crtc) > { > return container_of(crtc, struct vop2_video_port, crtc); > @@ -883,7 +885,11 @@ static void vop2_enable(struct vop2 *vop2) > return; > } > > - regcache_sync(vop2->map); > + 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); > @@ -913,8 +919,6 @@ static void vop2_disable(struct vop2 *vop2) > > pm_runtime_put_sync(vop2->dev); > > - regcache_mark_dirty(vop2->map); > - > clk_disable_unprepare(vop2->aclk); > clk_disable_unprepare(vop2->hclk); > } Best regards
Hi Marek: Sorry for this issue. I also tested this series on RK3568/6 before I send them out. But I didn't find anyahing unusal, would you please share the linux kernel defconfig you used for this test and it would be greatly appreciated if you can share more test detial. On 12/14/23 20:13, Marek Szyprowski wrote: > Dear All, > > On 11.12.2023 12:57, Andy Yan wrote: >> From: Andy Yan <andy.yan@rock-chips.com> >> >> This reverts commit b63a553e8f5aa6574eeb535a551817a93c426d8c. >> >> regcache_sync will try to reload the configuration in regcache to >> hardware, but the registers of 4 Cluster windows and Esmart1/2/3 on >> the upcoming rk3588 can not be set successfully before internal PD >> power on. >> >> Also it's better to keep the hardware register as it is before we really >> enable it. >> >> So let's revert this version, and keep the first version: >> commit afa965a45e01 ("drm/rockchip: vop2: fix suspend/resume") >> >> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >> Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de> > > This patch landed in today's linux-next as commit 81a06f1d02e5 ("Revert > "drm/rockchip: vop2: Use regcache_sync() to fix suspend/resume""). > Unfortunately it triggers a following lock dep warning on my Odroid-M1 > test board: > > ======================================================== > WARNING: possible irq lock inversion dependency detected > 6.7.0-rc3+ #14328 Not tainted > -------------------------------------------------------- > swapper/0/0 just changed the state of lock: > ffff0001f3ae2c18 > (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2}, at: > regmap_lock_spinlock+0x18/0x2c > but this lock took another, HARDIRQ-unsafe lock in the past: > (&mt->ma_lock){+.+.}-{2:2} > > > and interrupts could create inverse lock ordering between them. > > > other info that might help us debug this: > Possible interrupt unsafe locking scenario: > > CPU0 CPU1 > ---- ---- > lock(&mt->ma_lock); > local_irq_disable(); > lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); > lock(&mt->ma_lock); > <Interrupt> > lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); > > *** DEADLOCK *** > > no locks held by swapper/0/0. > > the shortest dependencies between 2nd lock and 1st lock: > -> (&mt->ma_lock){+.+.}-{2:2} { > HARDIRQ-ON-W at: > lock_acquire+0x1e8/0x318 > _raw_spin_lock+0x48/0x60 > regcache_maple_exit+0x5c/0xc0 > regcache_exit+0x48/0x74 > regmap_reinit_cache+0x1c/0xc4 > vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] > drm_atomic_helper_commit_modeset_enables+0xb4/0x26c > drm_atomic_helper_commit_tail_rpm+0x50/0xa0 > commit_tail+0xa4/0x18c > drm_atomic_helper_commit+0x19c/0x1b0 > drm_atomic_commit+0xa8/0xe0 > drm_client_modeset_commit_atomic+0x22c/0x298 > drm_client_modeset_commit_locked+0x60/0x1c0 > drm_client_modeset_commit+0x30/0x58 > __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc > drm_fb_helper_set_par+0x30/0x4c > fbcon_init+0x234/0x4c0 > visual_init+0xb0/0x108 > do_bind_con_driver.isra.0+0x19c/0x394 > do_take_over_console+0x144/0x1f0 > do_fbcon_takeover+0x6c/0xe4 > fbcon_fb_registered+0x1e0/0x1e8 > register_framebuffer+0x19c/0x228 > __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc > drm_fb_helper_hotplug_event.part.0+0xf0/0x110 > drm_fb_helper_hotplug_event+0x38/0x44 > drm_fbdev_generic_client_hotplug+0x28/0xd4 > drm_client_dev_hotplug+0xcc/0x130 > output_poll_execute+0x204/0x23c > process_one_work+0x1ec/0x53c > worker_thread+0x298/0x408 > kthread+0x124/0x128 > ret_from_fork+0x10/0x20 > SOFTIRQ-ON-W at: > lock_acquire+0x1e8/0x318 > _raw_spin_lock+0x48/0x60 > regcache_maple_exit+0x5c/0xc0 > regcache_exit+0x48/0x74 > regmap_reinit_cache+0x1c/0xc4 > vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] > drm_atomic_helper_commit_modeset_enables+0xb4/0x26c > drm_atomic_helper_commit_tail_rpm+0x50/0xa0 > commit_tail+0xa4/0x18c > drm_atomic_helper_commit+0x19c/0x1b0 > drm_atomic_commit+0xa8/0xe0 > drm_client_modeset_commit_atomic+0x22c/0x298 > drm_client_modeset_commit_locked+0x60/0x1c0 > drm_client_modeset_commit+0x30/0x58 > __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc > drm_fb_helper_set_par+0x30/0x4c > fbcon_init+0x234/0x4c0 > visual_init+0xb0/0x108 > do_bind_con_driver.isra.0+0x19c/0x394 > do_take_over_console+0x144/0x1f0 > do_fbcon_takeover+0x6c/0xe4 > fbcon_fb_registered+0x1e0/0x1e8 > register_framebuffer+0x19c/0x228 > __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc > drm_fb_helper_hotplug_event.part.0+0xf0/0x110 > drm_fb_helper_hotplug_event+0x38/0x44 > drm_fbdev_generic_client_hotplug+0x28/0xd4 > drm_client_dev_hotplug+0xcc/0x130 > output_poll_execute+0x204/0x23c > process_one_work+0x1ec/0x53c > worker_thread+0x298/0x408 > kthread+0x124/0x128 > ret_from_fork+0x10/0x20 > INITIAL USE at: > lock_acquire+0x1e8/0x318 > _raw_spin_lock+0x48/0x60 > regcache_maple_exit+0x5c/0xc0 > regcache_exit+0x48/0x74 > regmap_reinit_cache+0x1c/0xc4 > vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] > drm_atomic_helper_commit_modeset_enables+0xb4/0x26c > drm_atomic_helper_commit_tail_rpm+0x50/0xa0 > commit_tail+0xa4/0x18c > drm_atomic_helper_commit+0x19c/0x1b0 > drm_atomic_commit+0xa8/0xe0 > drm_client_modeset_commit_atomic+0x22c/0x298 > drm_client_modeset_commit_locked+0x60/0x1c0 > drm_client_modeset_commit+0x30/0x58 > __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc > drm_fb_helper_set_par+0x30/0x4c > fbcon_init+0x234/0x4c0 > visual_init+0xb0/0x108 > do_bind_con_driver.isra.0+0x19c/0x394 > do_take_over_console+0x144/0x1f0 > do_fbcon_takeover+0x6c/0xe4 > fbcon_fb_registered+0x1e0/0x1e8 > register_framebuffer+0x19c/0x228 > __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc > drm_fb_helper_hotplug_event.part.0+0xf0/0x110 > drm_fb_helper_hotplug_event+0x38/0x44 > drm_fbdev_generic_client_hotplug+0x28/0xd4 > drm_client_dev_hotplug+0xcc/0x130 > output_poll_execute+0x204/0x23c > process_one_work+0x1ec/0x53c > worker_thread+0x298/0x408 > kthread+0x124/0x128 > ret_from_fork+0x10/0x20 > } > ... key at: [<ffff800083de53b0>] __key.0+0x0/0x10 > ... acquired at: > _raw_spin_lock+0x48/0x60 > regcache_maple_write+0x1d8/0x31c > regcache_write+0x6c/0x84 > _regmap_read+0x1b4/0x1f4 > _regmap_update_bits+0xec/0x134 > regmap_field_update_bits_base+0x6c/0xa0 > vop2_plane_atomic_update+0x380/0x11d0 [rockchipdrm] > drm_atomic_helper_commit_planes+0xec/0x2a0 > drm_atomic_helper_commit_tail_rpm+0x60/0xa0 > commit_tail+0xa4/0x18c > drm_atomic_helper_commit+0x19c/0x1b0 > drm_atomic_commit+0xa8/0xe0 > drm_client_modeset_commit_atomic+0x22c/0x298 > drm_client_modeset_commit_locked+0x60/0x1c0 > drm_client_modeset_commit+0x30/0x58 > __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc > drm_fb_helper_set_par+0x30/0x4c > fbcon_init+0x234/0x4c0 > visual_init+0xb0/0x108 > do_bind_con_driver.isra.0+0x19c/0x394 > do_take_over_console+0x144/0x1f0 > do_fbcon_takeover+0x6c/0xe4 > fbcon_fb_registered+0x1e0/0x1e8 > register_framebuffer+0x19c/0x228 > __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc > drm_fb_helper_hotplug_event.part.0+0xf0/0x110 > drm_fb_helper_hotplug_event+0x38/0x44 > drm_fbdev_generic_client_hotplug+0x28/0xd4 > drm_client_dev_hotplug+0xcc/0x130 > output_poll_execute+0x204/0x23c > process_one_work+0x1ec/0x53c > worker_thread+0x298/0x408 > kthread+0x124/0x128 > ret_from_fork+0x10/0x20 > > -> (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2} { > IN-HARDIRQ-W at: > lock_acquire+0x1e8/0x318 > _raw_spin_lock_irqsave+0x60/0x88 > regmap_lock_spinlock+0x18/0x2c > regmap_read+0x3c/0x78 > vop2_isr+0x84/0x2a4 [rockchipdrm] > __handle_irq_event_percpu+0xb0/0x2d4 > handle_irq_event+0x4c/0xb8 > handle_fasteoi_irq+0xa4/0x1cc > generic_handle_domain_irq+0x2c/0x44 > gic_handle_irq+0x4c/0x110 > call_on_irq_stack+0x24/0x4c > do_interrupt_handler+0x80/0x84 > el1_interrupt+0x34/0x64 > el1h_64_irq_handler+0x18/0x24 > el1h_64_irq+0x64/0x68 > default_idle_call+0x9c/0x150 > do_idle+0x230/0x294 > cpu_startup_entry+0x34/0x3c > rest_init+0x100/0x190 > arch_post_acpi_subsys_init+0x0/0x8 > start_kernel+0x594/0x684 > __primary_switched+0xbc/0xc4 > INITIAL USE at: > lock_acquire+0x1e8/0x318 > _raw_spin_lock_irqsave+0x60/0x88 > regmap_lock_spinlock+0x18/0x2c > regmap_write+0x3c/0x78 > vop2_crtc_atomic_enable+0x894/0xa0c [rockchipdrm] > drm_atomic_helper_commit_modeset_enables+0xb4/0x26c > drm_atomic_helper_commit_tail_rpm+0x50/0xa0 > commit_tail+0xa4/0x18c > drm_atomic_helper_commit+0x19c/0x1b0 > drm_atomic_commit+0xa8/0xe0 > drm_client_modeset_commit_atomic+0x22c/0x298 > drm_client_modeset_commit_locked+0x60/0x1c0 > drm_client_modeset_commit+0x30/0x58 > __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc > drm_fb_helper_set_par+0x30/0x4c > fbcon_init+0x234/0x4c0 > visual_init+0xb0/0x108 > do_bind_con_driver.isra.0+0x19c/0x394 > do_take_over_console+0x144/0x1f0 > do_fbcon_takeover+0x6c/0xe4 > fbcon_fb_registered+0x1e0/0x1e8 > register_framebuffer+0x19c/0x228 > __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc > drm_fb_helper_hotplug_event.part.0+0xf0/0x110 > drm_fb_helper_hotplug_event+0x38/0x44 > drm_fbdev_generic_client_hotplug+0x28/0xd4 > drm_client_dev_hotplug+0xcc/0x130 > output_poll_execute+0x204/0x23c > process_one_work+0x1ec/0x53c > worker_thread+0x298/0x408 > kthread+0x124/0x128 > ret_from_fork+0x10/0x20 > } > ... key at: [<ffff80007c090a18>] _key.6+0x0/0xffffffffffffd5e8 > [rockchipdrm] > ... acquired at: > __lock_acquire+0xad8/0x20c4 > lock_acquire+0x1e8/0x318 > _raw_spin_lock_irqsave+0x60/0x88 > regmap_lock_spinlock+0x18/0x2c > regmap_read+0x3c/0x78 > vop2_isr+0x84/0x2a4 [rockchipdrm] > __handle_irq_event_percpu+0xb0/0x2d4 > handle_irq_event+0x4c/0xb8 > handle_fasteoi_irq+0xa4/0x1cc > generic_handle_domain_irq+0x2c/0x44 > gic_handle_irq+0x4c/0x110 > call_on_irq_stack+0x24/0x4c > do_interrupt_handler+0x80/0x84 > el1_interrupt+0x34/0x64 > el1h_64_irq_handler+0x18/0x24 > el1h_64_irq+0x64/0x68 > default_idle_call+0x9c/0x150 > do_idle+0x230/0x294 > cpu_startup_entry+0x34/0x3c > rest_init+0x100/0x190 > arch_post_acpi_subsys_init+0x0/0x8 > start_kernel+0x594/0x684 > __primary_switched+0xbc/0xc4 > > > stack backtrace: > CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc3+ #14328 > Hardware name: Hardkernel ODROID-M1 (DT) > Call trace: > dump_backtrace+0x98/0xf0 > show_stack+0x18/0x24 > dump_stack_lvl+0x60/0xac > dump_stack+0x18/0x24 > print_irq_inversion_bug.part.0+0x1ec/0x27c > mark_lock+0x634/0x950 > __lock_acquire+0xad8/0x20c4 > lock_acquire+0x1e8/0x318 > _raw_spin_lock_irqsave+0x60/0x88 > regmap_lock_spinlock+0x18/0x2c > regmap_read+0x3c/0x78 > vop2_isr+0x84/0x2a4 [rockchipdrm] > __handle_irq_event_percpu+0xb0/0x2d4 > handle_irq_event+0x4c/0xb8 > handle_fasteoi_irq+0xa4/0x1cc > generic_handle_domain_irq+0x2c/0x44 > gic_handle_irq+0x4c/0x110 > call_on_irq_stack+0x24/0x4c > do_interrupt_handler+0x80/0x84 > el1_interrupt+0x34/0x64 > el1h_64_irq_handler+0x18/0x24 > el1h_64_irq+0x64/0x68 > default_idle_call+0x9c/0x150 > do_idle+0x230/0x294 > cpu_startup_entry+0x34/0x3c > rest_init+0x100/0x190 > arch_post_acpi_subsys_init+0x0/0x8 > start_kernel+0x594/0x684 > __primary_switched+0xbc/0xc4 > Console: switching to colour frame buffer device 240x67 > rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device > > > Reverting it on top of next-20231214 and resolving a conflict > fixes/hides the above lock dep issue. > > >> --- >> >> (no changes since v1) >> >> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 10 +++++++--- >> 1 file changed, 7 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >> index 312da5783362..57784d0a22a6 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >> @@ -217,6 +217,8 @@ struct vop2 { >> struct vop2_win win[]; >> }; >> >> +static const struct regmap_config vop2_regmap_config; >> + >> static struct vop2_video_port *to_vop2_video_port(struct drm_crtc *crtc) >> { >> return container_of(crtc, struct vop2_video_port, crtc); >> @@ -883,7 +885,11 @@ static void vop2_enable(struct vop2 *vop2) >> return; >> } >> >> - regcache_sync(vop2->map); >> + 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); >> @@ -913,8 +919,6 @@ static void vop2_disable(struct vop2 *vop2) >> >> pm_runtime_put_sync(vop2->dev); >> >> - regcache_mark_dirty(vop2->map); >> - >> clk_disable_unprepare(vop2->aclk); >> clk_disable_unprepare(vop2->hclk); >> } > > Best regards
Hi Marek: On 12/15/23 08:59, Andy Yan wrote: > Hi Marek: > > Sorry for this issue. > I also tested this series on RK3568/6 before I send them out. > But I didn't find anyahing unusal, would you please share the > linux kernel defconfig you used for this test and it would be > greatly appreciated if you can share more test detial. I can reproduce this warning when enable CONFIG_LOCKDEP, I will try to fix it asap. Thanks. > > On 12/14/23 20:13, Marek Szyprowski wrote: >> Dear All, >> >> On 11.12.2023 12:57, Andy Yan wrote: >>> From: Andy Yan <andy.yan@rock-chips.com> >>> >>> This reverts commit b63a553e8f5aa6574eeb535a551817a93c426d8c. >>> >>> regcache_sync will try to reload the configuration in regcache to >>> hardware, but the registers of 4 Cluster windows and Esmart1/2/3 on >>> the upcoming rk3588 can not be set successfully before internal PD >>> power on. >>> >>> Also it's better to keep the hardware register as it is before we really >>> enable it. >>> >>> So let's revert this version, and keep the first version: >>> commit afa965a45e01 ("drm/rockchip: vop2: fix suspend/resume") >>> >>> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >>> Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de> >> >> This patch landed in today's linux-next as commit 81a06f1d02e5 ("Revert >> "drm/rockchip: vop2: Use regcache_sync() to fix suspend/resume""). >> Unfortunately it triggers a following lock dep warning on my Odroid-M1 >> test board: >> >> ======================================================== >> WARNING: possible irq lock inversion dependency detected >> 6.7.0-rc3+ #14328 Not tainted >> -------------------------------------------------------- >> swapper/0/0 just changed the state of lock: >> ffff0001f3ae2c18 >> (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2}, at: >> regmap_lock_spinlock+0x18/0x2c >> but this lock took another, HARDIRQ-unsafe lock in the past: >> (&mt->ma_lock){+.+.}-{2:2} >> >> >> and interrupts could create inverse lock ordering between them. >> >> >> other info that might help us debug this: >> Possible interrupt unsafe locking scenario: >> >> CPU0 CPU1 >> ---- ---- >> lock(&mt->ma_lock); >> local_irq_disable(); >> lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); >> lock(&mt->ma_lock); >> <Interrupt> >> lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); >> >> *** DEADLOCK *** >> >> no locks held by swapper/0/0. >> >> the shortest dependencies between 2nd lock and 1st lock: >> -> (&mt->ma_lock){+.+.}-{2:2} { >> HARDIRQ-ON-W at: >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock+0x48/0x60 >> regcache_maple_exit+0x5c/0xc0 >> regcache_exit+0x48/0x74 >> regmap_reinit_cache+0x1c/0xc4 >> vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] >> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >> commit_tail+0xa4/0x18c >> drm_atomic_helper_commit+0x19c/0x1b0 >> drm_atomic_commit+0xa8/0xe0 >> drm_client_modeset_commit_atomic+0x22c/0x298 >> drm_client_modeset_commit_locked+0x60/0x1c0 >> drm_client_modeset_commit+0x30/0x58 >> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >> drm_fb_helper_set_par+0x30/0x4c >> fbcon_init+0x234/0x4c0 >> visual_init+0xb0/0x108 >> do_bind_con_driver.isra.0+0x19c/0x394 >> do_take_over_console+0x144/0x1f0 >> do_fbcon_takeover+0x6c/0xe4 >> fbcon_fb_registered+0x1e0/0x1e8 >> register_framebuffer+0x19c/0x228 >> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >> drm_fb_helper_hotplug_event+0x38/0x44 >> drm_fbdev_generic_client_hotplug+0x28/0xd4 >> drm_client_dev_hotplug+0xcc/0x130 >> output_poll_execute+0x204/0x23c >> process_one_work+0x1ec/0x53c >> worker_thread+0x298/0x408 >> kthread+0x124/0x128 >> ret_from_fork+0x10/0x20 >> SOFTIRQ-ON-W at: >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock+0x48/0x60 >> regcache_maple_exit+0x5c/0xc0 >> regcache_exit+0x48/0x74 >> regmap_reinit_cache+0x1c/0xc4 >> vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] >> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >> commit_tail+0xa4/0x18c >> drm_atomic_helper_commit+0x19c/0x1b0 >> drm_atomic_commit+0xa8/0xe0 >> drm_client_modeset_commit_atomic+0x22c/0x298 >> drm_client_modeset_commit_locked+0x60/0x1c0 >> drm_client_modeset_commit+0x30/0x58 >> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >> drm_fb_helper_set_par+0x30/0x4c >> fbcon_init+0x234/0x4c0 >> visual_init+0xb0/0x108 >> do_bind_con_driver.isra.0+0x19c/0x394 >> do_take_over_console+0x144/0x1f0 >> do_fbcon_takeover+0x6c/0xe4 >> fbcon_fb_registered+0x1e0/0x1e8 >> register_framebuffer+0x19c/0x228 >> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >> drm_fb_helper_hotplug_event+0x38/0x44 >> drm_fbdev_generic_client_hotplug+0x28/0xd4 >> drm_client_dev_hotplug+0xcc/0x130 >> output_poll_execute+0x204/0x23c >> process_one_work+0x1ec/0x53c >> worker_thread+0x298/0x408 >> kthread+0x124/0x128 >> ret_from_fork+0x10/0x20 >> INITIAL USE at: >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock+0x48/0x60 >> regcache_maple_exit+0x5c/0xc0 >> regcache_exit+0x48/0x74 >> regmap_reinit_cache+0x1c/0xc4 >> vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] >> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >> commit_tail+0xa4/0x18c >> drm_atomic_helper_commit+0x19c/0x1b0 >> drm_atomic_commit+0xa8/0xe0 >> drm_client_modeset_commit_atomic+0x22c/0x298 >> drm_client_modeset_commit_locked+0x60/0x1c0 >> drm_client_modeset_commit+0x30/0x58 >> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >> drm_fb_helper_set_par+0x30/0x4c >> fbcon_init+0x234/0x4c0 >> visual_init+0xb0/0x108 >> do_bind_con_driver.isra.0+0x19c/0x394 >> do_take_over_console+0x144/0x1f0 >> do_fbcon_takeover+0x6c/0xe4 >> fbcon_fb_registered+0x1e0/0x1e8 >> register_framebuffer+0x19c/0x228 >> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >> drm_fb_helper_hotplug_event+0x38/0x44 >> drm_fbdev_generic_client_hotplug+0x28/0xd4 >> drm_client_dev_hotplug+0xcc/0x130 >> output_poll_execute+0x204/0x23c >> process_one_work+0x1ec/0x53c >> worker_thread+0x298/0x408 >> kthread+0x124/0x128 >> ret_from_fork+0x10/0x20 >> } >> ... key at: [<ffff800083de53b0>] __key.0+0x0/0x10 >> ... acquired at: >> _raw_spin_lock+0x48/0x60 >> regcache_maple_write+0x1d8/0x31c >> regcache_write+0x6c/0x84 >> _regmap_read+0x1b4/0x1f4 >> _regmap_update_bits+0xec/0x134 >> regmap_field_update_bits_base+0x6c/0xa0 >> vop2_plane_atomic_update+0x380/0x11d0 [rockchipdrm] >> drm_atomic_helper_commit_planes+0xec/0x2a0 >> drm_atomic_helper_commit_tail_rpm+0x60/0xa0 >> commit_tail+0xa4/0x18c >> drm_atomic_helper_commit+0x19c/0x1b0 >> drm_atomic_commit+0xa8/0xe0 >> drm_client_modeset_commit_atomic+0x22c/0x298 >> drm_client_modeset_commit_locked+0x60/0x1c0 >> drm_client_modeset_commit+0x30/0x58 >> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >> drm_fb_helper_set_par+0x30/0x4c >> fbcon_init+0x234/0x4c0 >> visual_init+0xb0/0x108 >> do_bind_con_driver.isra.0+0x19c/0x394 >> do_take_over_console+0x144/0x1f0 >> do_fbcon_takeover+0x6c/0xe4 >> fbcon_fb_registered+0x1e0/0x1e8 >> register_framebuffer+0x19c/0x228 >> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >> drm_fb_helper_hotplug_event+0x38/0x44 >> drm_fbdev_generic_client_hotplug+0x28/0xd4 >> drm_client_dev_hotplug+0xcc/0x130 >> output_poll_execute+0x204/0x23c >> process_one_work+0x1ec/0x53c >> worker_thread+0x298/0x408 >> kthread+0x124/0x128 >> ret_from_fork+0x10/0x20 >> >> -> (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2} { >> IN-HARDIRQ-W at: >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock_irqsave+0x60/0x88 >> regmap_lock_spinlock+0x18/0x2c >> regmap_read+0x3c/0x78 >> vop2_isr+0x84/0x2a4 [rockchipdrm] >> __handle_irq_event_percpu+0xb0/0x2d4 >> handle_irq_event+0x4c/0xb8 >> handle_fasteoi_irq+0xa4/0x1cc >> generic_handle_domain_irq+0x2c/0x44 >> gic_handle_irq+0x4c/0x110 >> call_on_irq_stack+0x24/0x4c >> do_interrupt_handler+0x80/0x84 >> el1_interrupt+0x34/0x64 >> el1h_64_irq_handler+0x18/0x24 >> el1h_64_irq+0x64/0x68 >> default_idle_call+0x9c/0x150 >> do_idle+0x230/0x294 >> cpu_startup_entry+0x34/0x3c >> rest_init+0x100/0x190 >> arch_post_acpi_subsys_init+0x0/0x8 >> start_kernel+0x594/0x684 >> __primary_switched+0xbc/0xc4 >> INITIAL USE at: >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock_irqsave+0x60/0x88 >> regmap_lock_spinlock+0x18/0x2c >> regmap_write+0x3c/0x78 >> vop2_crtc_atomic_enable+0x894/0xa0c [rockchipdrm] >> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >> commit_tail+0xa4/0x18c >> drm_atomic_helper_commit+0x19c/0x1b0 >> drm_atomic_commit+0xa8/0xe0 >> drm_client_modeset_commit_atomic+0x22c/0x298 >> drm_client_modeset_commit_locked+0x60/0x1c0 >> drm_client_modeset_commit+0x30/0x58 >> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >> drm_fb_helper_set_par+0x30/0x4c >> fbcon_init+0x234/0x4c0 >> visual_init+0xb0/0x108 >> do_bind_con_driver.isra.0+0x19c/0x394 >> do_take_over_console+0x144/0x1f0 >> do_fbcon_takeover+0x6c/0xe4 >> fbcon_fb_registered+0x1e0/0x1e8 >> register_framebuffer+0x19c/0x228 >> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >> drm_fb_helper_hotplug_event+0x38/0x44 >> drm_fbdev_generic_client_hotplug+0x28/0xd4 >> drm_client_dev_hotplug+0xcc/0x130 >> output_poll_execute+0x204/0x23c >> process_one_work+0x1ec/0x53c >> worker_thread+0x298/0x408 >> kthread+0x124/0x128 >> ret_from_fork+0x10/0x20 >> } >> ... key at: [<ffff80007c090a18>] _key.6+0x0/0xffffffffffffd5e8 >> [rockchipdrm] >> ... acquired at: >> __lock_acquire+0xad8/0x20c4 >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock_irqsave+0x60/0x88 >> regmap_lock_spinlock+0x18/0x2c >> regmap_read+0x3c/0x78 >> vop2_isr+0x84/0x2a4 [rockchipdrm] >> __handle_irq_event_percpu+0xb0/0x2d4 >> handle_irq_event+0x4c/0xb8 >> handle_fasteoi_irq+0xa4/0x1cc >> generic_handle_domain_irq+0x2c/0x44 >> gic_handle_irq+0x4c/0x110 >> call_on_irq_stack+0x24/0x4c >> do_interrupt_handler+0x80/0x84 >> el1_interrupt+0x34/0x64 >> el1h_64_irq_handler+0x18/0x24 >> el1h_64_irq+0x64/0x68 >> default_idle_call+0x9c/0x150 >> do_idle+0x230/0x294 >> cpu_startup_entry+0x34/0x3c >> rest_init+0x100/0x190 >> arch_post_acpi_subsys_init+0x0/0x8 >> start_kernel+0x594/0x684 >> __primary_switched+0xbc/0xc4 >> >> >> stack backtrace: >> CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc3+ #14328 >> Hardware name: Hardkernel ODROID-M1 (DT) >> Call trace: >> dump_backtrace+0x98/0xf0 >> show_stack+0x18/0x24 >> dump_stack_lvl+0x60/0xac >> dump_stack+0x18/0x24 >> print_irq_inversion_bug.part.0+0x1ec/0x27c >> mark_lock+0x634/0x950 >> __lock_acquire+0xad8/0x20c4 >> lock_acquire+0x1e8/0x318 >> _raw_spin_lock_irqsave+0x60/0x88 >> regmap_lock_spinlock+0x18/0x2c >> regmap_read+0x3c/0x78 >> vop2_isr+0x84/0x2a4 [rockchipdrm] >> __handle_irq_event_percpu+0xb0/0x2d4 >> handle_irq_event+0x4c/0xb8 >> handle_fasteoi_irq+0xa4/0x1cc >> generic_handle_domain_irq+0x2c/0x44 >> gic_handle_irq+0x4c/0x110 >> call_on_irq_stack+0x24/0x4c >> do_interrupt_handler+0x80/0x84 >> el1_interrupt+0x34/0x64 >> el1h_64_irq_handler+0x18/0x24 >> el1h_64_irq+0x64/0x68 >> default_idle_call+0x9c/0x150 >> do_idle+0x230/0x294 >> cpu_startup_entry+0x34/0x3c >> rest_init+0x100/0x190 >> arch_post_acpi_subsys_init+0x0/0x8 >> start_kernel+0x594/0x684 >> __primary_switched+0xbc/0xc4 >> Console: switching to colour frame buffer device 240x67 >> rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device >> >> >> Reverting it on top of next-20231214 and resolving a conflict >> fixes/hides the above lock dep issue. >> >> >>> --- >>> >>> (no changes since v1) >>> >>> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 10 +++++++--- >>> 1 file changed, 7 insertions(+), 3 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>> index 312da5783362..57784d0a22a6 100644 >>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>> @@ -217,6 +217,8 @@ struct vop2 { >>> struct vop2_win win[]; >>> }; >>> +static const struct regmap_config vop2_regmap_config; >>> + >>> static struct vop2_video_port *to_vop2_video_port(struct drm_crtc *crtc) >>> { >>> return container_of(crtc, struct vop2_video_port, crtc); >>> @@ -883,7 +885,11 @@ static void vop2_enable(struct vop2 *vop2) >>> return; >>> } >>> - regcache_sync(vop2->map); >>> + 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); >>> @@ -913,8 +919,6 @@ static void vop2_disable(struct vop2 *vop2) >>> pm_runtime_put_sync(vop2->dev); >>> - regcache_mark_dirty(vop2->map); >>> - >>> clk_disable_unprepare(vop2->aclk); >>> clk_disable_unprepare(vop2->hclk); >>> } >> >> Best regards
+ Mark Hi Marek andy Mark: On 12/15/23 16:33, Andy Yan wrote: > Hi Marek: > > On 12/15/23 08:59, Andy Yan wrote: >> Hi Marek: >> >> Sorry for this issue. >> I also tested this series on RK3568/6 before I send them out. >> But I didn't find anyahing unusal, would you please share the >> linux kernel defconfig you used for this test and it would be >> greatly appreciated if you can share more test detial. > > > I can reproduce this warning when enable CONFIG_LOCKDEP, I will try > to fix it asap. > > Thanks. >> >> On 12/14/23 20:13, Marek Szyprowski wrote: >>> Dear All, >>> >>> On 11.12.2023 12:57, Andy Yan wrote: >>>> From: Andy Yan <andy.yan@rock-chips.com> >>>> >>>> This reverts commit b63a553e8f5aa6574eeb535a551817a93c426d8c. >>>> >>>> regcache_sync will try to reload the configuration in regcache to >>>> hardware, but the registers of 4 Cluster windows and Esmart1/2/3 on >>>> the upcoming rk3588 can not be set successfully before internal PD >>>> power on. >>>> >>>> Also it's better to keep the hardware register as it is before we really >>>> enable it. >>>> >>>> So let's revert this version, and keep the first version: >>>> commit afa965a45e01 ("drm/rockchip: vop2: fix suspend/resume") >>>> >>>> Signed-off-by: Andy Yan <andy.yan@rock-chips.com> >>>> Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de> >>> >>> This patch landed in today's linux-next as commit 81a06f1d02e5 ("Revert >>> "drm/rockchip: vop2: Use regcache_sync() to fix suspend/resume""). >>> Unfortunately it triggers a following lock dep warning on my Odroid-M1 >>> test board: >>> >>> ======================================================== >>> WARNING: possible irq lock inversion dependency detected >>> 6.7.0-rc3+ #14328 Not tainted >>> -------------------------------------------------------- >>> swapper/0/0 just changed the state of lock: >>> ffff0001f3ae2c18 >>> (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2}, at: >>> regmap_lock_spinlock+0x18/0x2c >>> but this lock took another, HARDIRQ-unsafe lock in the past: >>> (&mt->ma_lock){+.+.}-{2:2} >>> >>> >>> and interrupts could create inverse lock ordering between them. >>> >>> >>> other info that might help us debug this: >>> Possible interrupt unsafe locking scenario: >>> >>> CPU0 CPU1 >>> ---- ---- >>> lock(&mt->ma_lock); >>> local_irq_disable(); >>> lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); >>> lock(&mt->ma_lock); >>> <Interrupt> >>> lock(rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock); >>> >>> *** DEADLOCK *** >>> >>> no locks held by swapper/0/0. >>> >>> the shortest dependencies between 2nd lock and 1st lock: >>> -> (&mt->ma_lock){+.+.}-{2:2} { >>> HARDIRQ-ON-W at: >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock+0x48/0x60 >>> regcache_maple_exit+0x5c/0xc0 >>> regcache_exit+0x48/0x74 >>> regmap_reinit_cache+0x1c/0xc4 >>> vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] >>> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >>> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >>> commit_tail+0xa4/0x18c >>> drm_atomic_helper_commit+0x19c/0x1b0 >>> drm_atomic_commit+0xa8/0xe0 >>> drm_client_modeset_commit_atomic+0x22c/0x298 >>> drm_client_modeset_commit_locked+0x60/0x1c0 >>> drm_client_modeset_commit+0x30/0x58 >>> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >>> drm_fb_helper_set_par+0x30/0x4c >>> fbcon_init+0x234/0x4c0 >>> visual_init+0xb0/0x108 >>> do_bind_con_driver.isra.0+0x19c/0x394 >>> do_take_over_console+0x144/0x1f0 >>> do_fbcon_takeover+0x6c/0xe4 >>> fbcon_fb_registered+0x1e0/0x1e8 >>> register_framebuffer+0x19c/0x228 >>> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >>> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >>> drm_fb_helper_hotplug_event+0x38/0x44 >>> drm_fbdev_generic_client_hotplug+0x28/0xd4 >>> drm_client_dev_hotplug+0xcc/0x130 >>> output_poll_execute+0x204/0x23c >>> process_one_work+0x1ec/0x53c >>> worker_thread+0x298/0x408 >>> kthread+0x124/0x128 >>> ret_from_fork+0x10/0x20 >>> SOFTIRQ-ON-W at: >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock+0x48/0x60 >>> regcache_maple_exit+0x5c/0xc0 >>> regcache_exit+0x48/0x74 >>> regmap_reinit_cache+0x1c/0xc4 >>> vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] >>> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >>> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >>> commit_tail+0xa4/0x18c >>> drm_atomic_helper_commit+0x19c/0x1b0 >>> drm_atomic_commit+0xa8/0xe0 >>> drm_client_modeset_commit_atomic+0x22c/0x298 >>> drm_client_modeset_commit_locked+0x60/0x1c0 >>> drm_client_modeset_commit+0x30/0x58 >>> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >>> drm_fb_helper_set_par+0x30/0x4c >>> fbcon_init+0x234/0x4c0 >>> visual_init+0xb0/0x108 >>> do_bind_con_driver.isra.0+0x19c/0x394 >>> do_take_over_console+0x144/0x1f0 >>> do_fbcon_takeover+0x6c/0xe4 >>> fbcon_fb_registered+0x1e0/0x1e8 >>> register_framebuffer+0x19c/0x228 >>> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >>> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >>> drm_fb_helper_hotplug_event+0x38/0x44 >>> drm_fbdev_generic_client_hotplug+0x28/0xd4 >>> drm_client_dev_hotplug+0xcc/0x130 >>> output_poll_execute+0x204/0x23c >>> process_one_work+0x1ec/0x53c >>> worker_thread+0x298/0x408 >>> kthread+0x124/0x128 >>> ret_from_fork+0x10/0x20 >>> INITIAL USE at: >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock+0x48/0x60 >>> regcache_maple_exit+0x5c/0xc0 >>> regcache_exit+0x48/0x74 >>> regmap_reinit_cache+0x1c/0xc4 >>> vop2_crtc_atomic_enable+0x86c/0xa0c [rockchipdrm] >>> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >>> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >>> commit_tail+0xa4/0x18c >>> drm_atomic_helper_commit+0x19c/0x1b0 >>> drm_atomic_commit+0xa8/0xe0 >>> drm_client_modeset_commit_atomic+0x22c/0x298 >>> drm_client_modeset_commit_locked+0x60/0x1c0 >>> drm_client_modeset_commit+0x30/0x58 >>> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >>> drm_fb_helper_set_par+0x30/0x4c >>> fbcon_init+0x234/0x4c0 >>> visual_init+0xb0/0x108 >>> do_bind_con_driver.isra.0+0x19c/0x394 >>> do_take_over_console+0x144/0x1f0 >>> do_fbcon_takeover+0x6c/0xe4 >>> fbcon_fb_registered+0x1e0/0x1e8 >>> register_framebuffer+0x19c/0x228 >>> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >>> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >>> drm_fb_helper_hotplug_event+0x38/0x44 >>> drm_fbdev_generic_client_hotplug+0x28/0xd4 >>> drm_client_dev_hotplug+0xcc/0x130 >>> output_poll_execute+0x204/0x23c >>> process_one_work+0x1ec/0x53c >>> worker_thread+0x298/0x408 >>> kthread+0x124/0x128 >>> ret_from_fork+0x10/0x20 >>> } >>> ... key at: [<ffff800083de53b0>] __key.0+0x0/0x10 >>> ... acquired at: >>> _raw_spin_lock+0x48/0x60 >>> regcache_maple_write+0x1d8/0x31c >>> regcache_write+0x6c/0x84 >>> _regmap_read+0x1b4/0x1f4 >>> _regmap_update_bits+0xec/0x134 >>> regmap_field_update_bits_base+0x6c/0xa0 >>> vop2_plane_atomic_update+0x380/0x11d0 [rockchipdrm] >>> drm_atomic_helper_commit_planes+0xec/0x2a0 >>> drm_atomic_helper_commit_tail_rpm+0x60/0xa0 >>> commit_tail+0xa4/0x18c >>> drm_atomic_helper_commit+0x19c/0x1b0 >>> drm_atomic_commit+0xa8/0xe0 >>> drm_client_modeset_commit_atomic+0x22c/0x298 >>> drm_client_modeset_commit_locked+0x60/0x1c0 >>> drm_client_modeset_commit+0x30/0x58 >>> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >>> drm_fb_helper_set_par+0x30/0x4c >>> fbcon_init+0x234/0x4c0 >>> visual_init+0xb0/0x108 >>> do_bind_con_driver.isra.0+0x19c/0x394 >>> do_take_over_console+0x144/0x1f0 >>> do_fbcon_takeover+0x6c/0xe4 >>> fbcon_fb_registered+0x1e0/0x1e8 >>> register_framebuffer+0x19c/0x228 >>> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >>> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >>> drm_fb_helper_hotplug_event+0x38/0x44 >>> drm_fbdev_generic_client_hotplug+0x28/0xd4 >>> drm_client_dev_hotplug+0xcc/0x130 >>> output_poll_execute+0x204/0x23c >>> process_one_work+0x1ec/0x53c >>> worker_thread+0x298/0x408 >>> kthread+0x124/0x128 >>> ret_from_fork+0x10/0x20 >>> >>> -> (rockchip_drm_vop2:2723:(&vop2_regmap_config)->lock){-...}-{2:2} { >>> IN-HARDIRQ-W at: >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock_irqsave+0x60/0x88 >>> regmap_lock_spinlock+0x18/0x2c >>> regmap_read+0x3c/0x78 >>> vop2_isr+0x84/0x2a4 [rockchipdrm] >>> __handle_irq_event_percpu+0xb0/0x2d4 >>> handle_irq_event+0x4c/0xb8 >>> handle_fasteoi_irq+0xa4/0x1cc >>> generic_handle_domain_irq+0x2c/0x44 >>> gic_handle_irq+0x4c/0x110 >>> call_on_irq_stack+0x24/0x4c >>> do_interrupt_handler+0x80/0x84 >>> el1_interrupt+0x34/0x64 >>> el1h_64_irq_handler+0x18/0x24 >>> el1h_64_irq+0x64/0x68 >>> default_idle_call+0x9c/0x150 >>> do_idle+0x230/0x294 >>> cpu_startup_entry+0x34/0x3c >>> rest_init+0x100/0x190 >>> arch_post_acpi_subsys_init+0x0/0x8 >>> start_kernel+0x594/0x684 >>> __primary_switched+0xbc/0xc4 >>> INITIAL USE at: >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock_irqsave+0x60/0x88 >>> regmap_lock_spinlock+0x18/0x2c >>> regmap_write+0x3c/0x78 >>> vop2_crtc_atomic_enable+0x894/0xa0c [rockchipdrm] >>> drm_atomic_helper_commit_modeset_enables+0xb4/0x26c >>> drm_atomic_helper_commit_tail_rpm+0x50/0xa0 >>> commit_tail+0xa4/0x18c >>> drm_atomic_helper_commit+0x19c/0x1b0 >>> drm_atomic_commit+0xa8/0xe0 >>> drm_client_modeset_commit_atomic+0x22c/0x298 >>> drm_client_modeset_commit_locked+0x60/0x1c0 >>> drm_client_modeset_commit+0x30/0x58 >>> __drm_fb_helper_restore_fbdev_mode_unlocked+0xbc/0xfc >>> drm_fb_helper_set_par+0x30/0x4c >>> fbcon_init+0x234/0x4c0 >>> visual_init+0xb0/0x108 >>> do_bind_con_driver.isra.0+0x19c/0x394 >>> do_take_over_console+0x144/0x1f0 >>> do_fbcon_takeover+0x6c/0xe4 >>> fbcon_fb_registered+0x1e0/0x1e8 >>> register_framebuffer+0x19c/0x228 >>> __drm_fb_helper_initial_config_and_unlock+0x348/0x4fc >>> drm_fb_helper_hotplug_event.part.0+0xf0/0x110 >>> drm_fb_helper_hotplug_event+0x38/0x44 >>> drm_fbdev_generic_client_hotplug+0x28/0xd4 >>> drm_client_dev_hotplug+0xcc/0x130 >>> output_poll_execute+0x204/0x23c >>> process_one_work+0x1ec/0x53c >>> worker_thread+0x298/0x408 >>> kthread+0x124/0x128 >>> ret_from_fork+0x10/0x20 >>> } >>> ... key at: [<ffff80007c090a18>] _key.6+0x0/0xffffffffffffd5e8 >>> [rockchipdrm] >>> ... acquired at: >>> __lock_acquire+0xad8/0x20c4 >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock_irqsave+0x60/0x88 >>> regmap_lock_spinlock+0x18/0x2c >>> regmap_read+0x3c/0x78 >>> vop2_isr+0x84/0x2a4 [rockchipdrm] >>> __handle_irq_event_percpu+0xb0/0x2d4 >>> handle_irq_event+0x4c/0xb8 >>> handle_fasteoi_irq+0xa4/0x1cc >>> generic_handle_domain_irq+0x2c/0x44 >>> gic_handle_irq+0x4c/0x110 >>> call_on_irq_stack+0x24/0x4c >>> do_interrupt_handler+0x80/0x84 >>> el1_interrupt+0x34/0x64 >>> el1h_64_irq_handler+0x18/0x24 >>> el1h_64_irq+0x64/0x68 >>> default_idle_call+0x9c/0x150 >>> do_idle+0x230/0x294 >>> cpu_startup_entry+0x34/0x3c >>> rest_init+0x100/0x190 >>> arch_post_acpi_subsys_init+0x0/0x8 >>> start_kernel+0x594/0x684 >>> __primary_switched+0xbc/0xc4 >>> >>> >>> stack backtrace: >>> CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc3+ #14328 >>> Hardware name: Hardkernel ODROID-M1 (DT) >>> Call trace: >>> dump_backtrace+0x98/0xf0 >>> show_stack+0x18/0x24 >>> dump_stack_lvl+0x60/0xac >>> dump_stack+0x18/0x24 >>> print_irq_inversion_bug.part.0+0x1ec/0x27c >>> mark_lock+0x634/0x950 >>> __lock_acquire+0xad8/0x20c4 >>> lock_acquire+0x1e8/0x318 >>> _raw_spin_lock_irqsave+0x60/0x88 >>> regmap_lock_spinlock+0x18/0x2c >>> regmap_read+0x3c/0x78 >>> vop2_isr+0x84/0x2a4 [rockchipdrm] >>> __handle_irq_event_percpu+0xb0/0x2d4 >>> handle_irq_event+0x4c/0xb8 >>> handle_fasteoi_irq+0xa4/0x1cc >>> generic_handle_domain_irq+0x2c/0x44 >>> gic_handle_irq+0x4c/0x110 >>> call_on_irq_stack+0x24/0x4c >>> do_interrupt_handler+0x80/0x84 >>> el1_interrupt+0x34/0x64 >>> el1h_64_irq_handler+0x18/0x24 >>> el1h_64_irq+0x64/0x68 >>> default_idle_call+0x9c/0x150 >>> do_idle+0x230/0x294 >>> cpu_startup_entry+0x34/0x3c >>> rest_init+0x100/0x190 >>> arch_post_acpi_subsys_init+0x0/0x8 >>> start_kernel+0x594/0x684 >>> __primary_switched+0xbc/0xc4 >>> Console: switching to colour frame buffer device 240x67 >>> rockchip-drm display-subsystem: [drm] fb0: rockchipdrmfb frame buffer device >>> >>> >>> Reverting it on top of next-20231214 and resolving a conflict >>> fixes/hides the above lock dep issue. >>> >>> I still dig what is going on here, but I also found that if I change the regmap cache_type back to REGCACHE_MAPLE(which means revert Mark's patch[0]), this warning is gone. As I am not familiar with regmap and lockdep, I'm not sure if this wanring is caused by my improper use of regmap_reinit_cache. I will continue do more dig, any light on this would be greatly appreciated. [0]https://patchwork.kernel.org/project/linux-arm-kernel/patch/20231001-drm-rockchip-maple-v1-1-ca396ab75be7@kernel.org/ >>>> --- >>>> >>>> (no changes since v1) >>>> >>>> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 10 +++++++--- >>>> 1 file changed, 7 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> index 312da5783362..57784d0a22a6 100644 >>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> @@ -217,6 +217,8 @@ struct vop2 { >>>> struct vop2_win win[]; >>>> }; >>>> +static const struct regmap_config vop2_regmap_config; >>>> + >>>> static struct vop2_video_port *to_vop2_video_port(struct drm_crtc *crtc) >>>> { >>>> return container_of(crtc, struct vop2_video_port, crtc); >>>> @@ -883,7 +885,11 @@ static void vop2_enable(struct vop2 *vop2) >>>> return; >>>> } >>>> - regcache_sync(vop2->map); >>>> + 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); >>>> @@ -913,8 +919,6 @@ static void vop2_disable(struct vop2 *vop2) >>>> pm_runtime_put_sync(vop2->dev); >>>> - regcache_mark_dirty(vop2->map); >>>> - >>>> clk_disable_unprepare(vop2->aclk); >>>> clk_disable_unprepare(vop2->hclk); >>>> } >>> >>> Best regards
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 312da5783362..57784d0a22a6 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -217,6 +217,8 @@ struct vop2 { struct vop2_win win[]; }; +static const struct regmap_config vop2_regmap_config; + static struct vop2_video_port *to_vop2_video_port(struct drm_crtc *crtc) { return container_of(crtc, struct vop2_video_port, crtc); @@ -883,7 +885,11 @@ static void vop2_enable(struct vop2 *vop2) return; } - regcache_sync(vop2->map); + 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); @@ -913,8 +919,6 @@ static void vop2_disable(struct vop2 *vop2) pm_runtime_put_sync(vop2->dev); - regcache_mark_dirty(vop2->map); - clk_disable_unprepare(vop2->aclk); clk_disable_unprepare(vop2->hclk); }