<html><body><p>
<pre>
Hi, Angelo:

On Thu, 2024-02-01 at 13:53 +0100, AngeloGioacchino Del Regno wrote:
> Finding a possible CRTC by DDP component is done by first checking
> static routes in three paths (main, external, third/extra path) and
> then, if not found, we check for dynamic connection on a per-route
> basis because, for example, on some SoCs the main route may output
> to either a DSI display or DisplayPort and this is finally done by
> assigning a CRTC mask to `possible_crtcs`, found with function
> mtk_drm_find_comp_in_ddp_conn_path(): being that a mask the possible
> values are BIT(x) and, if no CRTC is possible, zero.
>
> Problem is, both mtk_drm_find_possible_crtc_by_comp() and the
> aforementioned function are trying to return a negative error value
> (but it's unsigned int!) if no CRTC was found, which is wrong for
> multiple obvious reasons.

I does not find anywhere to return negative value. So this patch just
like a refine patch not bug fix.

Regards,
CK

>
> Cleanup both functions, so that:
> - mtk_drm_find_comp_in_ddp_conn_path() returns a signed integer
> with a negative number for error, or a bit/bitmask of the found
> possible CRTC; and
> - mtk_drm_find_possible_crtc_by_comp() always returns either a
> bitmask of the possible CRTC, or zero if none available.
>
> Fixes: 01389b324c97 ("drm/mediatek: Add connector dynamic selection
> capability")
> Signed-off-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> ---
> drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 44 ++++++++++---------
> --
> 1 file changed, 21 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> index a9b5a21cde2d..c13359eeb3cd 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> @@ -513,29 +513,25 @@ static bool mtk_drm_find_comp_in_ddp(struct
> device *dev,
> return false;
> }
>
> -static unsigned int mtk_drm_find_comp_in_ddp_conn_path(struct device
> *dev,
> - const struct
> mtk_drm_route *routes,
> - unsigned int
> num_routes,
> - struct
> mtk_ddp_comp *ddp_comp)
> +static int mtk_drm_find_comp_in_ddp_conn_path(struct device *dev,
> + const struct
> mtk_drm_route *routes,
> + unsigned int num_routes,
> + struct mtk_ddp_comp
> *ddp_comp)
> {
> -int ret;
> -unsigned int i;
> +int i;
>
> -if (!routes) {
> -ret = -EINVAL;
> -goto err;
> +if (!routes || !num_routes) {
> +DRM_ERROR("No connection routes specified!\n");
> +return -EINVAL;
> }
>
> for (i = 0; i < num_routes; i++)
> if (dev == ddp_comp[routes[i].route_ddp].dev)
> return BIT(routes[i].crtc_id);
>
> -ret = -ENODEV;
> -err:
> -
> -DRM_INFO("Failed to find comp in ddp table, ret = %d\n", ret);
> +DRM_ERROR("Failed to find component in ddp table\n");
>
> -return 0;
> +return -ENODEV;
> }
>
> int mtk_ddp_comp_get_id(struct device_node *node,
> @@ -557,22 +553,24 @@ unsigned int
> mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
> struct device *dev)
> {
> struct mtk_drm_private *private = drm->dev_private;
> -unsigned int ret = 0;
> +int ret;
>
> if (mtk_drm_find_comp_in_ddp(dev, private->data->main_path,
> private->data->main_len,
> private->ddp_comp))
> -ret = BIT(0);
> +return BIT(0);
> else if (mtk_drm_find_comp_in_ddp(dev, private->data->ext_path,
> private->data->ext_len,
> private->ddp_comp))
> -ret = BIT(1);
> +return BIT(1);
> else if (mtk_drm_find_comp_in_ddp(dev, private->data-
> >third_path,
> private->data->third_len,
> private->ddp_comp))
> -ret = BIT(2);
> -else
> -ret = mtk_drm_find_comp_in_ddp_conn_path(dev,
> - private->data-
> >conn_routes,
> - private->data-
> >num_conn_routes,
> - private-
> >ddp_comp);
> +return BIT(2);
> +
> +ret = mtk_drm_find_comp_in_ddp_conn_path(dev, private->data-
> >conn_routes,
> + private->data-
> >num_conn_routes,
> + private->ddp_comp);
> +/* No CRTC is available: return a zero mask */
> +if (ret < 0)
> +return 0;
>
> return ret;
> }

</pre>
</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice
 ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe
 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->