[Intel-gfx] [PATCH 1/3] drm/i915: Convert intel_tv connector properties to atomic, v3.
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Thu Mar 16 15:27:42 UTC 2017
Op 16-03-17 om 15:56 schreef Daniel Vetter:
> On Thu, Mar 16, 2017 at 01:05:06PM +0100, Maarten Lankhorst wrote:
>> Op 16-03-17 om 11:48 schreef Daniel Vetter:
>>> On Wed, Mar 15, 2017 at 11:08:56AM +0100, Maarten Lankhorst wrote:
>>>> As a proof of concept, first try to convert intel_tv, which is a rarely
>>>> used connector. It has 5 properties, tv format and 4 margins.
>>>>
>>>> I'm less certain about the state behavior itself, should we pass a size
>>>> parameter to intel_connector_alloc instead, so duplicate_state
>>>> can be done globally if it can be blindly copied?
>>>>
>>>> Can we also have a atomic_check function for connectors, so the
>>>> crtc_state->connectors_changed can be set there? It would be cleaner
>>>> and more atomic-like.
>>>>
>>>> To match the legacy behavior, format can be changed by probing just like
>>>> in legacy mode.
>>>>
>>>> Changes since v1:
>>>> - Add intel_encoder->swap_state to allow updating connector state.
>>>> - Add intel_tv->format for detect_mode and mode_valid, updated on atomic commit.
>>>> Changes since v2:
>>>> - Fix typo in tv_choose_preferred modes function name.
>>>> - Assignment of tv properties is done in core, so intel_tv only needs
>>>> a atomic_check function. Thanks Ville!
>>>>
>>>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
>>>> ---
>>>> drivers/gpu/drm/i915/intel_display.c | 15 +++
>>>> drivers/gpu/drm/i915/intel_drv.h | 4 +
>>>> drivers/gpu/drm/i915/intel_tv.c | 200 ++++++++++++++++-------------------
>>>> 3 files changed, 110 insertions(+), 109 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>>>> index ac25c9bc8b81..18b7e7546ee1 100644
>>>> --- a/drivers/gpu/drm/i915/intel_display.c
>>>> +++ b/drivers/gpu/drm/i915/intel_display.c
>>>> @@ -12954,6 +12954,20 @@ static void intel_atomic_track_fbs(struct drm_atomic_state *state)
>>>> to_intel_plane(plane)->frontbuffer_bit);
>>>> }
>>>>
>>>> +static void swap_connector_state(struct drm_atomic_state *state)
>>>> +{
>>>> + struct drm_connector *connector;
>>>> + struct drm_connector_state *new_conn_state;
>>>> + int i;
>>>> +
>>>> + for_each_new_connector_in_state(state, connector, new_conn_state, i) {
>>>> + struct intel_connector *conn = to_intel_connector(connector);
>>>> +
>>>> + if (conn->swap_state)
>>>> + conn->swap_state(conn, new_conn_state);
>>>> + }
>>>> +}
>>> So yeah I'm late, but this is pretty much exactly what DK's private state
>>> object stuff was meant for. Have you looked into rebasing on top of that?
>>> I think hand-rolling private state stuff everywhere isn't really good.
>>>
>>> Afaics DK's patch series is ready for merging into drm-misc, so shouldn't
>>> end up blocking you.
>> This swap_state hook is used for connector state. We could probably add a swap_state hook that drivers
>> can use for this in the core, but the connector state is already part of the state, adding it twice is silly.
>>
>> Instead, would adding a hook to the core be useful?
> Why do you need a hook to swap the state? The core already does that for
> you ... to_tv_state(intel_tv->base.base->state) is probably what you want,
> instead of deref'ing a new intel_tv->format.
> -Daniel
Well in some way I need to access connector_state->tv.mode in mode_valid, which doesn't hold any connector state locks.
I think setting it from the state is the easiest way to do so. But I'm open to other approaches. :)
~Maarten
More information about the Intel-gfx
mailing list