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

On Thu, 2024-02-01 at 13:53 +0100, AngeloGioacchino Del Regno wrote:
> Add a new mtk_ddp_comp_destroy() function and call it in the teardown
> path of mtk_drm_drv to make sure that we unmap the iospace of the
> simple DDP components.
>
> While at it, also fix iounmapping on mtk_ddp_comp_init() error path.

Reviewed-by: CK Hu <ck.hu@mediatek.com>

>
> Fixes: ff1395609e20 ("drm/mediatek: Move mtk_ddp_comp_init() from sub
> driver to DRM driver")
> Signed-off-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> ---
> drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c | 38
> ++++++++++++++++++++-
> drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h | 1 +
> drivers/gpu/drm/mediatek/mtk_drm_drv.c | 4 ++-
> 3 files changed, 41 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> index c13359eeb3cd..539b526a6b0a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.c
> @@ -626,8 +626,11 @@ int mtk_ddp_comp_init(struct device_node *node,
> struct mtk_ddp_comp *comp,
>
> priv->regs = of_iomap(node, 0);
> priv->clk = of_clk_get(node, 0);
> -if (IS_ERR(priv->clk))
> +if (IS_ERR(priv->clk)) {
> +iounmap(priv->regs);
> +priv->regs = NULL;
> return PTR_ERR(priv->clk);
> +}
>
> #if IS_REACHABLE(CONFIG_MTK_CMDQ)
> ret = cmdq_dev_get_client_reg(comp->dev, &priv->cmdq_reg, 0);
> @@ -639,3 +642,36 @@ int mtk_ddp_comp_init(struct device_node *node,
> struct mtk_ddp_comp *comp,
>
> return 0;
> }
> +
> +void mtk_ddp_comp_destroy(struct mtk_ddp_comp *comp)
> +{
> +struct mtk_ddp_comp_dev *priv;
> +
> +if (!comp || !comp->dev)
> +return;
> +
> +/* Complex components are destroyed with their own remove
> callback */
> +if (type == MTK_DISP_AAL ||
> + type == MTK_DISP_BLS ||
> + type == MTK_DISP_CCORR ||
> + type == MTK_DISP_COLOR ||
> + type == MTK_DISP_GAMMA ||
> + type == MTK_DISP_MERGE ||
> + type == MTK_DISP_OVL ||
> + type == MTK_DISP_OVL_2L ||
> + type == MTK_DISP_PWM ||
> + type == MTK_DISP_RDMA ||
> + type == MTK_DPI ||
> + type == MTK_DP_INTF ||
> + type == MTK_DSI)
> +return;
> +
> +priv = dev_get_drvdata(comp->dev);
> +if (!priv)
> +return;
> +
> +if (priv->regs) {
> +iounmap(priv->regs);
> +priv->regs = NULL;
> +}
> +}
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> index 15b2eafff438..43372b416a3f 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_ddp_comp.h
> @@ -318,6 +318,7 @@ unsigned int
> mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
> struct device *dev);
> int mtk_ddp_comp_init(struct device_node *comp_node, struct
> mtk_ddp_comp *comp,
> unsigned int comp_id);
> +void mtk_ddp_comp_destroy(struct mtk_ddp_comp *comp);
> enum mtk_ddp_comp_type mtk_ddp_comp_get_type(unsigned int comp_id);
> void mtk_ddp_write(struct cmdq_pkt *cmdq_pkt, unsigned int value,
> struct cmdq_client_reg *cmdq_reg, void __iomem
> *regs,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 14a1e0157cc4..89b6c31a1511 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -944,8 +944,10 @@ static void mtk_drm_remove(struct
> platform_device *pdev)
> component_master_del(&pdev->dev, &mtk_drm_ops);
> pm_runtime_disable(&pdev->dev);
> of_node_put(private->mutex_node);
> -for (i = 0; i < DDP_COMPONENT_DRM_ID_MAX; i++)
> +for (i = 0; i < DDP_COMPONENT_DRM_ID_MAX; i++) {
> +mtk_ddp_comp_destroy(&private->ddp_comp[i]);
> of_node_put(private->comp_node[i]);
> +}
> }
>
> static int mtk_drm_sys_prepare(struct device *dev)

</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><!--}-->