Re: [REGRESSION] i915: No HDMI output with 4.4

From: Oleksandr Natalenko
Date: Fri Feb 12 2016 - 09:57:53 EST


Ville,

I've applied patch you've provided and did couple of replugging with intel_reg in between. Here are the results.

I used additional VGA cable to see what actually I type in console :).

Both HDMI and VGA cables plugged: [1]
Both HDMI and VGA cables unplugged: [2]
Only HDMI cable plugged: [3]
Only VGA cable plugged: [4]

And here goes dmesg with all the stuff logged: [5]

Hope this helps.

[1] https://gist.github.com/58a0eb50dcf84e104555
[2] https://gist.github.com/7e8749a3e2cc58ea8aac
[3] https://gist.github.com/9d76930da7380634b845
[4] https://gist.github.com/c0d2e2f64242ad4f01f2
[5] https://gist.github.com/fda3b9fed3ca4d31cd20

11.02.2016 16:01, Ville SyrjÃlà wrote:
OK, so the hpd interrupt does happen, and yet the live status supposedly
claims that nothing is there. Port C live status definitely works here
on my IVB, so not sure what the deal is.

Can you grab intel-gpu-tools and run
intel_reg read 0xc4000 0xc4004 0xc4008 0xc400c 0xc4030
a couple of times after plugging the monitor in, and also run it when
nothing is plugged in.

Also you could try something like the following patch so we might
observe the live status with a bit more detail. Though the fact that it
doesn't seem to work for you even when the monitor was already plugged
in is somewhat troubling:

--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -1392,12 +1392,17 @@ intel_hdmi_detect(struct drm_connector
*connector, bool force)

intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);

- for (try = 0; !live_status && try < 9; try++) {
- if (try)
- msleep(10);
- live_status = intel_digital_port_connected(dev_priv,
+ printk("port %c live status\n ",
port_name(hdmi_to_dig_port(intel_hdmi)->port));
+ for (try = 0; try < 250; try++) {
+ bool status = intel_digital_port_connected(dev_priv,
hdmi_to_dig_port(intel_hdmi));
+ live_status |= status;
+ printk("%c", status ? '#' : '_');
+ if (try % 50 == 49)
+ printk("\n ");
+ usleep_range(1000, 1000);
}
+ printk("\n");

if (!live_status)
DRM_DEBUG_KMS("Live status not up!");
--
2.4.10

Oh, and if you have another cable you can try, might be a good idea to
see if it behaves any better.