Op 22-07-15 om 16:30 schreef Daniel Vetter:
With drivers supporting runtime pm it's generally not a good idea to touch the hardware when it's off. Add an option to the commit_planes helper to support this case.
Note that the helpers already add all planes on a crtc when a modeset happens, hence plane updates will not be lost if drivers set this to true.
Cc: Thierry Reding treding@nvidia.com Cc: Maarten Lankhorst maarten.lankhorst@linux.intel.com Cc: Laurent Pinchart laurent.pinchart+renesas@ideasonboard.com Signed-off-by: Daniel Vetter daniel.vetter@intel.com
drivers/gpu/drm/drm_atomic_helper.c | 15 +++++++++++++-- drivers/gpu/drm/exynos/exynos_drm_fb.c | 2 +- drivers/gpu/drm/msm/msm_atomic.c | 2 +- drivers/gpu/drm/omapdrm/omap_drv.c | 2 +- drivers/gpu/drm/rcar-du/rcar_du_kms.c | 2 +- drivers/gpu/drm/sti/sti_drm_drv.c | 2 +- drivers/gpu/drm/tegra/drm.c | 2 +- include/drm/drm_atomic_helper.h | 3 ++- 8 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 91ad6bd13734..192412277586 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -989,7 +989,7 @@ int drm_atomic_helper_commit(struct drm_device *dev,
drm_atomic_helper_commit_modeset_disables(dev, state);
- drm_atomic_helper_commit_planes(dev, state);
drm_atomic_helper_commit_planes(dev, state, false);
drm_atomic_helper_commit_modeset_enables(dev, state);
@@ -1108,6 +1108,7 @@ EXPORT_SYMBOL(drm_atomic_helper_prepare_planes);
- drm_atomic_helper_commit_planes - commit plane state
- @dev: DRM device
- @old_state: atomic state object with old state structures
- @active_only: Only commit on active CRTC if set
- This function commits the new plane state using the plane and atomic helper
- functions for planes and crtcs. It assumes that the atomic state has already
@@ -1122,7 +1123,8 @@ EXPORT_SYMBOL(drm_atomic_helper_prepare_planes);
- drm_atomic_helper_commit_planes_on_crtc() instead.
*/ void drm_atomic_helper_commit_planes(struct drm_device *dev,
struct drm_atomic_state *old_state)
struct drm_atomic_state *old_state,
bool active_only)
{ struct drm_crtc *crtc; struct drm_crtc_state *old_crtc_state; @@ -1138,6 +1140,9 @@ void drm_atomic_helper_commit_planes(struct drm_device *dev, if (!funcs || !funcs->atomic_begin) continue;
if (active_only && !crtc->state->active)
continue;
- funcs->atomic_begin(crtc); }
@@ -1149,6 +1154,9 @@ void drm_atomic_helper_commit_planes(struct drm_device *dev, if (!funcs) continue;
if (active_only && !plane->state->crtc->state->active)
continue;
Find the null pointer deref. ;-)
Otherwise r-b.
~Maarten