Skip to content

Commit e4abb73

Browse files
committed
drm/i915: Check VBT for CRT port presence on HSW/BDW
Unfortunatey there appear to quite a few HSW/BDW machines (eg. NUCs, Brix Pro) in the wild with LPT/WPT-H that have no physical CRT connector and non-working FDI. FDI training fails every single time on these machines. Dunno, maybe they just didn't bother wiring it up or something? Unfortunately all the fuse bits and whatnot are telling us that the CRT connector is present. And so what we get from this is tons of false positives from the CI systems due to VGA connector forcing. I've not found any way to detect this purely from hardware, so we have to resort to looking at the VBT int_crt_support bit. We used to check this bit on all platforms, but that broke all the old machines, so the check was then restricted to VLV only in commit 84b4e04 ("drm/i915: only apply crt_present check on VLV") Considering HSW and VLV VBT probably got defined around the same time, it should be reasonably safe to assume that the bits is sane for HSW/BDW as well. At least I have one copy of some VBT spec here that says it's meant for both VLV and HSW, and it knows about the bit (lists it being valid from version 155 onwards). Also I have two desktop machines with actual CRT ports and both have int_crt_support==1 in their VBTs. Also we already trust VBT >= 155 to tell us various details about the DDI ports, so trusting it a bit more seems reasonable. As far as VLV goes, the added VBT version check should be fine. Even if someone has some weird VLV machine with a very old VBT version, it just means they'll end up with a shadow CRT connector. IIRC the reason for eliminating the shadow CRT connector on VLV was to speed up display probing rather than fixing something more serious. v2: Move the platform checks into the VBT parsing code Also check that the VBT version is at least 155 v3: Improve commit message (Paulo) Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1449005493-15487-1-git-send-email-ville.syrjala@linux.intel.com
1 parent 70ac54d commit e4abb73

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

drivers/gpu/drm/i915/intel_bios.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,10 @@ parse_general_features(struct drm_i915_private *dev_priv,
356356
general = find_section(bdb, BDB_GENERAL_FEATURES);
357357
if (general) {
358358
dev_priv->vbt.int_tv_support = general->int_tv_support;
359-
dev_priv->vbt.int_crt_support = general->int_crt_support;
359+
/* int_crt_support can't be trusted on earlier platforms */
360+
if (bdb->version >= 155 &&
361+
(HAS_DDI(dev_priv) || IS_VALLEYVIEW(dev_priv)))
362+
dev_priv->vbt.int_crt_support = general->int_crt_support;
360363
dev_priv->vbt.lvds_use_ssc = general->enable_ssc;
361364
dev_priv->vbt.lvds_ssc_freq =
362365
intel_bios_ssc_frequency(dev, general->ssc_freq);

drivers/gpu/drm/i915/intel_display.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14264,7 +14264,7 @@ static bool intel_crt_present(struct drm_device *dev)
1426414264
if (HAS_DDI(dev) && I915_READ(DDI_BUF_CTL(PORT_A)) & DDI_A_4_LANES)
1426514265
return false;
1426614266

14267-
if (IS_VALLEYVIEW(dev) && !dev_priv->vbt.int_crt_support)
14267+
if (!dev_priv->vbt.int_crt_support)
1426814268
return false;
1426914269

1427014270
return true;

0 commit comments

Comments
 (0)