[Intel-gfx] [V14 4/5] drm/i915/dsi: Initiate frame request in cmd mode
Ville Syrjälä
ville.syrjala at linux.intel.com
Mon Sep 28 10:17:57 UTC 2020
On Thu, Sep 24, 2020 at 06:12:08PM +0530, Vandita Kulkarni wrote:
> In TE Gate mode or TE NO_GATE mode on every flip
> we need to set the frame update request bit.
> After this bit is set transcoder hardware will
> automatically send the frame data to the panel
> in case of TE NO_GATE mode, where it sends after
> it receives the TE event in case of TE_GATE mode.
> Once the frame data is sent to the panel, we see
> the frame counter updating.
>
> v2: Use intel_de_read/write
>
> v3: remove the usage of private_flags
>
> v4: Use icl_dsi in func names if non static,
> fix code formatting issues. (Jani)
>
> v5: Send frame update request at the beginning of
> pipe_update_end, use crtc_state mode_flags (Ville)
>
> Signed-off-by: Vandita Kulkarni <vandita.kulkarni at intel.com>
> ---
> drivers/gpu/drm/i915/display/icl_dsi.c | 26 +++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_dsi.h | 1 +
> drivers/gpu/drm/i915/display/intel_sprite.c | 7 ++++++
> 3 files changed, 34 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c b/drivers/gpu/drm/i915/display/icl_dsi.c
> index 2789020e20db..fe946a2e2082 100644
> --- a/drivers/gpu/drm/i915/display/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/display/icl_dsi.c
> @@ -205,6 +205,32 @@ static int dsi_send_pkt_payld(struct intel_dsi_host *host,
> return 0;
> }
>
> +void icl_dsi_frame_update(struct intel_crtc_state *crtc_state)
> +{
> + struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> + u32 tmp, mode_flags;
> + enum port port;
> +
> + mode_flags = crtc_state->mode_flags;
> +
> + /*
> + * case 1 also covers dual link
> + * In case of dual link, frame update should be set on
> + * DSI_0
> + */
> + if (mode_flags & I915_MODE_FLAG_DSI_USE_TE0)
> + port = PORT_A;
> + else if (mode_flags & I915_MODE_FLAG_DSI_USE_TE1)
> + port = PORT_B;
> + else
> + return;
> +
> + tmp = intel_de_read(dev_priv, DSI_CMD_FRMCTL(port));
> + tmp |= DSI_FRAME_UPDATE_REQUEST;
> + intel_de_write(dev_priv, DSI_CMD_FRMCTL(port), tmp);
> +}
> +
> static void dsi_program_swing_and_deemphasis(struct intel_encoder *encoder)
> {
> struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> diff --git a/drivers/gpu/drm/i915/display/intel_dsi.h b/drivers/gpu/drm/i915/display/intel_dsi.h
> index 19f78a4022d3..625f2f1ae061 100644
> --- a/drivers/gpu/drm/i915/display/intel_dsi.h
> +++ b/drivers/gpu/drm/i915/display/intel_dsi.h
> @@ -167,6 +167,7 @@ static inline u16 intel_dsi_encoder_ports(struct intel_encoder *encoder)
>
> /* icl_dsi.c */
> void icl_dsi_init(struct drm_i915_private *dev_priv);
> +void icl_dsi_frame_update(struct intel_crtc_state *crtc_state);
>
> /* intel_dsi.c */
> int intel_dsi_bitrate(const struct intel_dsi *intel_dsi);
> diff --git a/drivers/gpu/drm/i915/display/intel_sprite.c b/drivers/gpu/drm/i915/display/intel_sprite.c
> index 63040cb0d4e1..eaee29e0f535 100644
> --- a/drivers/gpu/drm/i915/display/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/display/intel_sprite.c
> @@ -47,6 +47,7 @@
> #include "intel_frontbuffer.h"
> #include "intel_pm.h"
> #include "intel_psr.h"
> +#include "intel_dsi.h"
> #include "intel_sprite.h"
>
> int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
> @@ -202,6 +203,12 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state)
>
> trace_intel_pipe_update_end(crtc, end_vbl_count, scanline_end);
>
> + /*
> + * Incase of mipi dsi command mode, we need to set frame update
> + * request for every commit.
> + */
> + icl_dsi_frame_update(new_crtc_state);
Calling something called icl_dsi_foo() unconditionally from platform
agnostic code looks confusing. I'd add platform+intel_crtc_has_type()
check here.
> +
> /* We're still in the vblank-evade critical section, this can't race.
> * Would be slightly nice to just grab the vblank count and arm the
> * event outside of the critical section - the spinlock might spin for a
> --
> 2.21.0.5.gaeb582a
--
Ville Syrjälä
Intel
More information about the Intel-gfx
mailing list