From: Jani Nikula <jani.nikula@linux.intel.com>
To: Lucas De Marchi <lucas.demarchi@intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 4/9] drm/i915/display: start description-based ddi initialization
Date: Tue, 31 Dec 2019 11:58:51 +0200 [thread overview]
Message-ID: <87tv5glstg.fsf@intel.com> (raw)
In-Reply-To: <20191223195850.25997-5-lucas.demarchi@intel.com>
On Mon, 23 Dec 2019, Lucas De Marchi <lucas.demarchi@intel.com> wrote:
> For the latest platforms we can share the logic to initialize the the
> ddi, so start moving the most trivial ones to a new setup_outputs_desc()
> function that will be responsible for initialization according to a
> static const table.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 96 +++++++++++++------
> .../drm/i915/display/intel_display_types.h | 4 +
> 2 files changed, 73 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 04819b0bd494..b3fb1e03cb0b 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -16221,6 +16221,72 @@ static void intel_pps_init(struct drm_i915_private *dev_priv)
> intel_pps_unlock_regs_wa(dev_priv);
> }
>
> +struct intel_output {
> + /* Initialize DSI if present */
> + void (*dsi_init)(struct drm_i915_private *i915);
We'll need to be able to initialize DSI on multiple ports too. I've
already drafted a series to do so, maybe I've even sent it to the
list. Basically you'd pass the port to icl_dsi_init() too.
I don't want that development to get any more complicated than it
already is.
BR,
Jani.
> + struct intel_ddi_port_info ddi_ports[];
> +};
> +
> +static const struct intel_output tgl_output = {
> + .dsi_init = icl_dsi_init,
> + .ddi_ports = {
> + { .port = PORT_A },
> + { .port = PORT_B },
> + { .port = PORT_D },
> + { .port = PORT_E },
> + { .port = PORT_F },
> + { .port = PORT_G },
> + { .port = PORT_H },
> + { .port = PORT_I },
> + { .port = PORT_NONE }
> + }
> +};
> +
> +static const struct intel_output ehl_output = {
> + .dsi_init = icl_dsi_init,
> + .ddi_ports = {
> + { .port = PORT_A },
> + { .port = PORT_B },
> + { .port = PORT_C },
> + { .port = PORT_D },
> + { .port = PORT_NONE }
> + }
> +};
> +
> +static const struct intel_output gen9lp_output = {
> + .dsi_init = vlv_dsi_init,
> + .ddi_ports = {
> + { .port = PORT_A },
> + { .port = PORT_B },
> + { .port = PORT_C },
> + { .port = PORT_NONE }
> + },
> +};
> +
> +/*
> + * Use a description-based approach for platforms that can be supported with a
> + * static table
> + */
> +static void setup_ddi_outputs_desc(struct drm_i915_private *i915)
> +{
> + const struct intel_output *output;
> + const struct intel_ddi_port_info *port_info;
> +
> + if (INTEL_GEN(i915) >= 12)
> + output = &tgl_output;
> + else if (IS_ELKHARTLAKE(i915))
> + output = &ehl_output;
> + else if (IS_GEN9_LP(i915))
> + output = &gen9lp_output;
> +
> + for (port_info = output->ddi_ports;
> + port_info->port != PORT_NONE; port_info++)
> + intel_ddi_init(i915, port_info->port);
> +
> + if (output->dsi_init)
> + output->dsi_init(i915);
> +}
> +
> static void intel_setup_outputs(struct drm_i915_private *dev_priv)
> {
> struct intel_encoder *encoder;
> @@ -16231,22 +16297,9 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
> if (!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv))
> return;
>
> - if (INTEL_GEN(dev_priv) >= 12) {
> - intel_ddi_init(dev_priv, PORT_A);
> - intel_ddi_init(dev_priv, PORT_B);
> - intel_ddi_init(dev_priv, PORT_D);
> - intel_ddi_init(dev_priv, PORT_E);
> - intel_ddi_init(dev_priv, PORT_F);
> - intel_ddi_init(dev_priv, PORT_G);
> - intel_ddi_init(dev_priv, PORT_H);
> - intel_ddi_init(dev_priv, PORT_I);
> - icl_dsi_init(dev_priv);
> - } else if (IS_ELKHARTLAKE(dev_priv)) {
> - intel_ddi_init(dev_priv, PORT_A);
> - intel_ddi_init(dev_priv, PORT_B);
> - intel_ddi_init(dev_priv, PORT_C);
> - intel_ddi_init(dev_priv, PORT_D);
> - icl_dsi_init(dev_priv);
> + if (INTEL_GEN(dev_priv) >= 12 || IS_ELKHARTLAKE(dev_priv) ||
> + IS_GEN9_LP(dev_priv)) {
> + setup_ddi_outputs_desc(dev_priv);
> } else if (IS_GEN(dev_priv, 11)) {
> intel_ddi_init(dev_priv, PORT_A);
> intel_ddi_init(dev_priv, PORT_B);
> @@ -16263,17 +16316,6 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
> intel_ddi_init(dev_priv, PORT_F);
>
> icl_dsi_init(dev_priv);
> - } else if (IS_GEN9_LP(dev_priv)) {
> - /*
> - * FIXME: Broxton doesn't support port detection via the
> - * DDI_BUF_CTL_A or SFUSE_STRAP registers, find another way to
> - * detect the ports.
> - */
> - intel_ddi_init(dev_priv, PORT_A);
> - intel_ddi_init(dev_priv, PORT_B);
> - intel_ddi_init(dev_priv, PORT_C);
> -
> - vlv_dsi_init(dev_priv);
> } else if (HAS_DDI(dev_priv)) {
> int found;
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index a3a067dacf84..4d2f4ee35812 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1376,6 +1376,10 @@ struct intel_dp_mst_encoder {
> struct intel_connector *connector;
> };
>
> +struct intel_ddi_port_info {
> + enum port port;
> +};
> +
> static inline enum dpio_channel
> vlv_dig_port_to_channel(struct intel_digital_port *dig_port)
> {
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2019-12-31 9:58 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-23 19:58 [Intel-gfx] [PATCH 0/9] RFC: display/ddi: keep register indexes in a table Lucas De Marchi
2019-12-23 19:58 ` [Intel-gfx] [PATCH 1/9] drm/i915/display: nuke skl workaround for pre-production hw Lucas De Marchi
2019-12-23 19:58 ` [Intel-gfx] [PATCH 2/9] drm/i915/display: remove alias to dig_port Lucas De Marchi
2019-12-23 21:05 ` Matt Roper
2019-12-23 19:58 ` [Intel-gfx] [PATCH 3/9] drm/i915/display: prefer the more common dig_port name Lucas De Marchi
2019-12-23 21:16 ` Matt Roper
2019-12-23 21:25 ` Lucas De Marchi
2019-12-23 19:58 ` [Intel-gfx] [PATCH 4/9] drm/i915/display: start description-based ddi initialization Lucas De Marchi
2019-12-31 9:58 ` Jani Nikula [this message]
2020-01-02 7:19 ` Lucas De Marchi
2020-06-22 23:50 ` Lucas De Marchi
2020-07-03 13:22 ` Jani Nikula
2019-12-23 19:58 ` [Intel-gfx] [PATCH 5/9] drm/i915/display: move icl to description-based ddi init Lucas De Marchi
2019-12-24 0:00 ` Matt Roper
2019-12-31 10:14 ` Jani Nikula
2020-01-02 7:32 ` Lucas De Marchi
2019-12-23 19:58 ` [Intel-gfx] [PATCH 6/9] drm/i915/display: description-based initialization for remaining ddi platforms Lucas De Marchi
2019-12-31 10:25 ` Jani Nikula
2019-12-31 10:26 ` Jani Nikula
2020-01-02 7:23 ` Lucas De Marchi
2019-12-23 19:58 ` [Intel-gfx] [PATCH 7/9] drm/i915/display: add phy, vbt and ddi indexes Lucas De Marchi
2019-12-24 0:10 ` Matt Roper
2019-12-24 0:17 ` Lucas De Marchi
2019-12-31 10:33 ` Jani Nikula
2020-01-02 7:50 ` Lucas De Marchi
2019-12-23 19:58 ` [Intel-gfx] [PATCH 8/9] drm/i915/display: refer to vbt info as vbt_port_info Lucas De Marchi
2019-12-31 10:39 ` Jani Nikula
2019-12-23 19:58 ` [Intel-gfx] [PATCH 9/9] drm/i915/display: use port_info on intel_ddi_init Lucas De Marchi
2019-12-24 0:16 ` Matt Roper
2019-12-31 11:20 ` Jani Nikula
2020-06-23 1:11 ` Lucas De Marchi
2019-12-31 11:22 ` Jani Nikula
2019-12-23 20:14 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for RFC: display/ddi: keep register indexes in a table Patchwork
2019-12-23 20:57 ` [Intel-gfx] ✗ Fi.CI.BAT: 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=87tv5glstg.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=lucas.demarchi@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.