Re: Power saving using Display port HPD

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Thu, Apr 10, 2014 at 12:54 PM, Daniel Vetter <daniel@xxxxxxxx> wrote:
On Thu, Apr 10, 2014 at 12:06:15PM +0530, Arun Chandran wrote:
> I have connected only a DP monitor on Bayley Bay platform and booting
> ubuntu 13.10 with the kernel
> http://cgit.freedesktop.org/drm-intel/log/?h=drm-intel-fixes.
>
> I am experimenting with the HPD feature of display port with debug
> messages enabled. (drm.debug=0xe).
>
> When I plug in/out DP cable I am able to see the below kernel messages
> and ubuntu desktop is displayed on the DP monitor
>
> ##############################
>
>
> root@arun-valley-view:~# uname -a
> Linux arun-valley-view 3.14.0-00528-g67e9d82 #34 SMP PREEMPT Wed Apr 9
> 18:48:30 IST 2014 i686 i686 i686 GNU/Linux
>
> root@arun-valley-view:~# dmesg -c
>
> [ 1028.506188] [drm:intel_hpd_irq_handler] hotplug event received,
> stat 0x00100000
> [ 1028.506217] [drm:intel_hpd_irq_handler] Received HPD interrupt on
> PIN 5 - cnt: 0
> [ 1028.513858] [drm:i915_hotplug_work_func] running encoder hotplug functions
> [ 1028.513880] [drm:i915_hotplug_work_func] Connector eDP-1 (pin 5)
> received hotplug event.
> [ 1028.513896] [drm:i915_hotplug_work_func] Connector HDMI-A-2 (pin 5)
> received hotplug event.
> [ 1028.513913] [drm:_edp_panel_vdd_on] Turning eDP VDD on
> [ 1028.513931] [drm:_edp_panel_vdd_on] PP_STATUS: 0x80000008
> PP_CONTROL: 0xabcd000f
> [ 1028.515064] [drm:intel_dp_get_dpcd] DPCD: 11 0a 84 01 01 00 01 80
> 02 00 00 00 00 00 00
> [ 1028.516563] [drm:intel_dp_check_link_status] TMDS-22: channel EQ
> not ok, retraining
> [ 1028.530884] [drm:intel_dp_set_signal_levels] Using signal levels 00000000
> [ 1028.546113] [drm:intel_dp_set_signal_levels] Using signal levels 00000000
> [ 1028.547233] [drm:intel_dp_start_link_train] clock recovery OK
> [ 1028.548711] [drm:intel_dp_complete_link_train] Channel EQ done. DP
> Training successful
> [ 1028.549264] [drm:intel_dp_detect] [CONNECTOR:23:eDP-1]
> [ 1028.549761] [drm:intel_dp_probe_oui] Sink OUI: 00e04c
> [ 1028.550262] [drm:intel_dp_probe_oui] Branch OUI: 000000
> [ 1028.550343] [drm:intel_hdmi_detect] [CONNECTOR:21:HDMI-A-2]
> [ 1028.550595] [drm:gmbus_xfer] GMBUS [i915 gmbus dpc] NAK for addr: 0050 r(1)
> [ 1028.550611] [drm:drm_do_probe_ddc_edid] drm: skipping non-existent
> adapter i915 gmbus dpc
>
> ##################################
>
> After booting I am executing the below steps
>
> 1) unplug DP cable.
>
> 2) Mask the pin 18 (HPD) of DP cable using a paper strip then connect it
> back
>     I have checked the dmesg output and the there is no messages related to
> HPD. So kernel is
>     unaware that I have connected a DP monitor
>
> But still I see ubuntu desktop coming on the DP monitor.  This means kernel
> does not stop pumping display data after step 1.
>
> Is this the right behavior? . When kernel knows that the last existing
> display is removed (via the HPD feature) it can save power by stopping the
> data output to DP monitor (or shutting down the DP hardware related part.)
>
> Does anybody knows how to use the HPD feature to save power? Or anybody has
> done this before?

Yes, this is expected behaviour. Userspace asked the kernel to shovel
pixels to the DP screen, the kernel obeyed. If you want to kill the pipe
when unplugged, you need to make that policy decision in userspace.


OK I understood that this is the expected behavior. 

In order to simulate power-saving with HPD  I am now doing.

1) Boot http://cgit.freedesktop.org/drm-intel/log/?h=drm-intel-nightly
arun@arun-valley-view:~$ uname -a
Linux arun-valley-view 3.14.0-00345-gd22313b #35 SMP PREEMPT Thu Apr 10 14:54:09 IST 2014 i686 i686 i686 GNU/Linux


2) sudo dmesg -c > /dev/null; xset dpms force off ( I am planning to do this when DP cable is unplugged by sending event to userspace)

    Then take dmesg from serial console after display goes blank.

####################################
arun@arun-valley-view:~$ sudo dmesg -c 
[  955.521469] [drm:valleyview_set_rps] GPU freq request from 167 MHz (191) to 542 MHz (209)
[  956.085890] [drm:valleyview_set_rps] GPU freq request from 167 MHz (191) to 791 MHz (221)
[  956.101376] [drm:valleyview_set_rps] GPU freq request from 791 MHz (221) to 791 MHz (221)
[  956.102478] [drm:valleyview_set_rps] GPU freq request from 791 MHz (221) to 791 MHz (221)
[  956.103167] [drm:valleyview_set_rps] GPU freq request from 791 MHz (221) to 791 MHz (221)
[  958.852674] [drm:valleyview_set_rps] GPU freq request from 167 MHz (191) to 542 MHz (209)
[  963.907584] [drm:_edp_panel_vdd_on] Turning eDP VDD on
[  963.907614] [drm:_edp_panel_vdd_on] PP_STATUS: 0x80000008 PP_CONTROL: 0xabcd000f
[  963.907631] [drm:intel_panel_actually_set_backlight] set backlight PWM = 0
[  963.907646] [drm:intel_edp_backlight_off] 
[  963.908150] [drm:intel_edp_panel_off] Turn eDP power off
[  964.109165] [drm:wait_panel_off] Wait for panel power off time
[  964.109194] [drm:wait_panel_status] mask b0000000 value 00000000 status 80000008 control abcd0000
[  964.153214] [drm:wait_panel_status] Wait complete
[  964.181035] [drm:intel_dp_link_down] 
[  964.233101] ------------[ cut here ]------------
[  964.233139] WARNING: CPU: 0 PID: 1013 at drivers/gpu/drm/i915/intel_display.c:768 g4x_wait_for_vblank+0xa5/0xbe()
[  964.233150] vblank wait timed out
[  964.233159] Modules linked in:
[  964.233181] CPU: 0 PID: 1013 Comm: Xorg Tainted: G        W    3.14.0-00345-gd22313b #35
[  964.233193] Hardware name: Intel Corp. VALLEYVIEW B0 PLATFORM/NOTEBOOK, BIOS BYTICRB1.86C.0072.R11.1401221240 01/22/2014
[  964.233204]  00000300 ee793d68 c090f720 c0b2bb3f ee793d80 c0436ce0 c06f63b4 f3b40000
[  964.233239]  001f0040 0000041b ee793d98 c0436d5b 00000009 ee793d90 c0b2dd12 ee793dac
[  964.233271]  ee793dc0 c06f63b4 c0b2bb3f 00000300 c0b2dd12 000a1ab1 000a1ae4 f3b40000
[  964.233304] Call Trace:
[  964.233327]  [<c090f720>] dump_stack+0x48/0x70
[  964.233349]  [<c0436ce0>] warn_slowpath_common+0x63/0x7a
[  964.233368]  [<c06f63b4>] ? g4x_wait_for_vblank+0xa5/0xbe
[  964.233387]  [<c0436d5b>] warn_slowpath_fmt+0x26/0x2a
[  964.233407]  [<c06f63b4>] g4x_wait_for_vblank+0xa5/0xbe
[  964.233426]  [<c06f63f1>] intel_wait_for_vblank+0x24/0xe6
[  964.233447]  [<c070ab0d>] intel_dp_link_down+0xdb/0x18f
[  964.233468]  [<c070abcc>] vlv_post_disable_dp+0xb/0xd
[  964.233488]  [<c06fdba4>] i9xx_crtc_disable+0x151/0x237
[  964.233510]  [<c06ee8f5>] intel_crtc_update_dpms+0x56/0x68
[  964.233529]  [<c06f85b2>] intel_connector_dpms+0x3e/0x48
[  964.233550]  [<c06b1c01>] drm_mode_obj_set_property_ioctl+0x1c0/0x2e7
[  964.233573]  [<c0605c99>] ? kobject_uevent+0xc/0xc
[  964.233592]  [<c06f8574>] ? intel_modeset_check_state+0x6f/0x6f
[  964.233612]  [<c06b1d57>] drm_mode_connector_property_set_ioctl+0x2f/0x37
[  964.233631]  [<c06a9370>] drm_ioctl+0x248/0x350
[  964.233650]  [<c06b1d28>] ? drm_mode_obj_set_property_ioctl+0x2e7/0x2e7
[  964.233672]  [<c047e9b4>] ? __call_rcu_core+0x11/0xc2
[  964.233692]  [<c0507280>] ? mntput_no_expire+0x20/0x108
[  964.233710]  [<c050738a>] ? mntput+0x22/0x24
[  964.233728]  [<c06a9128>] ? drm_ioctl_permit+0x6a/0x6a
[  964.233748]  [<c04fde57>] do_vfs_ioctl+0x219/0x232
[  964.233767]  [<c04fdeac>] SyS_ioctl+0x3c/0x56
[  964.233789]  [<c0913bbe>] sysenter_do_call+0x12/0x26
[  964.233802] ---[ end trace a3724fec7053be94 ]---
[  964.284395] [drm:valleyview_update_wm] Setting FIFO watermarks - A: plane=2, cursor=2, B: plane=2, cursor=2, SR: plane=0, cursor=0
[  964.284666] [drm:check_encoder_state] [ENCODER:13:DAC-13]
[  964.284703] [drm:check_encoder_state] [ENCODER:14:TMDS-14]
[  964.284771] [drm:check_encoder_state] [ENCODER:18:TMDS-18]
[  964.284839] [drm:check_encoder_state] [ENCODER:20:TMDS-20]
[  964.284907] [drm:check_encoder_state] [ENCODER:22:TMDS-22]
[  964.285029] [drm:check_crtc_state] [CRTC:5]
[  964.285110] [drm:check_crtc_state] [CRTC:9]
[  964.285192] [drm:drm_mode_setcrtc] [CRTC:5]
[  964.285207] [drm:intel_crtc_set_config] [CRTC:5] [NOFB]
[  964.285226] [drm:intel_set_config_compute_mode_changes] computed changes for [CRTC:5], mode_changed=1, fb_changed=0
[  964.285240] [drm:intel_modeset_stage_output_state] [CONNECTOR:23:eDP-1] to [NOCRTC]
[  964.285252] [drm:intel_modeset_stage_output_state] encoder changed, full mode switch
[  964.285264] [drm:intel_modeset_stage_output_state] crtc changed, full mode switch
[  964.285276] [drm:intel_modeset_stage_output_state] crtc disabled, full mode switch
[  964.285293] [drm:intel_modeset_affected_pipes] set mode pipe masks: modeset: 0, prepare: 0, disable: 1
[  964.285358] [drm:intel_display_power_put] disabling dpio-tx-c-23
[  964.287059] [drm:intel_display_power_put] disabling dpio-tx-c-01
[  964.293119] [drm:intel_display_power_put] disabling dpio-tx-b-23
[  964.301223] [drm:intel_display_power_put] disabling dpio-tx-b-01
[  964.303065] [drm:intel_display_power_put] disabling dpio-common
[  964.305075] [drm:intel_display_power_put] disabling display
[  964.307260] [drm:check_encoder_state] [ENCODER:13:DAC-13]
[  964.307291] [drm:check_encoder_state] [ENCODER:14:TMDS-14]
[  964.307316] [drm:check_encoder_state] [ENCODER:18:TMDS-18]
[  964.307340] [drm:check_encoder_state] [ENCODER:20:TMDS-20]
[  964.307364] [drm:check_encoder_state] [ENCODER:22:TMDS-22]
[  964.307388] [drm:check_crtc_state] [CRTC:5]
[  964.307411] [drm:check_crtc_state] [CRTC:9]

#############################################
    
3) Unplug DP cable
    
arun@arun-valley-view:~$ sudo dmesg -c 

(empty printk buffer)

4) Plug DP cable (planning to send event to userspace to do '$xset dpms force on'
arun@arun-valley-view:~$ sudo dmesg -c 

(empty printk buffer)

I was hoping to see HPD events from step 3&4. But no events are generated.

Is there any way to keep the HPD detection part awake so that I can send
it to userspace to do '$xset dpms force on'


Regards,
Arun C
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux