[PATCH RFC] drm/atomic: Fall back to legacy call back in *_connector_dpms()

Daniel Vetter daniel at ffwll.ch
Mon Feb 15 11:09:13 UTC 2016

On Mon, Feb 15, 2016 at 10:47 AM, Jyri Sarha <jsarha at ti.com> wrote:
> On 02/12/16 19:15, Ville Syrjälä wrote:
>> On Fri, Feb 12, 2016 at 07:08:46PM +0200, Tomi Valkeinen wrote:
>>> On 12/02/16 17:34, Daniel Vetter wrote:
>>>> On Fri, Feb 12, 2016 at 05:17:19PM +0200, Jyri Sarha wrote:
>>>>> Fall back to legacy drm_helper_connector_dpms() call back in
>>>>> drm_atomic_helper_connector_dpms() if DRIVER_ATOMIC feature is not
>>>>> present.
>>>>> Calling drm_atomic_helper_connector_dpms() from non atomic driver
>>>>> causes undefined behavior. This is a problem with componentized
>>>>> encoder/connector drivers that may be bound to both atomic and
>>>>> non atomic drivers.drm-next-tilcdc-fixes
>>>>> Signed-off-by: Jyri Sarha <jsarha at ti.com>
>>>>> ---
>>>>> This is just an alternative to this:
>>>>> https://lists.freedesktop.org/archives/dri-devel/2016-January/098867.html
>>>> I like the linked patch much better, since non-atomic really should die.
>>>> Inflicting non-atomic on atomic helpers is bad imo, so nack from me on
>>>> this patch here.
>>> I mostly agree, but we are in a transition period from non-atomic to
>>> atomic. When all drivers have been converted to atomic, it should be
>>> easy to grep for code using DRIVER_ATOMIC (or similar), and remove all
>>> the non-atomic support code.
>>> In my opinion it should be considered case by case if the
>>> non-atomic/atomic compat code should be added to the generic functions
>>> or to all the drivers using that functionality.
>>> In this case, if it only affects tda998x (but does it?), perhaps the
>>> patch in the link is better.
>> Maybe we need a hybrid helper that just calls the atomic
>> or non-atomic helper approppriately.
> Would it actually be better if the legacy callback would automatically call
> atomic version if the driver has DRIVER_ATOMIC set?
> I do not have any strong opinions on this, just as long as one of the
> patches gets merged. With quick grepping I can see that there are several
> DRM component drivers, but I have no idea if anything else but the tda998x
> is being used by more than one DRM master driver.

I prefer open-coding since atomic vs. legacy is just one part of the
entire problem that the last element in the chain needs to register
the drm_connector, but in coordination with everyone else in the
chain. E.g. if you have upscale properties or anything else like that
it gets a lot more complicated, especially around the question of "who
owns drm_connector_state".

Given that I think it's better to add driver-private code for special
cases until we have a few examples and can go about creating a useful
helper library for this problem space. Instead of an inconsistent pile
of hacks enshrined forever.
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

More information about the dri-devel mailing list