From patchwork Thu Feb 15 08:53:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: AngeloGioacchino Del Regno X-Patchwork-Id: 13557677 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A3C57C4829E for ; Thu, 15 Feb 2024 08:54:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:To:From:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WT0/1kQgti7FbSnLJgK9lGxhDlcza7kktzeli2QErqA=; b=NHRYGH/bac5mET jVjo4Sv+AFse8x9QZkgkHvG+OIVfCbPzlYAqb8+sbY6vAU21X7nOvgOVooJRFc87DkruY0znV3UYi odKESOSGk10OfXYwFSL0LVbjpwKay9aAWxY0UVvynzozK3imGVQZCrVv+HnPeArs79S+dekO40TjZ 9Pbj0Ukrv6lc5JW2xOVMNjsxShbU8aC0hv98AhlOCpIpXOK2xPBq8A45C3FKLT3aK/MwfsGVI7L/F 3J0M8VOOeDJPHHdNQ0DQPJDplnALg/+90WNEQtBBbrm8WuRgZ+9YsiIXrHXd5XhR7RQRjweKQ4uSg sV/kAviQHPpjTdmPE85A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1raXVH-0000000FPMc-3BJh; Thu, 15 Feb 2024 08:53:59 +0000 Received: from madrid.collaboradmins.com ([46.235.227.194]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1raXUm-0000000FOsL-23S6; Thu, 15 Feb 2024 08:53:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1707987207; bh=FRESMp3mK4eodAj8xjfDcef8szgxRgcVu5YmFtftXyQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GihAzmcRQtelmlonlqcek5RcDvKnPxRMGKXClrbScSctBOAl53vro6pUvY9r/IYNn CLVmwd2lJ9F4LW5x1L9u4E276B78qXIlwbCZMcrw3AJtw4lGWQPuVTnNlbbIbDFHSg /+G98VqjqPwer6+rzCK9rDItgBM8ewgSb3XrFYghAiu7QBZneKED7fE/g+YVvFu5Mo oDNOAjVe2oVu3K6O9oiKMynAc3xB80uWCK92ntopwqZq62CGkYKA+AWksNNBy6qeZ0 uLiMcfreqKaeb5Q2N9dcZ96OpLild8kTB1vUUlDjU7kq4nld8wdhEoKblxG4Y28EB1 C9iP0w87ebFmw== Received: from IcarusMOD.eternityproject.eu (cola.collaboradmins.com [195.201.22.229]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: kholk11) by madrid.collaboradmins.com (Postfix) with ESMTPSA id 64B3D37820B1; Thu, 15 Feb 2024 08:53:26 +0000 (UTC) From: AngeloGioacchino Del Regno To: chunkuang.hu@kernel.org Subject: [PATCH v6 6/9] drm/mediatek: dsi: Register DSI host after acquiring clocks and PHY Date: Thu, 15 Feb 2024 09:53:13 +0100 Message-ID: <20240215085316.56835-7-angelogioacchino.delregno@collabora.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240215085316.56835-1-angelogioacchino.delregno@collabora.com> References: <20240215085316.56835-1-angelogioacchino.delregno@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240215_005328_742992_EDEB656F X-CRM114-Status: GOOD ( 12.37 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: p.zabel@pengutronix.de, Alexandre Mergnat , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, daniel@ffwll.ch, matthias.bgg@gmail.com, kernel@collabora.com, airlied@gmail.com, linux-arm-kernel@lists.infradead.org, angelogioacchino.delregno@collabora.com Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Registering the dsi host with its ops before getting dsi->regs is simply wrong: even though there's nothing (for now) asynchronously calling those ops before the end of the probe function, installing ops that are using iospace(s) and clocks before even initializing those is too fragile. Register the DSI host after getting clocks, iospace and PHY. This wil also allow to simplify the error paths in a later commit. Reviewed-by: Alexandre Mergnat Signed-off-by: AngeloGioacchino Del Regno Reviewed-by: CK Hu --- drivers/gpu/drm/mediatek/mtk_dsi.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c index 52758cab0abf..b3dd6251d611 100644 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c @@ -1114,14 +1114,6 @@ static int mtk_dsi_probe(struct platform_device *pdev) if (!dsi) return -ENOMEM; - dsi->host.ops = &mtk_dsi_ops; - dsi->host.dev = dev; - ret = mipi_dsi_host_register(&dsi->host); - if (ret < 0) { - dev_err(dev, "failed to register DSI host: %d\n", ret); - return ret; - } - dsi->driver_data = of_device_get_match_data(dev); dsi->engine_clk = devm_clk_get(dev, "engine"); @@ -1130,7 +1122,7 @@ static int mtk_dsi_probe(struct platform_device *pdev) if (ret != -EPROBE_DEFER) dev_err(dev, "Failed to get engine clock: %d\n", ret); - goto err_unregister_host; + return ret; } dsi->digital_clk = devm_clk_get(dev, "digital"); @@ -1139,14 +1131,14 @@ static int mtk_dsi_probe(struct platform_device *pdev) if (ret != -EPROBE_DEFER) dev_err(dev, "Failed to get digital clock: %d\n", ret); - goto err_unregister_host; + return ret; } dsi->hs_clk = devm_clk_get(dev, "hs"); if (IS_ERR(dsi->hs_clk)) { ret = PTR_ERR(dsi->hs_clk); dev_err(dev, "Failed to get hs clock: %d\n", ret); - goto err_unregister_host; + return ret; } regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -1154,20 +1146,28 @@ static int mtk_dsi_probe(struct platform_device *pdev) if (IS_ERR(dsi->regs)) { ret = PTR_ERR(dsi->regs); dev_err(dev, "Failed to ioremap memory: %d\n", ret); - goto err_unregister_host; + return ret; } dsi->phy = devm_phy_get(dev, "dphy"); if (IS_ERR(dsi->phy)) { ret = PTR_ERR(dsi->phy); dev_err(dev, "Failed to get MIPI-DPHY: %d\n", ret); - goto err_unregister_host; + return ret; } irq_num = platform_get_irq(pdev, 0); if (irq_num < 0) { ret = irq_num; - goto err_unregister_host; + return ret; + } + + dsi->host.ops = &mtk_dsi_ops; + dsi->host.dev = dev; + ret = mipi_dsi_host_register(&dsi->host); + if (ret < 0) { + dev_err(dev, "failed to register DSI host: %d\n", ret); + return ret; } ret = devm_request_irq(&pdev->dev, irq_num, mtk_dsi_irq,