Re: [PATCH 1/5] drm/rockchip: rgb: embed drm_encoder into rockchip_encoder

From: Michael Riesch
Date: Thu Jan 19 2023 - 07:57:43 EST


Hi Sascha,

Thanks for your comments!

On 12/7/22 07:45, Sascha Hauer wrote:
> On Wed, Nov 30, 2022 at 03:02:13PM +0100, Michael Riesch wrote:
>> Commit 540b8f271e53 ("drm/rockchip: Embed drm_encoder into
>> rockchip_decoder") provides the means to pass the endpoint ID to the
>> VOP2 driver, which sets the interface MUX accordingly. However, this
>> step has not yet been carried out for the RGB output block. Embed the
>> drm_encoder structure into the rockchip_encoder structure and set the
>> endpoint ID correctly.
>>
>> Signed-off-by: Michael Riesch <michael.riesch@xxxxxxxxxxxxxx>
>> ---
>> drivers/gpu/drm/rockchip/rockchip_rgb.c | 12 +++++++-----
>> 1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c
>> index 75eb7cca3d82..16201a5cf1e8 100644
>> --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c
>> +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c
>> @@ -18,17 +18,17 @@
>> #include <drm/drm_probe_helper.h>
>> #include <drm/drm_simple_kms_helper.h>
>>
>> +#include <dt-bindings/soc/rockchip,vop2.h>
>> +
>> #include "rockchip_drm_drv.h"
>> #include "rockchip_drm_vop.h"
>> #include "rockchip_rgb.h"
>>
>> -#define encoder_to_rgb(c) container_of(c, struct rockchip_rgb, encoder)
>> -
>> struct rockchip_rgb {
>> struct device *dev;
>> struct drm_device *drm_dev;
>> struct drm_bridge *bridge;
>> - struct drm_encoder encoder;
>> + struct rockchip_encoder encoder;
>> struct drm_connector connector;
>> int output_mode;
>> };
>> @@ -125,7 +125,7 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev,
>> return ERR_PTR(ret);
>> }
>>
>> - encoder = &rgb->encoder;
>> + encoder = &rgb->encoder.encoder;
>> encoder->possible_crtcs = drm_crtc_mask(crtc);
>>
>> ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_NONE);
>> @@ -161,6 +161,8 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev,
>> goto err_free_encoder;
>> }
>>
>> + rgb->encoder.crtc_endpoint_id = ROCKCHIP_VOP2_EP_RGB0;
>
> This is vop2 specific. This code is used with the vop1 as well, so it
> doesn't look like it belongs here, at least not hidden in a patch titled
> "embed drm_encoder into rockchip_encoder".

OK, the very least I can do is to create an extra patch that sets the
crtc_endpoint_id.

> Normally the crtc_endpoint_id is set by the encoder, coming from the
> encoder node, asking the question "To which port on the VOP am I
> connected to?"
>
> Here the situation is different. We are called from the VOP and the
> question instead is: "Is there something connected to VPx endpoint id
> ROCKCHIP_VOP2_EP_RGB0?"
>
> You might need a vop2 specific entry to this code.

I just realized that rockchip_rgb_init parses the endpoint ID. If I am
not mistaken, we can directly store it in the crtc_endpoint_id member.

Seeing that this would be pretty generic, can it be included in one
patch (or should I still split this into a separate patch)?

Best regards,
Michael