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. >