Re: Atomic driver and old remove FB behavior

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

 



Op 06-02-18 om 15:43 schreef Oleksandr Andrushchenko:
> Hello, Maarten!
>
>
> On 02/01/2018 12:13 PM, Oleksandr Andrushchenko wrote:
>> On 02/01/2018 12:04 PM, Maarten Lankhorst wrote:
>>> Op 01-02-18 om 08:08 schreef Oleksandr Andrushchenko:
>>>> Hi, all!
>>>>
>>>> I am working on a para-virtualized frontend DRM driver for Xen [1]
>>>> which implements display device I/O interface for Xen guest OSes [2].
>>>>
>>>> At the moment I am rebasing the existing implementation from 4.9 kernel
>>>> to recent and found that when user-space DRM application exits then CRTC's
>>>> .set_config callback is not called to reset CRTC's mode to NULL.
>>>>
>>>> I tracked the change down to commit 846c7dfc1193eb2f9866fe2fa0ae7d45c72f95b9
>>>> "drm/atomic: Try to preserve the crtc enabled state in drm_atomic_remove_fb, v2.
>>>>
>>>>      This introduces a slight behavioral change to rmfb. Instead of
>>>>      disabling a crtc when the primary plane is disabled, we try to
>>>>      preserve it.
>>>> <snip>
>>>>      If the atomic commit is rejected by the driver then we will still
>>>>      fall back to the old behavior and turn off the crtc.
>>>> "
>>>> which per my understanding is ok for real hardware, but in my case I still
>>>> need .set_config to be called with NULL: this way I can tell the backend
>>>>
>>>> driver that it can release resources for this connection on its end.
>>>>
>>>>
>>>> I tried to implement drm_mode_config_funcs's .atomic_commit returning -EINVAL
>>>> on tear down, but at best it made CRTC's atomic state change to NOCRTC, but
>>>> still no .set_config callback seen.
>>>>
>>>> Can anyone please tell me the right sequence to implement old remove FB
>>>> behavior for atomic drivers? Or what could be the problem on my side?
>>> rmfb was never meant to mean that the crtc will be disabled as well. vmwgfx relied on that
>>> behavior as well for old userspace support because userspace never called set_config.
>>>
>>> If you're an atomic driver, the driver core will never call set_config any more, even if the
>>> first attempt to disable returns -EINVAL. Even the fbcon helpers now perform direct
>>> calls to atomic_commit().
>> understood, thank you for clarification
> I started to re-implement the existing code in my driver to comply to the
> new atomic behavior in terms of "the driver core will never call set_config any more"
> and the question now is what would be the right place to put a check for mode change?
> Basically, I would like to know where I can get "struct drm_mode_set" as
> I used to have in drm_crtc_funcs.set_config callback? Or some other source of
> information I can derive (x,y), (width,height), pixel format for the mode
> when it changes.

Any validation check needs to be in atomic_check(), the other check
depends on what kind of check you are looking at. atomic_begin() and
atomic_flush() are usually for plane updates.

If you have special needs for atomic updates, you could always implement
your own implementation for commit_tail(), the original is something like this:

{
	drm_atomic_helper_commit_modeset_disables() -> can always put all disables here, including when mode is changed. If you replace this, make sure you put drm_atomic_helper_update_legacy_modeset_state() after all disables..

	Next 2 calls can be swapped, depending on whether planes need to be programmed before crtc enabling or after:
	{
		drm_atomic_helper_commit_modeset_enables() -> putting enables here..
		drm_atomic_helper_commit_planes()
	}

	drm_atomic_helper_commit_hw_done()
	drm_atomic_helper_wait_for_flip_done()
	drm_atomic_helper_wait_for_vblanks()
	drm_atomic_helper_cleanup_planes()
}

You can always trace the flow and see if there's a function call that's useful for you in there.

I would just call set_config if required in 2 places, once in crtc disable, once in crtc enable.

> Candidates I am playing with are:
> 1. drm_crtc_helper_funcs.atomic_flush
> 2. drm_mode_config_funcs.atomic_commit
>
> During experiments with the above I see that during "on" phase in the
> drm_crtc_state I can see that mode, enable and active fields of the state
> are changed to 1, but during the "off" phase they remain at 1.
> Then I added the primary plane check from drm_simple_kms_crtc_check
> and at "off" those started to change to 0.
>
> Do you think drm_mode_config_funcs.atomic_commit with the above changes/checks
> will be the right way to get knowledge to emulate old ".set_config"?
> I am trying to be a new atomic driver, but due to the protocol [2] requirements
> I still need a way to send .set_config request to the backend. 

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux