> Subject: [PATCH 2/4] drm/i915: Pass the full atomic state to .compute_config() > > From: Ville Syrjälä <[email protected]> > > Upcoming changes will need access to the full atomic state in > .compute_config(). Pass it in from the top. > > Couple of the implementations already dug this out via the > crtc_state/conn_state->state pointer, but we don't want to use that anywhere > because it's a bit of a footgun by only being valid during the early stages > of the > commit. > > Signed-off-by: Ville Syrjälä <[email protected]>
LGTM, Reviewed-by: Suraj Kandpal <[email protected]> > --- > drivers/gpu/drm/i915/display/g4x_dp.c | 5 +++-- > drivers/gpu/drm/i915/display/g4x_hdmi.c | 4 ++-- > drivers/gpu/drm/i915/display/icl_dsi.c | 3 ++- > drivers/gpu/drm/i915/display/intel_crt.c | 9 ++++++--- > drivers/gpu/drm/i915/display/intel_ddi.c | 8 +++++--- > drivers/gpu/drm/i915/display/intel_display.c | 4 ++-- > drivers/gpu/drm/i915/display/intel_display_types.h | 6 ++++-- > drivers/gpu/drm/i915/display/intel_dp.c | 4 ++-- > drivers/gpu/drm/i915/display/intel_dp.h | 3 ++- > drivers/gpu/drm/i915/display/intel_dp_mst.c | 8 ++++---- > drivers/gpu/drm/i915/display/intel_dvo.c | 3 ++- > drivers/gpu/drm/i915/display/intel_lvds.c | 3 ++- > drivers/gpu/drm/i915/display/intel_sdvo.c | 3 ++- > drivers/gpu/drm/i915/display/intel_tv.c | 5 ++--- > drivers/gpu/drm/i915/display/vlv_dsi.c | 3 ++- > 15 files changed, 42 insertions(+), 29 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/g4x_dp.c > b/drivers/gpu/drm/i915/display/g4x_dp.c > index d211e6c49e0a..b867443ff227 100644 > --- a/drivers/gpu/drm/i915/display/g4x_dp.c > +++ b/drivers/gpu/drm/i915/display/g4x_dp.c > @@ -1222,7 +1222,8 @@ static bool ilk_digital_port_connected(struct > intel_encoder *encoder) > return intel_de_read(display, DEISR) & bit; } > > -static int g4x_dp_compute_config(struct intel_encoder *encoder, > +static int g4x_dp_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state *conn_state) { > @@ -1232,7 +1233,7 @@ static int g4x_dp_compute_config(struct > intel_encoder *encoder, > if (HAS_PCH_SPLIT(display) && encoder->port != PORT_A) > crtc_state->has_pch_encoder = true; > > - ret = intel_dp_compute_config(encoder, crtc_state, conn_state); > + ret = intel_dp_compute_config(state, encoder, crtc_state, conn_state); > if (ret) > return ret; > > diff --git a/drivers/gpu/drm/i915/display/g4x_hdmi.c > b/drivers/gpu/drm/i915/display/g4x_hdmi.c > index acb36cab999c..4c33aa1d1d32 100644 > --- a/drivers/gpu/drm/i915/display/g4x_hdmi.c > +++ b/drivers/gpu/drm/i915/display/g4x_hdmi.c > @@ -126,12 +126,12 @@ static bool g4x_compute_has_hdmi_sink(struct > intel_atomic_state *state, > return false; > } > > -static int g4x_hdmi_compute_config(struct intel_encoder *encoder, > +static int g4x_hdmi_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state *conn_state) { > struct intel_display *display = to_intel_display(encoder); > - struct intel_atomic_state *state = to_intel_atomic_state(crtc_state- > >uapi.state); > struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); > > if (HAS_PCH_SPLIT(display)) > diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c > b/drivers/gpu/drm/i915/display/icl_dsi.c > index a549f1fac810..59184f2f805c 100644 > --- a/drivers/gpu/drm/i915/display/icl_dsi.c > +++ b/drivers/gpu/drm/i915/display/icl_dsi.c > @@ -1657,7 +1657,8 @@ static int gen11_dsi_dsc_compute_config(struct > intel_encoder *encoder, > return 0; > } > > -static int gen11_dsi_compute_config(struct intel_encoder *encoder, > +static int gen11_dsi_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > diff --git a/drivers/gpu/drm/i915/display/intel_crt.c > b/drivers/gpu/drm/i915/display/intel_crt.c > index 243e332bef57..5b8968197fbc 100644 > --- a/drivers/gpu/drm/i915/display/intel_crt.c > +++ b/drivers/gpu/drm/i915/display/intel_crt.c > @@ -397,7 +397,8 @@ intel_crt_mode_valid(struct drm_connector > *connector, > return MODE_OK; > } > > -static int intel_crt_compute_config(struct intel_encoder *encoder, > +static int intel_crt_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state *conn_state) { > @@ -413,7 +414,8 @@ static int intel_crt_compute_config(struct intel_encoder > *encoder, > return 0; > } > > -static int pch_crt_compute_config(struct intel_encoder *encoder, > +static int pch_crt_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state *conn_state) { > @@ -432,7 +434,8 @@ static int pch_crt_compute_config(struct intel_encoder > *encoder, > return 0; > } > > -static int hsw_crt_compute_config(struct intel_encoder *encoder, > +static int hsw_crt_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state *conn_state) { > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c > b/drivers/gpu/drm/i915/display/intel_ddi.c > index 2684e33b602d..91cac4e1d94a 100644 > --- a/drivers/gpu/drm/i915/display/intel_ddi.c > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c > @@ -4480,7 +4480,8 @@ intel_ddi_compute_output_type(struct > intel_encoder *encoder, > } > } > > -static int intel_ddi_compute_config(struct intel_encoder *encoder, > +static int intel_ddi_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > @@ -4498,7 +4499,7 @@ static int intel_ddi_compute_config(struct > intel_encoder *encoder, > > ret = intel_hdmi_compute_config(encoder, pipe_config, > conn_state); > } else { > - ret = intel_dp_compute_config(encoder, pipe_config, > conn_state); > + ret = intel_dp_compute_config(state, encoder, pipe_config, > +conn_state); > } > > if (ret) > @@ -4603,7 +4604,8 @@ intel_ddi_port_sync_transcoders(const struct > intel_crtc_state *ref_crtc_state, > return transcoders; > } > > -static int intel_ddi_compute_config_late(struct intel_encoder *encoder, > +static int intel_ddi_compute_config_late(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state > *conn_state) { diff --git a/drivers/gpu/drm/i915/display/intel_display.c > b/drivers/gpu/drm/i915/display/intel_display.c > index e2e4b00a8fa9..1db1c3ea0873 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -4793,7 +4793,7 @@ intel_modeset_pipe_config(struct intel_atomic_state > *state, > if (connector_state->crtc != &crtc->base) > continue; > > - ret = encoder->compute_config(encoder, crtc_state, > + ret = encoder->compute_config(state, encoder, crtc_state, > connector_state); > if (ret == -EDEADLK) > return ret; > @@ -4853,7 +4853,7 @@ intel_modeset_pipe_config_late(struct > intel_atomic_state *state, > !encoder->compute_config_late) > continue; > > - ret = encoder->compute_config_late(encoder, crtc_state, > + ret = encoder->compute_config_late(state, encoder, crtc_state, > conn_state); > if (ret) > return ret; > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h > b/drivers/gpu/drm/i915/display/intel_display_types.h > index aa4772a1c208..beaa89afb3ff 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_types.h > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h > @@ -178,10 +178,12 @@ struct intel_encoder { > enum intel_output_type (*compute_output_type)(struct > intel_encoder *, > struct intel_crtc_state *, > struct > drm_connector_state *); > - int (*compute_config)(struct intel_encoder *, > + int (*compute_config)(struct intel_atomic_state *, > + struct intel_encoder *, > struct intel_crtc_state *, > struct drm_connector_state *); > - int (*compute_config_late)(struct intel_encoder *, > + int (*compute_config_late)(struct intel_atomic_state *, > + struct intel_encoder *, > struct intel_crtc_state *, > struct drm_connector_state *); > void (*pre_pll_enable)(struct intel_atomic_state *, diff --git > a/drivers/gpu/drm/i915/display/intel_dp.c > b/drivers/gpu/drm/i915/display/intel_dp.c > index 3569e61e7fee..b9324b590ee9 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.c > +++ b/drivers/gpu/drm/i915/display/intel_dp.c > @@ -3627,12 +3627,12 @@ int intel_dp_compute_min_hblank(struct > intel_crtc_state *crtc_state, } > > int > -intel_dp_compute_config(struct intel_encoder *encoder, > +intel_dp_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > struct intel_display *display = to_intel_display(encoder); > - struct intel_atomic_state *state = to_intel_atomic_state(conn_state- > >state); > struct drm_display_mode *adjusted_mode = &pipe_config- > >hw.adjusted_mode; > struct intel_dp *intel_dp = enc_to_intel_dp(encoder); > struct intel_connector *connector = intel_dp->attached_connector; diff > --git a/drivers/gpu/drm/i915/display/intel_dp.h > b/drivers/gpu/drm/i915/display/intel_dp.h > index 92ce04852326..b233739b89ce 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp.h > +++ b/drivers/gpu/drm/i915/display/intel_dp.h > @@ -71,7 +71,8 @@ void intel_dp_sink_disable_decompression(struct > intel_atomic_state *state, void intel_dp_encoder_suspend(struct > intel_encoder *intel_encoder); void intel_dp_encoder_shutdown(struct > intel_encoder *intel_encoder); void intel_dp_encoder_flush_work(struct > drm_encoder *encoder); -int intel_dp_compute_config(struct intel_encoder > *encoder, > +int intel_dp_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state); bool > intel_dp_needs_8b10b_fec(const struct intel_crtc_state *crtc_state, diff --git > a/drivers/gpu/drm/i915/display/intel_dp_mst.c > b/drivers/gpu/drm/i915/display/intel_dp_mst.c > index bcdc50491347..a2f9440ab84a 100644 > --- a/drivers/gpu/drm/i915/display/intel_dp_mst.c > +++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c > @@ -697,12 +697,12 @@ static int > mst_stream_compute_link_for_joined_pipes(struct intel_encoder *encode > return 0; > } > > -static int mst_stream_compute_config(struct intel_encoder *encoder, > +static int mst_stream_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > struct intel_display *display = to_intel_display(encoder); > - struct intel_atomic_state *state = to_intel_atomic_state(conn_state- > >state); > struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > struct intel_dp *intel_dp = to_primary_dp(encoder); > struct intel_connector *connector = > @@ -921,11 +921,11 @@ int intel_dp_mst_atomic_check_link(struct > intel_atomic_state *state, > return 0; > } > > -static int mst_stream_compute_config_late(struct intel_encoder *encoder, > +static int mst_stream_compute_config_late(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state > *conn_state) { > - struct intel_atomic_state *state = to_intel_atomic_state(conn_state- > >state); > struct intel_dp *intel_dp = to_primary_dp(encoder); > > /* lowest numbered transcoder will be designated master */ diff --git > a/drivers/gpu/drm/i915/display/intel_dvo.c > b/drivers/gpu/drm/i915/display/intel_dvo.c > index dd1a995c2979..181722c41b96 100644 > --- a/drivers/gpu/drm/i915/display/intel_dvo.c > +++ b/drivers/gpu/drm/i915/display/intel_dvo.c > @@ -242,7 +242,8 @@ intel_dvo_mode_valid(struct drm_connector > *_connector, > return intel_dvo->dev.dev_ops->mode_valid(&intel_dvo->dev, mode); > } > > -static int intel_dvo_compute_config(struct intel_encoder *encoder, > +static int intel_dvo_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > diff --git a/drivers/gpu/drm/i915/display/intel_lvds.c > b/drivers/gpu/drm/i915/display/intel_lvds.c > index c8098104d853..30e4809b36ac 100644 > --- a/drivers/gpu/drm/i915/display/intel_lvds.c > +++ b/drivers/gpu/drm/i915/display/intel_lvds.c > @@ -413,7 +413,8 @@ intel_lvds_mode_valid(struct drm_connector > *_connector, > return MODE_OK; > } > > -static int intel_lvds_compute_config(struct intel_encoder *encoder, > +static int intel_lvds_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *crtc_state, > struct drm_connector_state *conn_state) { > diff --git a/drivers/gpu/drm/i915/display/intel_sdvo.c > b/drivers/gpu/drm/i915/display/intel_sdvo.c > index d83d350959d8..6b73c9a5ec7f 100644 > --- a/drivers/gpu/drm/i915/display/intel_sdvo.c > +++ b/drivers/gpu/drm/i915/display/intel_sdvo.c > @@ -1354,7 +1354,8 @@ static bool intel_sdvo_has_audio(struct > intel_encoder *encoder, > return intel_conn_state->force_audio == HDMI_AUDIO_ON; } > > -static int intel_sdvo_compute_config(struct intel_encoder *encoder, > +static int intel_sdvo_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > diff --git a/drivers/gpu/drm/i915/display/intel_tv.c > b/drivers/gpu/drm/i915/display/intel_tv.c > index 0a926c6f25f4..840e1dcdc2d0 100644 > --- a/drivers/gpu/drm/i915/display/intel_tv.c > +++ b/drivers/gpu/drm/i915/display/intel_tv.c > @@ -1187,13 +1187,12 @@ static bool intel_tv_vert_scaling(const struct > drm_display_mode *tv_mode, } > > static int > -intel_tv_compute_config(struct intel_encoder *encoder, > +intel_tv_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > struct intel_display *display = to_intel_display(encoder); > - struct intel_atomic_state *state = > - to_intel_atomic_state(pipe_config->uapi.state); > struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); > struct intel_tv_connector_state *tv_conn_state = > to_intel_tv_connector_state(conn_state); > diff --git a/drivers/gpu/drm/i915/display/vlv_dsi.c > b/drivers/gpu/drm/i915/display/vlv_dsi.c > index 877eab75f19a..b89318f5bdc2 100644 > --- a/drivers/gpu/drm/i915/display/vlv_dsi.c > +++ b/drivers/gpu/drm/i915/display/vlv_dsi.c > @@ -266,7 +266,8 @@ static void band_gap_reset(struct intel_display > *display) > vlv_flisdsi_put(display); > } > > -static int intel_dsi_compute_config(struct intel_encoder *encoder, > +static int intel_dsi_compute_config(struct intel_atomic_state *state, > + struct intel_encoder *encoder, > struct intel_crtc_state *pipe_config, > struct drm_connector_state *conn_state) { > -- > 2.53.0
