drm/i915: Add an update_pipe callback to intel_encoder and call this on fastsets (v2)
When we are doing a fastset (needs_modeset=false, update_pipe=true) we may need to update some encoder-level things such as checking that PSR is enabled. This commit adds an update_pipe callback to intel_encoder and a new intel_encoders_update_pipe helper which calls this for all encoders connected to a crtc. The new intel_encoders_update_pipe helper is called from intel_update_crtc when doing a fastset. Changes in v2: -Name the new encoder callback update_pipe instead of just update Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181220132120.15318-1-hdegoede@redhat.com
This commit is contained in:
parent
d4de753526
commit
608ed4ab24
2 changed files with 26 additions and 0 deletions
|
@ -5578,6 +5578,26 @@ static void intel_encoders_post_pll_disable(struct drm_crtc *crtc,
|
|||
}
|
||||
}
|
||||
|
||||
static void intel_encoders_update_pipe(struct drm_crtc *crtc,
|
||||
struct intel_crtc_state *crtc_state,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
struct drm_connector_state *conn_state;
|
||||
struct drm_connector *conn;
|
||||
int i;
|
||||
|
||||
for_each_new_connector_in_state(old_state, conn, conn_state, i) {
|
||||
struct intel_encoder *encoder =
|
||||
to_intel_encoder(conn_state->best_encoder);
|
||||
|
||||
if (conn_state->crtc != crtc)
|
||||
continue;
|
||||
|
||||
if (encoder->update_pipe)
|
||||
encoder->update_pipe(encoder, crtc_state, conn_state);
|
||||
}
|
||||
}
|
||||
|
||||
static void ironlake_crtc_enable(struct intel_crtc_state *pipe_config,
|
||||
struct drm_atomic_state *old_state)
|
||||
{
|
||||
|
@ -12750,6 +12770,9 @@ static void intel_update_crtc(struct drm_crtc *crtc,
|
|||
} else {
|
||||
intel_pre_plane_update(to_intel_crtc_state(old_crtc_state),
|
||||
pipe_config);
|
||||
|
||||
if (pipe_config->update_pipe)
|
||||
intel_encoders_update_pipe(crtc, pipe_config, state);
|
||||
}
|
||||
|
||||
if (pipe_config->update_pipe && !pipe_config->enable_fbc)
|
||||
|
|
|
@ -243,6 +243,9 @@ struct intel_encoder {
|
|||
void (*post_pll_disable)(struct intel_encoder *,
|
||||
const struct intel_crtc_state *,
|
||||
const struct drm_connector_state *);
|
||||
void (*update_pipe)(struct intel_encoder *,
|
||||
const struct intel_crtc_state *,
|
||||
const struct drm_connector_state *);
|
||||
/* Read out the current hw state of this connector, returning true if
|
||||
* the encoder is active. If the encoder is enabled it also set the pipe
|
||||
* it is connected to in the pipe parameter. */
|
||||
|
|
Loading…
Reference in a new issue