On Fri, 14 Oct 2016, Jani Nikula <jani.nikula@xxxxxxxxx> wrote: > From: Shashank Sharma <shashank.sharma@xxxxxxxxx> > > Many GEN9 boards come with on-board lspcon cards. > Fot these boards, VBT configuration should properly point out > if a particular port contains lspcon device, so that driver can > initialize it properly. > > This patch adds a utility function, which checks the VBT flag > for lspcon bit, and tells us if a port is configured to have a > lspcon device or not. > > While we do not enable any lspcon handling yet, debug log about ports > with lspcon. > > V2: Fixed review comments from Ville > - Do not forget PORT_D while checking lspcon for GEN9 > > V3: Addressed review comments from Rodrigo > - Create a HAS_LSPCON() macro for better use case handling. > - Do not dump warnings for non-gen-9 platforms, it will be noise. > > V4: Rebase > V5: Rebase > > v6 by Jani: rebase, debug log > > Signed-off-by: Shashank Sharma <shashank.sharma@xxxxxxxxx> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@xxxxxxxxx> > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> > > --- > > Shashank, your series [1] didn't apply on nightly, so you'll need to > rebase and post again anyway. However, please let's merge this patch > from your series first, and we can even backport this so that we have > debug logging about LSPCON devices. [1] https://patchwork.freedesktop.org/series/8024/ > > BR, > Jani. > --- > drivers/gpu/drm/i915/i915_drv.h | 4 ++++ > drivers/gpu/drm/i915/intel_bios.c | 49 +++++++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/i915/intel_ddi.c | 4 ++++ > 3 files changed, 57 insertions(+) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index fe875b27a6bf..7c706a1ab7fe 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2814,6 +2814,8 @@ struct drm_i915_cmd_table { > > #define HAS_DP_MST(dev) (INTEL_INFO(dev)->has_dp_mst) > > +#define HAS_LSPCON(dev_priv) (IS_GEN9(dev_priv)) > + > #define HAS_DDI(dev_priv) ((dev_priv)->info.has_ddi) > #define HAS_FPGA_DBG_UNCLAIMED(dev) (INTEL_INFO(dev)->has_fpga_dbg) > #define HAS_PSR(dev) (INTEL_INFO(dev)->has_psr) > @@ -3631,6 +3633,8 @@ bool intel_bios_is_port_dp_dual_mode(struct drm_i915_private *dev_priv, enum por > bool intel_bios_is_dsi_present(struct drm_i915_private *dev_priv, enum port *port); > bool intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv, > enum port port); > +bool intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv, > + enum port port); > > /* intel_opregion.c */ > #ifdef CONFIG_ACPI > diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c > index 83667e8cdd6b..6f49b2364b70 100644 > --- a/drivers/gpu/drm/i915/intel_bios.c > +++ b/drivers/gpu/drm/i915/intel_bios.c > @@ -1763,3 +1763,52 @@ intel_bios_is_port_hpd_inverted(struct drm_i915_private *dev_priv, > > return false; > } > + > +/** > + * intel_bios_is_lspcon_present - if LSPCON is attached on %port > + * @dev_priv: i915 device instance > + * @port: port to check > + * > + * Return true if LSPCON is present on this port > + */ > +bool > +intel_bios_is_lspcon_present(struct drm_i915_private *dev_priv, > + enum port port) > +{ > + int i; > + > + if (!HAS_LSPCON(dev_priv)) > + return false; > + > + for (i = 0; i < dev_priv->vbt.child_dev_num; i++) { > + if (!dev_priv->vbt.child_dev[i].common.lspcon) > + continue; > + > + switch (dev_priv->vbt.child_dev[i].common.dvo_port) { > + case DVO_PORT_DPA: > + case DVO_PORT_HDMIA: > + if (port == PORT_A) > + return true; > + break; > + case DVO_PORT_DPB: > + case DVO_PORT_HDMIB: > + if (port == PORT_B) > + return true; > + break; > + case DVO_PORT_DPC: > + case DVO_PORT_HDMIC: > + if (port == PORT_C) > + return true; > + break; > + case DVO_PORT_DPD: > + case DVO_PORT_HDMID: > + if (port == PORT_D) > + return true; > + break; > + default: > + break; > + } > + } > + > + return false; > +} > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index a76afd7a6616..adf731ac189b 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -2470,6 +2470,10 @@ void intel_ddi_init(struct drm_device *dev, enum port port) > init_hdmi = (dev_priv->vbt.ddi_port_info[port].supports_dvi || > dev_priv->vbt.ddi_port_info[port].supports_hdmi); > init_dp = dev_priv->vbt.ddi_port_info[port].supports_dp; > + > + if (intel_bios_is_lspcon_present(dev_priv, port)) > + DRM_DEBUG_KMS("VBT says port %c has LSPCON\n", port_name(port)); > + > if (!init_dp && !init_hdmi) { > DRM_DEBUG_KMS("VBT says port %c is not DVI/HDMI/DP compatible, respect it\n", > port_name(port)); -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx