https://bugs.freedesktop.org/show_bug.cgi?id=77394
--- Comment #16 from nine@detonation.org --- Today I finally made decent progress on this issue. I can confirm that the GPU lockups are not the X server's fault, since they appear also when using weston and indeed, when running the eglkms Mesa demo on the pure framebuffer.
Trying to find the exact OpenGL call that causes the lockup, I discovered, that when I change the power profile before starting any GL program (Mesa demo or display server), it continues to work until the next reboot. So all that was needed was a echo low > /sys/class/drm/card0/device/power_profile executed before starting the X server and I could change power profile at runtime.
I then turned on dpm again and indeed: echo high > /sys/class/drm/card0/device/power_dpm_force_performance_level echo auto > /sys/class/drm/card0/device/power_dpm_force_performance_level called by an ExecStartPre script from the display-server service file fixes the issue completely for me and I have now a fully working dpm :)
So it seems like the first change of performance level/profile initializes something that must be initialized before the first GL call or CRTC change for power management to be stable. Any idea what this something might be?