Message ID | 20200625001120.22810-2-lucas.demarchi@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | display/ddi: keep register indexes in a table | expand |
On Wed, 24 Jun 2020, Lucas De Marchi <lucas.demarchi@intel.com> wrote: > Move the check for port F to intel_bios.c and just make intel_ddi_init() > call it. This will allow the output initialization of ICL to be like > platforms after it, allowing us to make it generic. > > Suggested-by: Jani Nikula <jani.nikula@linux.intel.com> > Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> > --- > drivers/gpu/drm/i915/display/intel_bios.c | 23 +++++++++++++++----- > drivers/gpu/drm/i915/display/intel_display.c | 10 +-------- > 2 files changed, 18 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c > index 6593e2c38043..9d42ea3721cd 100644 > --- a/drivers/gpu/drm/i915/display/intel_bios.c > +++ b/drivers/gpu/drm/i915/display/intel_bios.c > @@ -1668,16 +1668,27 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv, > [PORT_E] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 }, > }; > > - if (IS_ROCKETLAKE(dev_priv)) > + if (IS_ROCKETLAKE(dev_priv)) { > return __dvo_port_to_port(ARRAY_SIZE(rkl_port_mapping), > ARRAY_SIZE(rkl_port_mapping[0]), > rkl_port_mapping, > dvo_port); > - else > - return __dvo_port_to_port(ARRAY_SIZE(port_mapping), > - ARRAY_SIZE(port_mapping[0]), > - port_mapping, > - dvo_port); > + } else { > + enum port port = __dvo_port_to_port(ARRAY_SIZE(port_mapping), > + ARRAY_SIZE(port_mapping[0]), > + port_mapping, > + dvo_port); > + > + /* > + * On some ICL SKUs port F is not present. Work around broken > + * VBTs by allowing port F only on select SKUs. > + */ > + if (port == PORT_F && IS_ICELAKE(dev_priv) && > + !IS_ICL_WITH_PORT_F(dev_priv)) I'd perhaps add a debug message here, but either way, Reviewed-by: Jani Nikula <jani.nikula@intel.com> > + return PORT_NONE; > + > + return port; > + } > } > > static void parse_ddi_port(struct drm_i915_private *dev_priv, > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c > index a11bb675f9b3..49772c82a299 100644 > --- a/drivers/gpu/drm/i915/display/intel_display.c > +++ b/drivers/gpu/drm/i915/display/intel_display.c > @@ -16842,15 +16842,7 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv) > intel_ddi_init(dev_priv, PORT_C); > intel_ddi_init(dev_priv, PORT_D); > intel_ddi_init(dev_priv, PORT_E); > - /* > - * On some ICL SKUs port F is not present. No strap bits for > - * this, so rely on VBT. > - * Work around broken VBTs on SKUs known to have no port F. > - */ > - if (IS_ICL_WITH_PORT_F(dev_priv) && > - intel_bios_is_port_present(dev_priv, PORT_F)) > - intel_ddi_init(dev_priv, PORT_F); > - > + intel_ddi_init(dev_priv, PORT_F); > icl_dsi_init(dev_priv); > } else if (IS_GEN9_LP(dev_priv)) { > /*
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c index 6593e2c38043..9d42ea3721cd 100644 --- a/drivers/gpu/drm/i915/display/intel_bios.c +++ b/drivers/gpu/drm/i915/display/intel_bios.c @@ -1668,16 +1668,27 @@ static enum port dvo_port_to_port(struct drm_i915_private *dev_priv, [PORT_E] = { DVO_PORT_HDMID, DVO_PORT_DPD, -1 }, }; - if (IS_ROCKETLAKE(dev_priv)) + if (IS_ROCKETLAKE(dev_priv)) { return __dvo_port_to_port(ARRAY_SIZE(rkl_port_mapping), ARRAY_SIZE(rkl_port_mapping[0]), rkl_port_mapping, dvo_port); - else - return __dvo_port_to_port(ARRAY_SIZE(port_mapping), - ARRAY_SIZE(port_mapping[0]), - port_mapping, - dvo_port); + } else { + enum port port = __dvo_port_to_port(ARRAY_SIZE(port_mapping), + ARRAY_SIZE(port_mapping[0]), + port_mapping, + dvo_port); + + /* + * On some ICL SKUs port F is not present. Work around broken + * VBTs by allowing port F only on select SKUs. + */ + if (port == PORT_F && IS_ICELAKE(dev_priv) && + !IS_ICL_WITH_PORT_F(dev_priv)) + return PORT_NONE; + + return port; + } } static void parse_ddi_port(struct drm_i915_private *dev_priv, diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index a11bb675f9b3..49772c82a299 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -16842,15 +16842,7 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv) intel_ddi_init(dev_priv, PORT_C); intel_ddi_init(dev_priv, PORT_D); intel_ddi_init(dev_priv, PORT_E); - /* - * On some ICL SKUs port F is not present. No strap bits for - * this, so rely on VBT. - * Work around broken VBTs on SKUs known to have no port F. - */ - if (IS_ICL_WITH_PORT_F(dev_priv) && - intel_bios_is_port_present(dev_priv, PORT_F)) - intel_ddi_init(dev_priv, PORT_F); - + intel_ddi_init(dev_priv, PORT_F); icl_dsi_init(dev_priv); } else if (IS_GEN9_LP(dev_priv)) { /*
Move the check for port F to intel_bios.c and just make intel_ddi_init() call it. This will allow the output initialization of ICL to be like platforms after it, allowing us to make it generic. Suggested-by: Jani Nikula <jani.nikula@linux.intel.com> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> --- drivers/gpu/drm/i915/display/intel_bios.c | 23 +++++++++++++++----- drivers/gpu/drm/i915/display/intel_display.c | 10 +-------- 2 files changed, 18 insertions(+), 15 deletions(-)