[v2] drm/i915: Allow fastset for change in HDR infoframe
Borah, Chaitanya Kumar
chaitanya.kumar.borah at intel.com
Tue Oct 22 11:57:04 UTC 2024
Hi Jani,
Thank you for the review.
> -----Original Message-----
> From: Jani Nikula <jani.nikula at linux.intel.com>
> Sent: Wednesday, October 9, 2024 2:59 PM
> To: Borah, Chaitanya Kumar <chaitanya.kumar.borah at intel.com>; intel-
> gfx at lists.freedesktop.org; intel-xe at lists.freedesktop.org
> Cc: Deak, Imre <imre.deak at intel.com>; Shankar, Uma
> <uma.shankar at intel.com>; ville.syrjala at linux.intel.com
> Subject: Re: [v2] drm/i915: Allow fastset for change in HDR infoframe
>
> On Wed, 09 Oct 2024, Chaitanya Kumar Borah
> <chaitanya.kumar.borah at intel.com> wrote:
> > Changes in Dynamic Range and Mastering infoframe should not trigger a
> > full modeset. Therefore, allow fastset. DP SDP programming is already
> > hooked up in the fastset flow but HDMI AVI infoframe update is not,
> > add it.
> > Any other infoframe that can be fastset should be added to the helper
> > intel_hdmi_fastset_infoframes().
> >
> > v2:
> > - Update HDMI AVI infoframe during fastset.
> >
> > Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_ddi.c | 3 +++
> > drivers/gpu/drm/i915/display/intel_display.c | 3 ++-
> > drivers/gpu/drm/i915/display/intel_hdmi.c | 19 +++++++++++++++++++
> > drivers/gpu/drm/i915/display/intel_hdmi.h | 3 +++
> > 4 files changed, 27 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c
> > b/drivers/gpu/drm/i915/display/intel_ddi.c
> > index fe1ded6707f9..3195c1125ac3 100644
> > --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> > @@ -3489,6 +3489,9 @@ void intel_ddi_update_pipe(struct
> intel_atomic_state *state,
> > intel_ddi_update_pipe_dp(state, encoder, crtc_state,
> > conn_state);
> >
> > + if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI))
> > + intel_hdmi_fastset_infoframes(encoder, crtc_state,
> conn_state);
>
> I don't know if the patch at hand is the right thing to do, but if it is, please let's
> stick to uniform naming here. If you add stuff specifically for the encoder-
> >update_pipe path, please name it
> *_update_pipe() i.e. intel_hdmi_infoframes_update_pipe().
>
Ack.
> OTOH the DP path uses a common function, which makes me wonder if there
> could be less duplication for HDMI too.
>
Considering you are talking about the common function for updating all the HDMI infoframes,
it will need a bit more investigation to determine which infoframes actually can be updated in a fastest.
We know that at least one of them can't. See [1].
The tests we ran suggests that DRM info frame can be successfully updated during a fastest. This also seems
to be a valid use case.
Will it be prudent to have a common function intel_hdmi_fastset_infoframes and add other infoframes to it
as and when needed?
Regards
Chaitanya
[1] https://patchwork.freedesktop.org/patch/229325/
> BR,
> Jani.
>
>
> > +
> > intel_hdcp_update_pipe(state, encoder, crtc_state, conn_state); }
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> > b/drivers/gpu/drm/i915/display/intel_display.c
> > index e1f6255e918b..e8f8f55f75d2 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > @@ -5683,7 +5683,8 @@ intel_pipe_config_compare(const struct
> intel_crtc_state *current_config,
> > PIPE_CONF_CHECK_INFOFRAME(avi);
> > PIPE_CONF_CHECK_INFOFRAME(spd);
> > PIPE_CONF_CHECK_INFOFRAME(hdmi);
> > - PIPE_CONF_CHECK_INFOFRAME(drm);
> > + if (!fastset)
> > + PIPE_CONF_CHECK_INFOFRAME(drm);
> > PIPE_CONF_CHECK_DP_VSC_SDP(vsc);
> > PIPE_CONF_CHECK_DP_AS_SDP(as_sdp);
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > index 72ac910bf6ec..eba79f14d4e2 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.c
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
> > @@ -1211,6 +1211,25 @@ static void vlv_set_infoframes(struct
> intel_encoder *encoder,
> > &crtc_state->infoframes.hdmi); }
> >
> > +void intel_hdmi_fastset_infoframes(struct intel_encoder *encoder,
> > + const struct intel_crtc_state *crtc_state,
> > + const struct drm_connector_state
> *conn_state) {
> > + struct intel_display *display = to_intel_display(encoder);
> > + i915_reg_t reg = HSW_TVIDEO_DIP_CTL(display,
> > + crtc_state->cpu_transcoder);
> > + u32 val = intel_de_read(display, reg);
> > +
> > + val &= ~(VIDEO_DIP_ENABLE_DRM_GLK);
> > +
> > + intel_de_write(display, reg, val);
> > + intel_de_posting_read(display, reg);
> > +
> > + intel_write_infoframe(encoder, crtc_state,
> > + HDMI_INFOFRAME_TYPE_DRM,
> > + &crtc_state->infoframes.drm); }
> > +
> > static void hsw_set_infoframes(struct intel_encoder *encoder,
> > bool enable,
> > const struct intel_crtc_state *crtc_state, diff --git
> > a/drivers/gpu/drm/i915/display/intel_hdmi.h
> > b/drivers/gpu/drm/i915/display/intel_hdmi.h
> > index 9b97623665c5..466f48df8a74 100644
> > --- a/drivers/gpu/drm/i915/display/intel_hdmi.h
> > +++ b/drivers/gpu/drm/i915/display/intel_hdmi.h
> > @@ -42,6 +42,9 @@ u32 intel_hdmi_infoframes_enabled(struct
> > intel_encoder *encoder,
> > u32 intel_hdmi_infoframe_enable(unsigned int type); void
> > intel_hdmi_read_gcp_infoframe(struct intel_encoder *encoder,
> > struct intel_crtc_state *crtc_state);
> > +void intel_hdmi_fastset_infoframes(struct intel_encoder *encoder,
> > + const struct intel_crtc_state *crtc_state,
> > + const struct drm_connector_state
> *conn_state);
> > void intel_read_infoframe(struct intel_encoder *encoder,
> > const struct intel_crtc_state *crtc_state,
> > enum hdmi_infoframe_type type,
>
> --
> Jani Nikula, Intel
More information about the Intel-xe
mailing list