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

Reply via email to