Message ID | 6ae804c7163b4d933dbcf940b8dbd5f4c961f037.1716984934.git.geert+renesas@glider.be (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [resend,v2] drm: renesas: shmobile: Call drm_helper_force_disable_all() at shutdown time | expand |
Hi, On 2024/5/29 20:16, Geert Uytterhoeven wrote: > From: Douglas Anderson <dianders@chromium.org> > > Based on grepping through the source code, this driver appears to be > missing a call to drm_atomic_helper_shutdown() at system shutdown time. > This is important because drm_helper_force_disable_all() will cause > panels to get disabled cleanly which may be important for their power > sequencing. Future changes will remove any custom powering off in > individual panel drivers so the DRM drivers need to start getting this > right. > > The fact that we should call drm_atomic_helper_shutdown() in the case of > OS shutdown comes straight out of the kernel doc "driver instance > overview" in drm_drv.c. True, looks safer. > Suggested-by: Maxime Ripard <mripard@kernel.org> > Signed-off-by: Douglas Anderson <dianders@chromium.org> > Link: https://lore.kernel.org/r/20230901164111.RFT.15.Iaf638a1d4c8b3c307a6192efabb4cbb06b195f15@changeid > [geert: s/drm_helper_force_disable_all/drm_atomic_helper_shutdown/] > [geert: shmob_drm_remove() already calls drm_atomic_helper_shutdown] > Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sui Jingfeng <sui.jingfeng@linux.dev> Best regards, Sui
Hi, On Wed, May 29, 2024 at 5:16 AM Geert Uytterhoeven <geert+renesas@glider.be> wrote: > > From: Douglas Anderson <dianders@chromium.org> > > Based on grepping through the source code, this driver appears to be > missing a call to drm_atomic_helper_shutdown() at system shutdown time. > This is important because drm_helper_force_disable_all() will cause > panels to get disabled cleanly which may be important for their power > sequencing. Future changes will remove any custom powering off in > individual panel drivers so the DRM drivers need to start getting this > right. > > The fact that we should call drm_atomic_helper_shutdown() in the case of > OS shutdown comes straight out of the kernel doc "driver instance > overview" in drm_drv.c. > > Suggested-by: Maxime Ripard <mripard@kernel.org> > Signed-off-by: Douglas Anderson <dianders@chromium.org> > Link: https://lore.kernel.org/r/20230901164111.RFT.15.Iaf638a1d4c8b3c307a6192efabb4cbb06b195f15@changeid > [geert: s/drm_helper_force_disable_all/drm_atomic_helper_shutdown/] > [geert: shmob_drm_remove() already calls drm_atomic_helper_shutdown] > Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > v2: > - Add Reviewed-by. > > Tested on Atmark Techno Armadillo-800-EVA. > --- > drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c | 8 ++++++++ > 1 file changed, 8 insertions(+) FWIW: I've created a patch to list DRM modeset drivers that handle shutdown properly [1]. For now "shmob-drm" is not part of that patchset. Assuming my patch lands we'll have to later add it to the list. [1] https://lore.kernel.org/r/20240611074846.1.Ieb287c2c3ee3f6d3b0d5f49b29f746b93621749c@changeid I will also note that the subject/description of this patch could be adjusted. They still reference "drm_helper_force_disable_all" which should have been changed to "drm_atomic_helper_shutdown". -Doug
Hi Doug, On Tue, Jun 11, 2024 at 7:33 PM Doug Anderson <dianders@chromium.org> wrote: > On Wed, May 29, 2024 at 5:16 AM Geert Uytterhoeven > <geert+renesas@glider.be> wrote: > > > > From: Douglas Anderson <dianders@chromium.org> > > > > Based on grepping through the source code, this driver appears to be > > missing a call to drm_atomic_helper_shutdown() at system shutdown time. > > This is important because drm_helper_force_disable_all() will cause > > panels to get disabled cleanly which may be important for their power > > sequencing. Future changes will remove any custom powering off in > > individual panel drivers so the DRM drivers need to start getting this > > right. > > > > The fact that we should call drm_atomic_helper_shutdown() in the case of > > OS shutdown comes straight out of the kernel doc "driver instance > > overview" in drm_drv.c. > > > > Suggested-by: Maxime Ripard <mripard@kernel.org> > > Signed-off-by: Douglas Anderson <dianders@chromium.org> > > Link: https://lore.kernel.org/r/20230901164111.RFT.15.Iaf638a1d4c8b3c307a6192efabb4cbb06b195f15@changeid > > [geert: s/drm_helper_force_disable_all/drm_atomic_helper_shutdown/] > > [geert: shmob_drm_remove() already calls drm_atomic_helper_shutdown] > > Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > v2: > > - Add Reviewed-by. > > > > Tested on Atmark Techno Armadillo-800-EVA. > > --- > > drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > FWIW: I've created a patch to list DRM modeset drivers that handle > shutdown properly [1]. For now "shmob-drm" is not part of that > patchset. Assuming my patch lands we'll have to later add it to the > list. Ouch, keeping such a list is ugly ;-) > [1] https://lore.kernel.org/r/20240611074846.1.Ieb287c2c3ee3f6d3b0d5f49b29f746b93621749c@changeid > > I will also note that the subject/description of this patch could be > adjusted. They still reference "drm_helper_force_disable_all" which > should have been changed to "drm_atomic_helper_shutdown". Thanks, v3 sent. Gr{oetje,eeting}s, Geert
diff --git a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c index e83c3e52251dedf9..0250d5f00bf102dc 100644 --- a/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c +++ b/drivers/gpu/drm/renesas/shmobile/shmob_drm_drv.c @@ -171,6 +171,13 @@ static void shmob_drm_remove(struct platform_device *pdev) drm_kms_helper_poll_fini(ddev); } +static void shmob_drm_shutdown(struct platform_device *pdev) +{ + struct shmob_drm_device *sdev = platform_get_drvdata(pdev); + + drm_atomic_helper_shutdown(&sdev->ddev); +} + static int shmob_drm_probe(struct platform_device *pdev) { struct shmob_drm_platform_data *pdata = pdev->dev.platform_data; @@ -273,6 +280,7 @@ static const struct of_device_id shmob_drm_of_table[] __maybe_unused = { static struct platform_driver shmob_drm_platform_driver = { .probe = shmob_drm_probe, .remove_new = shmob_drm_remove, + .shutdown = shmob_drm_shutdown, .driver = { .name = "shmob-drm", .of_match_table = of_match_ptr(shmob_drm_of_table),