mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-23 08:55:56 -04:00
Merge tag 'topic/atomic-core-2015-01-27' of git://anongit.freedesktop.org/drm-intel into drm-next
* tag 'topic/atomic-core-2015-01-27' of git://anongit.freedesktop.org/drm-intel: drm/atomic: Fix potential use of state after free drm/atomic-helper: debug output for modesets drm/atomic-helpers: Saner encoder/crtc callbacks drm/atomic-helpers: Recover full cursor plane behaviour drm/atomic-helper: add connector->dpms() implementation drm/atomic: Add drm_crtc_state->active drm: Add standardized boolean props drm/plane-helper: Fix transitional helper kerneldocs drm/plane-helper: Skip prepare_fb/cleanup_fb when newfb==oldfb Conflicts: include/drm/drm_crtc_helper.h
This commit is contained in:
@@ -134,6 +134,7 @@ void drm_atomic_state_clear(struct drm_atomic_state *state)
|
||||
|
||||
connector->funcs->atomic_destroy_state(connector,
|
||||
state->connector_states[i]);
|
||||
state->connector_states[i] = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < config->num_crtc; i++) {
|
||||
@@ -144,6 +145,7 @@ void drm_atomic_state_clear(struct drm_atomic_state *state)
|
||||
|
||||
crtc->funcs->atomic_destroy_state(crtc,
|
||||
state->crtc_states[i]);
|
||||
state->crtc_states[i] = NULL;
|
||||
}
|
||||
|
||||
for (i = 0; i < config->num_total_plane; i++) {
|
||||
@@ -154,6 +156,7 @@ void drm_atomic_state_clear(struct drm_atomic_state *state)
|
||||
|
||||
plane->funcs->atomic_destroy_state(plane,
|
||||
state->plane_states[i]);
|
||||
state->plane_states[i] = NULL;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(drm_atomic_state_clear);
|
||||
@@ -241,7 +244,13 @@ int drm_atomic_crtc_set_property(struct drm_crtc *crtc,
|
||||
struct drm_crtc_state *state, struct drm_property *property,
|
||||
uint64_t val)
|
||||
{
|
||||
if (crtc->funcs->atomic_set_property)
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct drm_mode_config *config = &dev->mode_config;
|
||||
|
||||
/* FIXME: Mode prop is missing, which also controls ->enable. */
|
||||
if (property == config->prop_active) {
|
||||
state->active = val;
|
||||
} else if (crtc->funcs->atomic_set_property)
|
||||
return crtc->funcs->atomic_set_property(crtc, state, property, val);
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -282,6 +291,13 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
|
||||
*
|
||||
* TODO: Add generic modeset state checks once we support those.
|
||||
*/
|
||||
|
||||
if (state->active && !state->enable) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] active without enabled\n",
|
||||
crtc->base.id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -978,7 +994,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
|
||||
if (!crtc)
|
||||
continue;
|
||||
|
||||
if (crtc_state->mode_changed) {
|
||||
if (crtc_state->mode_changed ||
|
||||
crtc_state->active_changed) {
|
||||
DRM_DEBUG_KMS("[CRTC:%d] requires full modeset\n",
|
||||
crtc->base.id);
|
||||
return -EINVAL;
|
||||
|
||||
Reference in New Issue
Block a user