[Intel-gfx] [PATCH v6 19/24] drm/i915/dg1: enable PORT C/D aka D/E
Matt Roper
matthew.d.roper at intel.com
Wed Sep 30 17:33:13 UTC 2020
On Tue, Sep 29, 2020 at 11:42:29PM -0700, Lucas De Marchi wrote:
> For DG1 we have a little of mix up wrt to DDI/port names and indexes.
> Bspec refers to the ports as DDIA, DDIB, DDI USBC1 and DDI USBC2
> (besides the DDIA, DDIB, DDIC, DDID), but the previous naming is the
> most unambiguous one. This means that for any register on Display Engine
> we should use the index of A, B, D and E. However in some places this is
> not true:
>
> - VBT: uses C and D and have to be mapped to D/E
>
> - IO/Combo: uses C and D, but we already differentiate those when
> we created the phy vs port distinction.
>
> Ths additional mapping for VBT and phy are already covered in previous
> patches, so now we can initialize the DDI as D/E.
I don't see a pressing need to keep this separate from patch 13; it's
probably easier to just roll patch 13 into this patch and enable all of
the outputs at once after we have all the plumbing in place.
>
> Cc: Clinton Taylor <Clinton.A.Taylor at intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 18 ++++++++++++------
> 1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 43fe5867a8ae..6a63fb0136d4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -7332,10 +7332,7 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
> {
> if (phy == PHY_NONE)
> return false;
> - else if (IS_DG1(dev_priv))
> - /* FIXME: Enable only two ports for now */
> - return phy <= PHY_B;
> - else if (IS_ROCKETLAKE(dev_priv))
> + else if (IS_DG1(dev_priv) || IS_ROCKETLAKE(dev_priv))
> return phy <= PHY_D;
> else if (IS_ELKHARTLAKE(dev_priv))
> return phy <= PHY_C;
> @@ -7359,7 +7356,7 @@ bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
>
> enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
> {
> - if (IS_ROCKETLAKE(i915) && port >= PORT_D)
> + if ((IS_DG1(i915) || IS_ROCKETLAKE(i915)) && port >= PORT_D)
> return (enum phy)port - 1;
> else if (IS_ELKHARTLAKE(i915) && port == PORT_D)
> return PHY_A;
> @@ -17128,9 +17125,18 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
> return;
>
> if (IS_DG1(dev_priv)) {
We could just add IS_DG1 to the IS_ROCKETLAKE condition for the block
below since they're now the same thing.
In fact it might be worth explicitly mentioning the similarity to RKL in
the commit message.
Matt
> - /* FIXME: Enable only two ports for now */
> intel_ddi_init(dev_priv, PORT_A);
> intel_ddi_init(dev_priv, PORT_B);
> +
> + /*
> + * Bspec lists the ports as A, B, C (USBC1) and D (USBC2).
> + * However from the Display Engine perspective all registers are
> + * actually wired to handle C and D as offsets of D/E. Instead
> + * of fighting all our macros for handling them specially for
> + * DG1, just call them D/E
> + */
> + intel_ddi_init(dev_priv, PORT_D);
> + intel_ddi_init(dev_priv, PORT_E);
> } else if (IS_ROCKETLAKE(dev_priv)) {
> intel_ddi_init(dev_priv, PORT_A);
> intel_ddi_init(dev_priv, PORT_B);
> --
> 2.28.0
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Matt Roper
Graphics Software Engineer
VTT-OSGC Platform Enablement
Intel Corporation
(916) 356-2795
More information about the Intel-gfx
mailing list