[PATCH 07/12] drm: arm: malidp: Use drm_atomic_helper_shutdown() to disable planes on removal
Liviu Dudau
liviu.dudau at arm.com
Fri Jan 19 15:48:35 UTC 2018
Hi Laurent,
On Wed, Jan 17, 2018 at 11:55:30PM +0200, Laurent Pinchart wrote:
> The plane cleanup handler currently calls drm_plane_helper_disable(),
> which is a legacy helper function. Replace it with a call to
> drm_atomic_helper_shutdown() at removal time.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> ---
> drivers/gpu/drm/arm/malidp_drv.c | 1 +
> drivers/gpu/drm/arm/malidp_planes.c | 4 ----
> 2 files changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
> index 0711279e836f..5d037ea576c7 100644
> --- a/drivers/gpu/drm/arm/malidp_drv.c
> +++ b/drivers/gpu/drm/arm/malidp_drv.c
> @@ -276,6 +276,7 @@ static int malidp_init(struct drm_device *drm)
>
> static void malidp_fini(struct drm_device *drm)
> {
> + drm_atomic_helper_shutdown(drm);
> drm_mode_config_cleanup(drm);
> }
>
> diff --git a/drivers/gpu/drm/arm/malidp_planes.c b/drivers/gpu/drm/arm/malidp_planes.c
> index d883d28d5d9d..2bc1264ec73a 100644
> --- a/drivers/gpu/drm/arm/malidp_planes.c
> +++ b/drivers/gpu/drm/arm/malidp_planes.c
> @@ -56,10 +56,6 @@ static void malidp_de_plane_destroy(struct drm_plane *plane)
> {
> struct malidp_plane *mp = to_malidp_plane(plane);
>
> - if (mp->base.fb)
> - drm_framebuffer_put(mp->base.fb);
> -
> - drm_plane_helper_disable(plane);
> drm_plane_cleanup(plane);
> kfree(mp);
> }
With this change in place I'm getting
[drm:drm_atomic_helper_shutdown [drm_kms_helper]] *ERROR* Disabling all crtc's during unload failed with -22
when trying to remove the mali-dp module.
Echoing 0x3f into /sys/module/drm/parameters/debug I get this:
[ 332.072080] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4386, diff=1, hw=0 hw_last=0
[ 332.091326] [drm:drm_sysfs_connector_remove [drm]] removing "HDMI-A-1" from sysfs
[ 332.101255] Console: switching to colour dummy device 80x25
[ 332.105506] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4387, diff=1, hw=0 hw_last=0
[ 332.117772] [drm:drm_atomic_state_init [drm]] Allocated atomic state 0000000035c85576
[ 332.125710] [drm:drm_mode_object_get [drm]] OBJ ID: 62 (3)
[ 332.131302] [drm:drm_atomic_get_plane_state [drm]] Added [PLANE:28:plane-0] 000000002713c919 state to 0000000035c85576
[ 332.139069] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4388, diff=1, hw=0 hw_last=0
[ 332.152827] [drm:drm_mode_object_get [drm]] OBJ ID: 45 (1)
[ 332.158558] [drm:drm_atomic_get_crtc_state [drm]] Added [CRTC:35:crtc-0] 00000000da10cba0 state to 0000000035c85576
[ 332.169169] [drm:drm_atomic_set_fb_for_plane [drm]] Set [NOFB] for plane state 000000002713c919
[ 332.178051] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4389, diff=1, hw=0 hw_last=0
[ 332.188836] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 62 (4)
[ 332.195145] [drm:drm_atomic_set_crtc_for_plane [drm]] Link plane state 000000002713c919 to [NOCRTC]
[ 332.204373] [drm:drm_atomic_check_only [drm]] checking 0000000035c85576
[ 332.211182] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4390, diff=1, hw=0 hw_last=0
[ 332.221968] [drm:drm_atomic_commit [drm]] committing 0000000035c85576
[ 332.228617] [drm:drm_calc_timestamping_constants [drm]] crtc 35: hwmode: htotal 2200, vtotal 562, vdisplay 540
[ 332.238787] [drm:drm_calc_timestamping_constants [drm]] crtc 35: clock 74250 kHz framedur 8325925 linedur 29629
[ 332.249039] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4391, diff=1, hw=0 hw_last=0
[ 332.272706] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4392, diff=1, hw=0 hw_last=0
[ 332.306160] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4393, diff=1, hw=0 hw_last=0
[ 332.317030] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 62 (3)
[ 332.323327] [drm:drm_atomic_state_default_clear [drm]] Clearing atomic state 0000000035c85576
[ 332.332041] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 45 (2)
[ 332.338331] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 62 (2)
[ 332.339680] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4394, diff=1, hw=0 hw_last=0
[ 332.355181] [drm:__drm_atomic_state_free [drm]] Freeing atomic state 0000000035c85576
[ 332.363204] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 62 (1)
[ 332.373126] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4395, diff=1, hw=0 hw_last=0
[ 332.395308] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 37 (4)
[ 332.401599] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 37 (3)
[ 332.406566] [drm:drm_update_vblank_count [drm]] updating vblank count on crtc 0: current=4396, diff=1, hw=0 hw_last=0
[ 332.418489] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 0 (2)
[ 332.432903] [drm:drm_atomic_state_init [drm]] Allocated atomic state 00000000af12a943
[ 332.440934] [drm:drm_mode_object_get [drm]] OBJ ID: 45 (1)
[ 332.446635] [drm:drm_atomic_get_crtc_state [drm]] Added [CRTC:35:crtc-0] 000000006a7e1466 state to 00000000af12a943
[ 332.457242] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 45 (2)
[ 332.463529] [drm:drm_atomic_set_mode_prop_for_crtc [drm]] Set [NOMODE] for CRTC state 000000006a7e1466
[ 332.473014] [drm:drm_atomic_add_affected_connectors [drm]] Adding all current connectors for [CRTC:35:crtc-0] to 00000000af12a943
[ 332.484819] [drm:drm_atomic_check_only [drm]] checking 00000000af12a943
[ 332.491537] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:35:crtc-0] mode changed
[ 332.500391] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:35:crtc-0] enable changed
[ 332.509419] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:35:crtc-0] active changed
[ 332.518442] [drm:drm_atomic_helper_check_modeset [drm_kms_helper]] [CRTC:35:crtc-0] enabled/connectors mismatch
[ 332.528700] [drm:drm_atomic_state_default_clear [drm]] Clearing atomic state 00000000af12a943
[ 332.537399] [drm:__drm_atomic_state_free [drm]] Freeing atomic state 00000000af12a943
[ 332.551046] [drm:drm_atomic_helper_shutdown [drm_kms_helper]] *ERROR* Disabling all crtc's during unload failed with -22
[ 332.562153] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 45 (1)
[ 332.568444] [drm:drm_mode_object_put.part.0 [drm]] OBJ ID: 63 (1)
It looks like drm_atomic_helper_check_modeset is being tripped by the final drm_atomic_commit()
that happens in the drm_atomic_helper_disable_all() function as called by drm_atomic_helper_shutdown().
Not sure why the new_crtc_state->connector_mask is not zero when drm_atomic_helper_check_modeset()
gets called. Any suggestions?
Best regards,
Liviu
> --
> Regards,
>
> Laurent Pinchart
>
--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
¯\_(ツ)_/¯
More information about the dri-devel
mailing list