This patchset adds some simple modeset suspend/resume helpers which probably most atomic drivers can use.
I have converted the cma helper drivers as part of my ongoing cma helper refactoring.
Noralf.
Changes since version 2: - drm_mode_config_helper_suspend(): Check suspend_state as we do on resume to catch unbalanced suspend/resume. (Stefan Agner) - fsl-dcu: Rebase on pending suspend/resume fixes: drm/fsl-dcu: avoid disabling pixel clock twice on suspend drm/fsl-dcu: enable IRQ before drm_atomic_helper_resume()
Changes since version 1: - Improve driver commit message (Liviu) - fsl-dcu: Fix build error: 'ret' undeclared
Noralf Trønnes (6): drm/probe-helper: Fix drm_kms_helper_poll_enable() docs drm/modeset-helper: Add simple modeset suspend/resume helpers drm/arm/mali: Use drm_mode_config_helper_suspend/resume() drm/fsl-dcu: Use drm_mode_config_helper_suspend/resume() drm/tinydrm: Use drm_mode_config_helper_suspend/resume() drm/docs: Add todo entry for simple modeset suspend/resume
Documentation/gpu/todo.rst | 14 +++-- drivers/gpu/drm/arm/malidp_drv.c | 24 ++------- drivers/gpu/drm/arm/malidp_drv.h | 1 - drivers/gpu/drm/drm_modeset_helper.c | 79 +++++++++++++++++++++++++++++ drivers/gpu/drm/drm_probe_helper.c | 3 +- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 25 +++------ drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h | 1 - drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 67 ------------------------ drivers/gpu/drm/tinydrm/mi0283qt.c | 7 ++- include/drm/drm_mode_config.h | 9 ++++ include/drm/drm_modeset_helper.h | 3 ++ include/drm/tinydrm/tinydrm.h | 4 -- 12 files changed, 115 insertions(+), 122 deletions(-)
Fix docs to reflect code and drm_kms_helper_poll_disable() docs by saying that calling drm_kms_helper_poll_enable() is fine even if output polling is not enabled.
Signed-off-by: Noralf Trønnes noralf@tronnes.org Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch --- drivers/gpu/drm/drm_probe_helper.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c index 5840aabbf24e..024a89bf0ba7 100644 --- a/drivers/gpu/drm/drm_probe_helper.c +++ b/drivers/gpu/drm/drm_probe_helper.c @@ -216,8 +216,7 @@ enum drm_mode_status drm_connector_mode_valid(struct drm_connector *connector, * suspend/resume. * * Drivers can call this helper from their device resume implementation. It is - * an error to call this when the output polling support has not yet been set - * up. + * not an error to call this even when output polling isn't enabled. * * Note that calls to enable and disable polling must be strictly ordered, which * is automatically the case when they're only call from suspend/resume
Add drm_mode_config_helper_suspend/resume() which takes care of atomic modeset suspend/resume for simple use cases. The suspend state is stored in struct drm_mode_config.
Signed-off-by: Noralf Trønnes noralf@tronnes.org Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch --- drivers/gpu/drm/drm_modeset_helper.c | 79 ++++++++++++++++++++++++++++++++++++ include/drm/drm_mode_config.h | 9 ++++ include/drm/drm_modeset_helper.h | 3 ++ 3 files changed, 91 insertions(+)
diff --git a/drivers/gpu/drm/drm_modeset_helper.c b/drivers/gpu/drm/drm_modeset_helper.c index 9cb1eede0b4d..867df741f393 100644 --- a/drivers/gpu/drm/drm_modeset_helper.c +++ b/drivers/gpu/drm/drm_modeset_helper.c @@ -20,6 +20,9 @@ * OF THIS SOFTWARE. */
+#include <drm/drm_atomic_helper.h> +#include <drm/drm_crtc_helper.h> +#include <drm/drm_fb_helper.h> #include <drm/drm_modeset_helper.h> #include <drm/drm_plane_helper.h>
@@ -156,3 +159,79 @@ int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, NULL); } EXPORT_SYMBOL(drm_crtc_init); + +/** + * drm_mode_config_helper_suspend - Modeset suspend helper + * @dev: DRM device + * + * This helper function takes care of suspending the modeset side. It disables + * output polling if initialized, suspends fbdev if used and finally calls + * drm_atomic_helper_suspend(). + * If suspending fails, fbdev and polling is re-enabled. + * + * Returns: + * Zero on success, negative error code on error. + * + * See also: + * drm_kms_helper_poll_disable() and drm_fb_helper_set_suspend_unlocked(). + */ +int drm_mode_config_helper_suspend(struct drm_device *dev) +{ + struct drm_atomic_state *state; + + if (!dev) + return 0; + + if (WARN_ON(dev->mode_config.suspend_state)) + return -EINVAL; + + drm_kms_helper_poll_disable(dev); + drm_fb_helper_set_suspend_unlocked(dev->fb_helper, 1); + state = drm_atomic_helper_suspend(dev); + if (IS_ERR(state)) { + drm_fb_helper_set_suspend_unlocked(dev->fb_helper, 0); + drm_kms_helper_poll_enable(dev); + return PTR_ERR(state); + } + + dev->mode_config.suspend_state = state; + + return 0; +} +EXPORT_SYMBOL(drm_mode_config_helper_suspend); + +/** + * drm_mode_config_helper_resume - Modeset resume helper + * @dev: DRM device + * + * This helper function takes care of resuming the modeset side. It calls + * drm_atomic_helper_resume(), resumes fbdev if used and enables output polling + * if initiaized. + * + * Returns: + * Zero on success, negative error code on error. + * + * See also: + * drm_fb_helper_set_suspend_unlocked() and drm_kms_helper_poll_enable(). + */ +int drm_mode_config_helper_resume(struct drm_device *dev) +{ + int ret; + + if (!dev) + return 0; + + if (WARN_ON(!dev->mode_config.suspend_state)) + return -EINVAL; + + ret = drm_atomic_helper_resume(dev, dev->mode_config.suspend_state); + if (ret) + DRM_ERROR("Failed to resume (%d)\n", ret); + dev->mode_config.suspend_state = NULL; + + drm_fb_helper_set_suspend_unlocked(dev->fb_helper, 0); + drm_kms_helper_poll_enable(dev); + + return ret; +} +EXPORT_SYMBOL(drm_mode_config_helper_resume); diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 1b37368416c8..5a872496b409 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -766,6 +766,15 @@ struct drm_mode_config { /* cursor size */ uint32_t cursor_width, cursor_height;
+ /** + * @suspend_state: + * + * Atomic state when suspended. + * Set by drm_mode_config_helper_suspend() and cleared by + * drm_mode_config_helper_resume(). + */ + struct drm_atomic_state *suspend_state; + const struct drm_mode_config_helper_funcs *helper_private; };
diff --git a/include/drm/drm_modeset_helper.h b/include/drm/drm_modeset_helper.h index cb0ec92e11e6..efa337f03129 100644 --- a/include/drm/drm_modeset_helper.h +++ b/include/drm/drm_modeset_helper.h @@ -34,4 +34,7 @@ void drm_helper_mode_fill_fb_struct(struct drm_device *dev, int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc, const struct drm_crtc_funcs *funcs);
+int drm_mode_config_helper_suspend(struct drm_device *dev); +int drm_mode_config_helper_resume(struct drm_device *dev); + #endif
Replace driver's code with the generic helpers that do the same thing.
Cc: Liviu Dudau liviu.dudau@arm.com Cc: Brian Starkey brian.starkey@arm.com Signed-off-by: Noralf Trønnes noralf@tronnes.org Reviewed-by: Liviu Dudau liviu.dudau@arm.com --- drivers/gpu/drm/arm/malidp_drv.c | 24 +++--------------------- drivers/gpu/drm/arm/malidp_drv.h | 1 - 2 files changed, 3 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c index b8944666a18f..75f0bce33941 100644 --- a/drivers/gpu/drm/arm/malidp_drv.c +++ b/drivers/gpu/drm/arm/malidp_drv.c @@ -27,6 +27,7 @@ #include <drm/drm_fb_cma_helper.h> #include <drm/drm_gem_cma_helper.h> #include <drm/drm_gem_framebuffer_helper.h> +#include <drm/drm_modeset_helper.h> #include <drm/drm_of.h>
#include "malidp_drv.h" @@ -749,34 +750,15 @@ static int malidp_platform_remove(struct platform_device *pdev) static int __maybe_unused malidp_pm_suspend(struct device *dev) { struct drm_device *drm = dev_get_drvdata(dev); - struct malidp_drm *malidp = drm->dev_private;
- drm_kms_helper_poll_disable(drm); - console_lock(); - drm_fbdev_cma_set_suspend(malidp->fbdev, 1); - console_unlock(); - malidp->pm_state = drm_atomic_helper_suspend(drm); - if (IS_ERR(malidp->pm_state)) { - console_lock(); - drm_fbdev_cma_set_suspend(malidp->fbdev, 0); - console_unlock(); - drm_kms_helper_poll_enable(drm); - return PTR_ERR(malidp->pm_state); - } - - return 0; + return drm_mode_config_helper_suspend(drm); }
static int __maybe_unused malidp_pm_resume(struct device *dev) { struct drm_device *drm = dev_get_drvdata(dev); - struct malidp_drm *malidp = drm->dev_private;
- drm_atomic_helper_resume(drm, malidp->pm_state); - console_lock(); - drm_fbdev_cma_set_suspend(malidp->fbdev, 0); - console_unlock(); - drm_kms_helper_poll_enable(drm); + drm_mode_config_helper_resume(drm);
return 0; } diff --git a/drivers/gpu/drm/arm/malidp_drv.h b/drivers/gpu/drm/arm/malidp_drv.h index 2e2033140efc..70ed6aeccf05 100644 --- a/drivers/gpu/drm/arm/malidp_drv.h +++ b/drivers/gpu/drm/arm/malidp_drv.h @@ -24,7 +24,6 @@ struct malidp_drm { struct drm_crtc crtc; wait_queue_head_t wq; atomic_t config_valid; - struct drm_atomic_state *pm_state; u32 core_id; };
Replace driver's code with the generic helpers that do the same thing.
Cc: Stefan Agner stefan@agner.ch Cc: Alison Wang alison.wang@freescale.com Signed-off-by: Noralf Trønnes noralf@tronnes.org Acked-by: Stefan Agner stefan@agner.ch ---
Stefan, I didn't retain your tested-by tag now that I have rebased.
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 25 ++++++------------------- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h | 1 - 2 files changed, 6 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c index faf17b83b910..80232321a244 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c @@ -27,6 +27,7 @@ #include <drm/drm_crtc_helper.h> #include <drm/drm_fb_cma_helper.h> #include <drm/drm_gem_cma_helper.h> +#include <drm/drm_modeset_helper.h>
#include "fsl_dcu_drm_crtc.h" #include "fsl_dcu_drm_drv.h" @@ -188,26 +189,17 @@ static struct drm_driver fsl_dcu_drm_driver = { static int fsl_dcu_drm_pm_suspend(struct device *dev) { struct fsl_dcu_drm_device *fsl_dev = dev_get_drvdata(dev); + int ret;
if (!fsl_dev) return 0;
disable_irq(fsl_dev->irq); - drm_kms_helper_poll_disable(fsl_dev->drm);
- console_lock(); - drm_fbdev_cma_set_suspend(fsl_dev->fbdev, 1); - console_unlock(); - - fsl_dev->state = drm_atomic_helper_suspend(fsl_dev->drm); - if (IS_ERR(fsl_dev->state)) { - console_lock(); - drm_fbdev_cma_set_suspend(fsl_dev->fbdev, 0); - console_unlock(); - - drm_kms_helper_poll_enable(fsl_dev->drm); + ret = drm_mode_config_helper_suspend(fsl_dev->drm); + if (ret) { enable_irq(fsl_dev->irq); - return PTR_ERR(fsl_dev->state); + return ret; }
clk_disable_unprepare(fsl_dev->clk); @@ -233,13 +225,8 @@ static int fsl_dcu_drm_pm_resume(struct device *dev) fsl_tcon_bypass_enable(fsl_dev->tcon); fsl_dcu_drm_init_planes(fsl_dev->drm); enable_irq(fsl_dev->irq); - drm_atomic_helper_resume(fsl_dev->drm, fsl_dev->state);
- console_lock(); - drm_fbdev_cma_set_suspend(fsl_dev->fbdev, 0); - console_unlock(); - - drm_kms_helper_poll_enable(fsl_dev->drm); + drm_mode_config_helper_resume(fsl_dev->drm);
return 0; } diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h index da9bfd432ca6..93bfb98012d4 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h @@ -196,7 +196,6 @@ struct fsl_dcu_drm_device { struct drm_encoder encoder; struct fsl_dcu_drm_connector connector; const struct fsl_dcu_soc_data *soc; - struct drm_atomic_state *state; };
int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev);
Den 14.11.2017 22.25, skrev Noralf Trønnes:
Replace driver's code with the generic helpers that do the same thing.
Cc: Stefan Agner stefan@agner.ch Cc: Alison Wang alison.wang@freescale.com Signed-off-by: Noralf Trønnes noralf@tronnes.org Acked-by: Stefan Agner stefan@agner.ch
Applied to drm-misc.
Noralf.
Stefan, I didn't retain your tested-by tag now that I have rebased.
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 25 ++++++------------------- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h | 1 - 2 files changed, 6 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c index faf17b83b910..80232321a244 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c @@ -27,6 +27,7 @@ #include <drm/drm_crtc_helper.h> #include <drm/drm_fb_cma_helper.h> #include <drm/drm_gem_cma_helper.h> +#include <drm/drm_modeset_helper.h>
#include "fsl_dcu_drm_crtc.h" #include "fsl_dcu_drm_drv.h" @@ -188,26 +189,17 @@ static struct drm_driver fsl_dcu_drm_driver = { static int fsl_dcu_drm_pm_suspend(struct device *dev) { struct fsl_dcu_drm_device *fsl_dev = dev_get_drvdata(dev);
int ret;
if (!fsl_dev) return 0;
disable_irq(fsl_dev->irq);
drm_kms_helper_poll_disable(fsl_dev->drm);
console_lock();
drm_fbdev_cma_set_suspend(fsl_dev->fbdev, 1);
console_unlock();
fsl_dev->state = drm_atomic_helper_suspend(fsl_dev->drm);
if (IS_ERR(fsl_dev->state)) {
console_lock();
drm_fbdev_cma_set_suspend(fsl_dev->fbdev, 0);
console_unlock();
drm_kms_helper_poll_enable(fsl_dev->drm);
- ret = drm_mode_config_helper_suspend(fsl_dev->drm);
- if (ret) { enable_irq(fsl_dev->irq);
return PTR_ERR(fsl_dev->state);
return ret;
}
clk_disable_unprepare(fsl_dev->clk);
@@ -233,13 +225,8 @@ static int fsl_dcu_drm_pm_resume(struct device *dev) fsl_tcon_bypass_enable(fsl_dev->tcon); fsl_dcu_drm_init_planes(fsl_dev->drm); enable_irq(fsl_dev->irq);
drm_atomic_helper_resume(fsl_dev->drm, fsl_dev->state);
console_lock();
drm_fbdev_cma_set_suspend(fsl_dev->fbdev, 0);
console_unlock();
drm_kms_helper_poll_enable(fsl_dev->drm);
drm_mode_config_helper_resume(fsl_dev->drm);
return 0; }
diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h index da9bfd432ca6..93bfb98012d4 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h @@ -196,7 +196,6 @@ struct fsl_dcu_drm_device { struct drm_encoder encoder; struct fsl_dcu_drm_connector connector; const struct fsl_dcu_soc_data *soc;
struct drm_atomic_state *state; };
int fsl_dcu_drm_modeset_init(struct fsl_dcu_drm_device *fsl_dev);
Replace driver's code with the generic helpers that do the same thing. Remove todo entry.
Signed-off-by: Noralf Trønnes noralf@tronnes.org Reviewed-by: Stefan Agner stefan@agner.ch --- Documentation/gpu/todo.rst | 5 --- drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 67 ----------------------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 7 ++- include/drm/tinydrm/tinydrm.h | 4 -- 4 files changed, 5 insertions(+), 78 deletions(-)
diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst index e9840d693a86..a44f379d2b25 100644 --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@ -404,11 +404,6 @@ those drivers as simple as possible, so lots of room for refactoring: a drm_device wrong. Doesn't matter, since everyone else gets it wrong too :-)
-- With the fbdev pointer in dev->mode_config we could also make - suspend/resume helpers entirely generic, at least if we add a - dev->mode_config.suspend_state. We could even provide a generic pm_ops - structure with those. - - also rework the drm_framebuffer_funcs->dirty hook wire-up, see above.
Contact: Noralf Trønnes, Daniel Vetter diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c index 1a8a57cad431..bd7b82824a34 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-core.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-core.c @@ -292,71 +292,4 @@ void tinydrm_shutdown(struct tinydrm_device *tdev) } EXPORT_SYMBOL(tinydrm_shutdown);
-/** - * tinydrm_suspend - Suspend tinydrm - * @tdev: tinydrm device - * - * Used in driver PM operations to suspend tinydrm. - * Suspends fbdev and DRM. - * Resume with tinydrm_resume(). - * - * Returns: - * Zero on success, negative error code on failure. - */ -int tinydrm_suspend(struct tinydrm_device *tdev) -{ - struct drm_atomic_state *state; - - if (tdev->suspend_state) { - DRM_ERROR("Failed to suspend: state already set\n"); - return -EINVAL; - } - - drm_fbdev_cma_set_suspend_unlocked(tdev->fbdev_cma, 1); - state = drm_atomic_helper_suspend(tdev->drm); - if (IS_ERR(state)) { - drm_fbdev_cma_set_suspend_unlocked(tdev->fbdev_cma, 0); - return PTR_ERR(state); - } - - tdev->suspend_state = state; - - return 0; -} -EXPORT_SYMBOL(tinydrm_suspend); - -/** - * tinydrm_resume - Resume tinydrm - * @tdev: tinydrm device - * - * Used in driver PM operations to resume tinydrm. - * Suspend with tinydrm_suspend(). - * - * Returns: - * Zero on success, negative error code on failure. - */ -int tinydrm_resume(struct tinydrm_device *tdev) -{ - struct drm_atomic_state *state = tdev->suspend_state; - int ret; - - if (!state) { - DRM_ERROR("Failed to resume: state is not set\n"); - return -EINVAL; - } - - tdev->suspend_state = NULL; - - ret = drm_atomic_helper_resume(tdev->drm, state); - if (ret) { - DRM_ERROR("Error resuming state: %d\n", ret); - return ret; - } - - drm_fbdev_cma_set_suspend_unlocked(tdev->fbdev_cma, 0); - - return 0; -} -EXPORT_SYMBOL(tinydrm_resume); - MODULE_LICENSE("GPL"); diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 6a83b3093254..70ae4f76f455 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -9,6 +9,7 @@ * (at your option) any later version. */
+#include <drm/drm_modeset_helper.h> #include <drm/tinydrm/ili9341.h> #include <drm/tinydrm/mipi-dbi.h> #include <drm/tinydrm/tinydrm-helpers.h> @@ -231,7 +232,7 @@ static int __maybe_unused mi0283qt_pm_suspend(struct device *dev) struct mipi_dbi *mipi = dev_get_drvdata(dev); int ret;
- ret = tinydrm_suspend(&mipi->tinydrm); + ret = drm_mode_config_helper_suspend(mipi->tinydrm.drm); if (ret) return ret;
@@ -249,7 +250,9 @@ static int __maybe_unused mi0283qt_pm_resume(struct device *dev) if (ret) return ret;
- return tinydrm_resume(&mipi->tinydrm); + drm_mode_config_helper_resume(mipi->tinydrm.drm); + + return 0; }
static const struct dev_pm_ops mi0283qt_pm_ops = { diff --git a/include/drm/tinydrm/tinydrm.h b/include/drm/tinydrm/tinydrm.h index 423828922e5a..03cd9d72308c 100644 --- a/include/drm/tinydrm/tinydrm.h +++ b/include/drm/tinydrm/tinydrm.h @@ -20,7 +20,6 @@ * @pipe: Display pipe structure * @dirty_lock: Serializes framebuffer flushing * @fbdev_cma: CMA fbdev structure - * @suspend_state: Atomic state when suspended * @fb_funcs: Framebuffer functions used when creating framebuffers */ struct tinydrm_device { @@ -28,7 +27,6 @@ struct tinydrm_device { struct drm_simple_display_pipe pipe; struct mutex dirty_lock; struct drm_fbdev_cma *fbdev_cma; - struct drm_atomic_state *suspend_state; const struct drm_framebuffer_funcs *fb_funcs; };
@@ -93,8 +91,6 @@ int devm_tinydrm_init(struct device *parent, struct tinydrm_device *tdev, struct drm_driver *driver); int devm_tinydrm_register(struct tinydrm_device *tdev); void tinydrm_shutdown(struct tinydrm_device *tdev); -int tinydrm_suspend(struct tinydrm_device *tdev); -int tinydrm_resume(struct tinydrm_device *tdev);
void tinydrm_display_pipe_update(struct drm_simple_display_pipe *pipe, struct drm_plane_state *old_state);
Add entry for conversion of drivers to new helpers.
Signed-off-by: Noralf Trønnes noralf@tronnes.org Reviewed-by: Daniel Vetter daniel.vetter@ffwll.ch --- Documentation/gpu/todo.rst | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst index a44f379d2b25..6bce1beafabe 100644 --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@ -185,6 +185,15 @@ are better.
Contact: Sean Paul, Maintainer of the driver you plan to convert
+Convert drivers to use simple modeset suspend/resume +---------------------------------------------------- + +Most drivers (except i915 and nouveau) that use +drm_atomic_helper_suspend/resume() can probably be converted to use +drm_mode_config_helper_suspend/resume(). + +Contact: Maintainer of the driver you plan to convert + Core refactorings =================
Den 14.11.2017 22.25, skrev Noralf Trønnes:
This patchset adds some simple modeset suspend/resume helpers which probably most atomic drivers can use.
I have converted the cma helper drivers as part of my ongoing cma helper refactoring.
Noralf.
Changes since version 2:
- drm_mode_config_helper_suspend(): Check suspend_state as we do on resume to catch unbalanced suspend/resume. (Stefan Agner)
- fsl-dcu: Rebase on pending suspend/resume fixes: drm/fsl-dcu: avoid disabling pixel clock twice on suspend drm/fsl-dcu: enable IRQ before drm_atomic_helper_resume()
Changes since version 1:
- Improve driver commit message (Liviu)
- fsl-dcu: Fix build error: 'ret' undeclared
Noralf Trønnes (6): drm/probe-helper: Fix drm_kms_helper_poll_enable() docs drm/modeset-helper: Add simple modeset suspend/resume helpers drm/arm/mali: Use drm_mode_config_helper_suspend/resume() drm/fsl-dcu: Use drm_mode_config_helper_suspend/resume() drm/tinydrm: Use drm_mode_config_helper_suspend/resume() drm/docs: Add todo entry for simple modeset suspend/resume
Series applied to drm-misc except fsl-dcu for which I'm awating the suspend/resume fixes in -rc1 to show up in drm-misc-next. Thanks for reviewing!
Noralf.
Documentation/gpu/todo.rst | 14 +++-- drivers/gpu/drm/arm/malidp_drv.c | 24 ++------- drivers/gpu/drm/arm/malidp_drv.h | 1 - drivers/gpu/drm/drm_modeset_helper.c | 79 +++++++++++++++++++++++++++++ drivers/gpu/drm/drm_probe_helper.c | 3 +- drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c | 25 +++------ drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.h | 1 - drivers/gpu/drm/tinydrm/core/tinydrm-core.c | 67 ------------------------ drivers/gpu/drm/tinydrm/mi0283qt.c | 7 ++- include/drm/drm_mode_config.h | 9 ++++ include/drm/drm_modeset_helper.h | 3 ++ include/drm/tinydrm/tinydrm.h | 4 -- 12 files changed, 115 insertions(+), 122 deletions(-)
dri-devel@lists.freedesktop.org