[RFC PATCH] drm: allow passing a real encoder object for wb connector
Abhinav Kumar
quic_abhinavk at quicinc.com
Fri Jan 21 16:05:08 UTC 2022
Hi Jani
On 1/21/2022 1:17 AM, Jani Nikula wrote:
> On Thu, 20 Jan 2022, Abhinav Kumar <quic_abhinavk at quicinc.com> wrote:
>> Instead of creating an internal encoder for the writeback
>> connector to satisfy DRM requirements, allow the clients
>> to pass a real encoder to it by changing the drm_writeback's
>> encoder to a pointer.
>>
>> If a real encoder is not passed, drm_writeback_connector_init
>> will internally allocate one.
>>
>> This will help the clients to manage the real encoder states
>> better as they will allocate and maintain the encoder.
>
> See also the thread starting at [1], and please try to coordinate.
>
> I don't know what the end result should be like, I'm just saying please
> collaborate instead of racing to get one set of changes in.
>
> BR,
> Jani.
>
>
> [1] https://patchwork.freedesktop.org/patch/msgid/20220111101801.28310-1-suraj.kandpal@intel.com
>
Thanks for pointing to this thread. Since
https://patchwork.freedesktop.org/patch/469090/ has been posted earlier
and is more complete in terms of handling other vendor changes, we can
continue on that one.
But I dont see any comments on that one yet.
Hi Laurent
In that case can you please check the
https://patchwork.freedesktop.org/patch/469090/ thread , we can continue
our discussion there.
We also have the same issue too. Our encoder also maintains its own
struct drm_encoder.
Thanks
Abhinav
>>
>> Signed-off-by: Abhinav Kumar <quic_abhinavk at quicinc.com>
>> ---
>> drivers/gpu/drm/drm_writeback.c | 11 +++++++----
>> include/drm/drm_writeback.h | 2 +-
>> 2 files changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c
>> index dccf4504..fdb7381 100644
>> --- a/drivers/gpu/drm/drm_writeback.c
>> +++ b/drivers/gpu/drm/drm_writeback.c
>> @@ -189,8 +189,11 @@ int drm_writeback_connector_init(struct drm_device *dev,
>> if (IS_ERR(blob))
>> return PTR_ERR(blob);
>>
>> - drm_encoder_helper_add(&wb_connector->encoder, enc_helper_funcs);
>> - ret = drm_encoder_init(dev, &wb_connector->encoder,
>> + /* allocate the internal drm encoder if a real one wasnt passed */
>> + if (!wb_connector->encoder)
>> + wb_connector->encoder = devm_kzalloc(dev->dev, sizeof(struct drm_encoder), GFP_KERNEL);
>> + drm_encoder_helper_add(wb_connector->encoder, enc_helper_funcs);
>> + ret = drm_encoder_init(dev, wb_connector->encoder,
>> &drm_writeback_encoder_funcs,
>> DRM_MODE_ENCODER_VIRTUAL, NULL);
>> if (ret)
>> @@ -204,7 +207,7 @@ int drm_writeback_connector_init(struct drm_device *dev,
>> goto connector_fail;
>>
>> ret = drm_connector_attach_encoder(connector,
>> - &wb_connector->encoder);
>> + wb_connector->encoder);
>> if (ret)
>> goto attach_fail;
>>
>> @@ -233,7 +236,7 @@ int drm_writeback_connector_init(struct drm_device *dev,
>> attach_fail:
>> drm_connector_cleanup(connector);
>> connector_fail:
>> - drm_encoder_cleanup(&wb_connector->encoder);
>> + drm_encoder_cleanup(wb_connector->encoder);
>> fail:
>> drm_property_blob_put(blob);
>> return ret;
>> diff --git a/include/drm/drm_writeback.h b/include/drm/drm_writeback.h
>> index 9697d27..f0d8147 100644
>> --- a/include/drm/drm_writeback.h
>> +++ b/include/drm/drm_writeback.h
>> @@ -31,7 +31,7 @@ struct drm_writeback_connector {
>> * by passing the @enc_funcs parameter to drm_writeback_connector_init()
>> * function.
>> */
>> - struct drm_encoder encoder;
>> + struct drm_encoder *encoder;
>>
>> /**
>> * @pixel_formats_blob_ptr:
>
More information about the dri-devel
mailing list