From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ankit Nautiyal <ankit.k.nautiyal@intel.com>,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: suraj.kandpal@intel.com, ville.syrjala@linux.intel.com
Subject: Re: [PATCH 02/12] drm/i915/ddi: Move all mso related helpers to a new file
Date: Mon, 26 Aug 2024 14:52:53 +0300 [thread overview]
Message-ID: <8734mr33hm.fsf@intel.com> (raw)
In-Reply-To: <20240826111527.1113622-3-ankit.k.nautiyal@intel.com>
On Mon, 26 Aug 2024, Ankit Nautiyal <ankit.k.nautiyal@intel.com> wrote:
> Move the MSO related helper functions from intel_ddi.c to a new file
> intel_dss.c to improve code modularity and maintainability.
> The corresponding headers are also moved to intel_dss.h.
>
> Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
> drivers/gpu/drm/i915/Makefile | 1 +
> drivers/gpu/drm/i915/display/intel_ddi.c | 86 ++---------------------
> drivers/gpu/drm/i915/display/intel_dss.c | 87 ++++++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_dss.h | 21 ++++++
> drivers/gpu/drm/xe/Makefile | 1 +
> 5 files changed, 115 insertions(+), 81 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/display/intel_dss.c
> create mode 100644 drivers/gpu/drm/i915/display/intel_dss.h
>
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index c63fa2133ccb..e55ce8ba123c 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -328,6 +328,7 @@ i915-y += \
> display/intel_dsi.o \
> display/intel_dsi_dcs_backlight.o \
> display/intel_dsi_vbt.o \
> + display/intel_dss.o \
> display/intel_dvo.o \
> display/intel_encoder.o \
> display/intel_gmbus.o \
> diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c
> index 4566a60c981c..28ef6814c56c 100644
> --- a/drivers/gpu/drm/i915/display/intel_ddi.c
> +++ b/drivers/gpu/drm/i915/display/intel_ddi.c
> @@ -57,7 +57,7 @@
> #include "intel_dp_tunnel.h"
> #include "intel_dpio_phy.h"
> #include "intel_dsi.h"
> -#include "intel_dss_regs.h"
> +#include "intel_dss.h"
> #include "intel_encoder.h"
> #include "intel_fdi.h"
> #include "intel_fifo_underrun.h"
> @@ -2349,82 +2349,6 @@ static void intel_ddi_power_up_lanes(struct intel_encoder *encoder,
> }
> }
>
> -/*
> - * Splitter enable for eDP MSO is limited to certain pipes, on certain
> - * platforms.
> - */
> -static u8 intel_ddi_splitter_pipe_mask(struct drm_i915_private *i915)
> -{
> - if (DISPLAY_VER(i915) > 20)
> - return ~0;
> - else if (IS_ALDERLAKE_P(i915))
> - return BIT(PIPE_A) | BIT(PIPE_B);
> - else
> - return BIT(PIPE_A);
> -}
> -
> -static void intel_ddi_mso_get_config(struct intel_encoder *encoder,
> - struct intel_crtc_state *pipe_config)
> -{
> - struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
> - struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> - enum pipe pipe = crtc->pipe;
> - u32 dss1;
> -
> - if (!HAS_MSO(i915))
> - return;
> -
> - dss1 = intel_de_read(i915, ICL_PIPE_DSS_CTL1(pipe));
> -
> - pipe_config->splitter.enable = dss1 & SPLITTER_ENABLE;
> - if (!pipe_config->splitter.enable)
> - return;
> -
> - if (drm_WARN_ON(&i915->drm, !(intel_ddi_splitter_pipe_mask(i915) & BIT(pipe)))) {
> - pipe_config->splitter.enable = false;
> - return;
> - }
> -
> - switch (dss1 & SPLITTER_CONFIGURATION_MASK) {
> - default:
> - drm_WARN(&i915->drm, true,
> - "Invalid splitter configuration, dss1=0x%08x\n", dss1);
> - fallthrough;
> - case SPLITTER_CONFIGURATION_2_SEGMENT:
> - pipe_config->splitter.link_count = 2;
> - break;
> - case SPLITTER_CONFIGURATION_4_SEGMENT:
> - pipe_config->splitter.link_count = 4;
> - break;
> - }
> -
> - pipe_config->splitter.pixel_overlap = REG_FIELD_GET(OVERLAP_PIXELS_MASK, dss1);
> -}
> -
> -static void intel_ddi_mso_configure(const struct intel_crtc_state *crtc_state)
> -{
> - struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> - struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> - enum pipe pipe = crtc->pipe;
> - u32 dss1 = 0;
> -
> - if (!HAS_MSO(i915))
> - return;
> -
> - if (crtc_state->splitter.enable) {
> - dss1 |= SPLITTER_ENABLE;
> - dss1 |= OVERLAP_PIXELS(crtc_state->splitter.pixel_overlap);
> - if (crtc_state->splitter.link_count == 2)
> - dss1 |= SPLITTER_CONFIGURATION_2_SEGMENT;
> - else
> - dss1 |= SPLITTER_CONFIGURATION_4_SEGMENT;
> - }
> -
> - intel_de_rmw(i915, ICL_PIPE_DSS_CTL1(pipe),
> - SPLITTER_ENABLE | SPLITTER_CONFIGURATION_MASK |
> - OVERLAP_PIXELS_MASK, dss1);
> -}
> -
> static u8 mtl_get_port_width(u8 lane_count)
> {
> switch (lane_count) {
> @@ -2559,7 +2483,7 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state,
> /*
> * 6.e Program CoG/MSO configuration bits in DSS_CTL1 if selected.
> */
> - intel_ddi_mso_configure(crtc_state);
> + intel_dss_configure_mso(crtc_state);
>
> if (!is_mst)
> intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
> @@ -2714,7 +2638,7 @@ static void tgl_ddi_pre_enable_dp(struct intel_atomic_state *state,
> /*
> * 7.g Program CoG/MSO configuration bits in DSS_CTL1 if selected.
> */
> - intel_ddi_mso_configure(crtc_state);
> + intel_dss_configure_mso(crtc_state);
>
> if (!is_mst)
> intel_dp_set_power(intel_dp, DP_SET_POWER_D0);
> @@ -3959,7 +3883,7 @@ static void intel_ddi_get_config(struct intel_encoder *encoder,
>
> intel_ddi_read_func_ctl(encoder, pipe_config);
>
> - intel_ddi_mso_get_config(encoder, pipe_config);
> + intel_dss_get_mso_config(encoder, pipe_config);
>
> pipe_config->has_audio =
> intel_ddi_is_audio_enabled(dev_priv, cpu_transcoder);
> @@ -5191,7 +5115,7 @@ void intel_ddi_init(struct intel_display *display,
> dig_port->hpd_pulse = intel_dp_hpd_pulse;
>
> if (dig_port->dp.mso_link_count)
> - encoder->pipe_mask = intel_ddi_splitter_pipe_mask(dev_priv);
> + encoder->pipe_mask = intel_dss_splitter_pipe_mask(dev_priv);
> }
>
> /*
> diff --git a/drivers/gpu/drm/i915/display/intel_dss.c b/drivers/gpu/drm/i915/display/intel_dss.c
> new file mode 100644
> index 000000000000..41ea42d234f9
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/display/intel_dss.c
> @@ -0,0 +1,87 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include "i915_drv.h"
> +#include "i915_reg_defs.h"
> +#include "intel_de.h"
> +#include "intel_display_types.h"
> +#include "intel_dss.h"
> +#include "intel_dss_regs.h"
> +
> +/*
> + * Splitter enable for eDP MSO is limited to certain pipes, on certain
> + * platforms.
> + */
> +u8 intel_dss_splitter_pipe_mask(struct drm_i915_private *i915)
> +{
> + if (DISPLAY_VER(i915) > 20)
> + return ~0;
> + else if (IS_ALDERLAKE_P(i915))
> + return BIT(PIPE_A) | BIT(PIPE_B);
> + else
> + return BIT(PIPE_A);
> +}
> +
> +void intel_dss_get_mso_config(struct intel_encoder *encoder,
> + struct intel_crtc_state *pipe_config)
> +{
> + struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
> + struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> + enum pipe pipe = crtc->pipe;
> + u32 dss1;
> +
> + if (!HAS_MSO(i915))
> + return;
> +
> + dss1 = intel_de_read(i915, ICL_PIPE_DSS_CTL1(pipe));
> +
> + pipe_config->splitter.enable = dss1 & SPLITTER_ENABLE;
> + if (!pipe_config->splitter.enable)
> + return;
> +
> + if (drm_WARN_ON(&i915->drm, !(intel_dss_splitter_pipe_mask(i915) & BIT(pipe)))) {
> + pipe_config->splitter.enable = false;
> + return;
> + }
> +
> + switch (dss1 & SPLITTER_CONFIGURATION_MASK) {
> + default:
> + drm_WARN(&i915->drm, true,
> + "Invalid splitter configuration, dss1=0x%08x\n", dss1);
> + fallthrough;
> + case SPLITTER_CONFIGURATION_2_SEGMENT:
> + pipe_config->splitter.link_count = 2;
> + break;
> + case SPLITTER_CONFIGURATION_4_SEGMENT:
> + pipe_config->splitter.link_count = 4;
> + break;
> + }
> +
> + pipe_config->splitter.pixel_overlap = REG_FIELD_GET(OVERLAP_PIXELS_MASK, dss1);
> +}
> +
> +void intel_dss_configure_mso(const struct intel_crtc_state *crtc_state)
> +{
> + struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> + struct drm_i915_private *i915 = to_i915(crtc->base.dev);
> + enum pipe pipe = crtc->pipe;
> + u32 dss1 = 0;
> +
> + if (!HAS_MSO(i915))
> + return;
> +
> + if (crtc_state->splitter.enable) {
> + dss1 |= SPLITTER_ENABLE;
> + dss1 |= OVERLAP_PIXELS(crtc_state->splitter.pixel_overlap);
> + if (crtc_state->splitter.link_count == 2)
> + dss1 |= SPLITTER_CONFIGURATION_2_SEGMENT;
> + else
> + dss1 |= SPLITTER_CONFIGURATION_4_SEGMENT;
> + }
> +
> + intel_de_rmw(i915, ICL_PIPE_DSS_CTL1(pipe),
> + SPLITTER_ENABLE | SPLITTER_CONFIGURATION_MASK |
> + OVERLAP_PIXELS_MASK, dss1);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_dss.h b/drivers/gpu/drm/i915/display/intel_dss.h
> new file mode 100644
> index 000000000000..632a00f0ebc1
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/display/intel_dss.h
> @@ -0,0 +1,21 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __INTEL_DSS_H__
> +#define __INTEL_DSS_H__
> +
> +#include "linux/types.h"
> +
> +struct drm_i915_private;
> +struct intel_crtc_state;
> +struct intel_encoder;
> +
> +u8 intel_dss_splitter_pipe_mask(struct drm_i915_private *i915);
> +void intel_dss_get_mso_config(struct intel_encoder *encoder,
> + struct intel_crtc_state *pipe_config);
> +void intel_dss_configure_mso(const struct intel_crtc_state *crtc_state);
Nitpick, I'd probably name all of these intel_dss_mso_*.
intel_dss_mso_pipe_mask
intel_dss_mso_get_config
intel_dss_mso_configure
Especially "_get_config" suffix is a naming pattern for functions called
on the encoder->get_config path, and you don't want to add words in
between.
BR,
Jani.
> +
> +#endif /* __INTEL_DSS_H__ */
> +
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index b9670ae09a9e..619272783669 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -227,6 +227,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \
> i915-display/intel_dsi.o \
> i915-display/intel_dsi_dcs_backlight.o \
> i915-display/intel_dsi_vbt.o \
> + i915-display/intel_dss.o \
> i915-display/intel_encoder.o \
> i915-display/intel_fb.o \
> i915-display/intel_fbc.o \
--
Jani Nikula, Intel
next prev parent reply other threads:[~2024-08-26 11:53 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-26 11:15 [PATCH 00/12] Consolidation of DSS Control in Separate Files Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 01/12] drm/i915/display: Move all DSS control registers to a new file Ankit Nautiyal
2024-08-26 11:46 ` Jani Nikula
2024-08-26 11:15 ` [PATCH 02/12] drm/i915/ddi: Move all mso related helpers " Ankit Nautiyal
2024-08-26 11:52 ` Jani Nikula [this message]
2024-08-26 11:15 ` [PATCH 03/12] drm/i915/dss: Move to struct intel_display Ankit Nautiyal
2024-08-26 11:55 ` Jani Nikula
2024-08-26 11:15 ` [PATCH 04/12] drm/i915/icl_dsi: Move helpers to configure dsi dual link to intel_dss Ankit Nautiyal
2024-08-26 11:58 ` Jani Nikula
2024-08-26 11:15 ` [PATCH 05/12] drm/i915/vdsc: Rename helper to check if the pipe supports dsc Ankit Nautiyal
2024-08-26 12:41 ` Jani Nikula
2024-08-29 14:19 ` Nautiyal, Ankit K
2024-08-26 11:15 ` [PATCH 06/12] drm/i915/vdsc: Move all dss stuff in dss files Ankit Nautiyal
2024-08-26 12:09 ` Jani Nikula
2024-08-26 11:15 ` [PATCH 07/12] drm/i915/display: Move dss stuff in intel_dss files Ankit Nautiyal
2024-08-26 12:11 ` Jani Nikula
2024-08-26 11:15 ` [PATCH 08/12] drm/i915/display: Move helper to get joined pipe mask to intel_dss Ankit Nautiyal
2024-08-26 12:20 ` Jani Nikula
2024-08-26 11:15 ` [PATCH 09/12] drm/i915/display: Move helpers for primary joiner " Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 10/12] drm/i915/display: Move helper to check for secondary joiner pipe Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 11/12] drm/i915/display: Move helper to get all secondary pipes Ankit Nautiyal
2024-08-26 11:15 ` [PATCH 12/12] drm/i915/display: Move intel_joiner_num_pipes to intel dss Ankit Nautiyal
2024-08-26 11:20 ` ✓ CI.Patch_applied: success for Consolidation of DSS Control in Separate Files Patchwork
2024-08-26 11:21 ` ✗ CI.checkpatch: warning " Patchwork
2024-08-26 11:22 ` ✓ CI.KUnit: success " Patchwork
2024-08-26 11:34 ` ✓ CI.Build: " Patchwork
2024-08-26 11:36 ` ✓ CI.Hooks: " Patchwork
2024-08-26 11:37 ` ✗ CI.checksparse: warning " Patchwork
2024-08-26 11:56 ` ✓ CI.BAT: success " Patchwork
2024-08-26 12:34 ` [PATCH 00/12] " Jani Nikula
2024-08-27 12:20 ` Nautiyal, Ankit K
2024-08-26 15:20 ` ✓ CI.FULL: success for " Patchwork
2024-08-26 16:11 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2024-08-26 16:11 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-08-26 16:19 ` ✓ Fi.CI.BAT: success " Patchwork
2024-08-27 11:00 ` ✗ Fi.CI.IGT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8734mr33hm.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=ankit.k.nautiyal@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=suraj.kandpal@intel.com \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.