From mboxrd@z Thu Jan 1 00:00:00 1970 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 36DCBC87FD5 for ; Wed, 23 Jul 2025 10:22:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=akoL7Y3UCFuuOxxy3tU6c9sj4ySngyxlujNOZzCTLE0=; b=mHUQHY/ixdx+qd h486wGWRO5NKL7J95mRhIJlSGkinPRkj5d11XOcMpqUvRJ1Qgs4GdgWFYxFJFLYONKCtN7Q+EOUpu Oqc3qVzMSBvAjiyowovbnLsvnUWlSNX3zW/hoE+v1CMoKx9EfKPQcY/GdHXuv4nF4F4d2BcvbidXu bnqZWfgG9CQ0U6wwGCr56ZWiD3g7WlJv7trQnxqSBK9q8Yba4et+15deIPyhRQDL0uw9LqTdDnAeS z+jNCnYHTynsAB7dMqw9vVQpWXZ/7hv5ZJ8wSwUdfnATy0F03e8cD8UHKQULt9M20d5omdY88HoXH XCgw/ZcIlKgQKyyi8yVA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1ueWcU-00000004fdm-3vz4; Wed, 23 Jul 2025 10:22:42 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1ueWMF-00000004cPw-3WhB for linux-phy@lists.infradead.org; Wed, 23 Jul 2025 10:05:57 +0000 Received: from [127.0.1.1] (91-158-153-178.elisa-laajakaista.fi [91.158.153.178]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8D50F1121; Wed, 23 Jul 2025 12:05:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1753265116; bh=TAARgGSo5VvgDvrqW//e5b9U1FyJn3Y3DDx/qPszZzo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=e9lJ3tYRvIiN4gTbfsZ3EuAtZSOHFqiYGJ2ZDppdA3MT6nBWvTRH8URMhL/qfFUZ5 hFfQd2ICWmnEhODzG/7Rz6PzWzEiN7FYvpf8L5Tisy7+yYIyLn1wyWH9a6/hxdl6I/ Ug86gpJk1hotzRaH/JEA6Bx0ZCN7TnoEmNGzUdF8= From: Tomi Valkeinen Date: Wed, 23 Jul 2025 13:05:20 +0300 Subject: [PATCH v5 14/15] drm/bridge: cdns-dsi: Tune adjusted_mode->clock according to dsi needs MIME-Version: 1.0 Message-Id: <20250723-cdns-dsi-impro-v5-14-e61cc06074c2@ideasonboard.com> References: <20250723-cdns-dsi-impro-v5-0-e61cc06074c2@ideasonboard.com> In-Reply-To: <20250723-cdns-dsi-impro-v5-0-e61cc06074c2@ideasonboard.com> To: Jyri Sarha , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Vinod Koul , Kishon Vijay Abraham I , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Jayesh Choudhary , Dmitry Baryshkov Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, Francesco Dolcini , Aradhya Bhatia , Devarsh Thakkar , Parth Pancholi , Tomi Valkeinen X-Mailer: b4 0.15-dev-c25d1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3522; i=tomi.valkeinen@ideasonboard.com; h=from:subject:message-id; bh=TAARgGSo5VvgDvrqW//e5b9U1FyJn3Y3DDx/qPszZzo=; b=owEBbQKS/ZANAwAIAfo9qoy8lh71AcsmYgBogLPueytK2oz3NDrTGEBgDIlq2WgZ8+DGrC8FW ns9YV6xSfGJAjMEAAEIAB0WIQTEOAw+ll79gQef86f6PaqMvJYe9QUCaICz7gAKCRD6PaqMvJYe 9eriD/4pIHN9Rm3E0LzNDo8ZOx37832WGp4LtgcNRixqbv8JNK+htXIOChsdCJJHxkDZTCRkjbv TeHcgg1uBhIloppnLvT0myzktbfiIlAWTH4dZZmuhcbSEjNik1on8xV/8dgVBq/jQ7V1KIy8Iam oSNw7UICXJuzJMJ6oZeo+ZRFQbUvk4vYon9Lpri1nVVxtKkAcG5z/R+cDdX0ShePwLOvyiTWeRA kaV+4N5S/jYBPovTNUF5f3bBl5A53Iy3xYegMhoFt31qWm9wrP3i3zGesLBzR8v93GfkoWTnYoS bbQEPdB6gxHQahAXkTZUUA/HtVoiV5pwEIH44H/daLPxKunK7uupuCL8p9xQfYrrXNkac2775Na c3l2UIegAHSoVvvVcl8fGigSx4iz2iODGYbcQIhYhGW2O+GIRt8MET8hDv4QBtWBA3VyszLeFCA MsGWUs7w90QXf4PDDuZbhGFdKJ2yOASVzLtYWpGNF+oVmWbvzQR7+m2F1sRIueHvEtmiNP9Lwdx zRJwwIdDWE2HSYGO2qOnGrKijX69aXowTk6eQf9dtPRlJeEDvveXWo/uy9BXPyikK/6g0uI0JQy 0NyzXFom1QnBqFnetK2FBqWdogyStM9LNFHTfRkk8FTUmGvX4REpjGvSL51p2Ni//o1ei09Fgk0 nhnhzr8eHXKdz/w== X-Developer-Key: i=tomi.valkeinen@ideasonboard.com; a=openpgp; fpr=C4380C3E965EFD81079FF3A7FA3DAA8CBC961EF5 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250723_030556_021692_93F41FD0 X-CRM114-Status: GOOD ( 16.68 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org The driver currently expects the pixel clock and the HS clock to be compatible, but the DPHY PLL doesn't give very finely grained rates. This often leads to the situation where the pipeline just fails, as the resulting HS clock is just too off. We could change the driver to do a better job on adjusting the DSI blanking values, hopefully getting a working pipeline even if the pclk and HS clocks are not exactly compatible. But that is a bigger work. What we can do easily is to see in .atomic_check() what HS clock rate we can get, based on the pixel clock rate, and then convert the HS clock rate back to pixel clock rate and ask that rate from the crtc. If the crtc has a good PLL (which is the case for TI K3 SoCs), this will fix any issues wrt. the clock rates. If the crtc cannot provide the requested clock, well, we're no worse off with this patch than what we have at the moment. Tested-by: Parth Pancholi Tested-by: Jayesh Choudhary Reviewed-by: Devarsh Thakkar Signed-off-by: Tomi Valkeinen --- drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c index 3bc4d011b4c6..114d883c65dc 100644 --- a/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c +++ b/drivers/gpu/drm/bridge/cadence/cdns-dsi-core.c @@ -915,6 +915,28 @@ static u32 *cdns_dsi_bridge_get_input_bus_fmts(struct drm_bridge *bridge, return input_fmts; } +static long cdns_dsi_round_pclk(struct cdns_dsi *dsi, unsigned long pclk) +{ + struct cdns_dsi_output *output = &dsi->output; + unsigned int nlanes = output->dev->lanes; + union phy_configure_opts phy_opts = { 0 }; + u32 bitspp; + int ret; + + bitspp = mipi_dsi_pixel_format_to_bpp(output->dev->format); + + ret = phy_mipi_dphy_get_default_config(pclk, bitspp, nlanes, + &phy_opts.mipi_dphy); + if (ret) + return ret; + + ret = phy_validate(dsi->dphy, PHY_MODE_MIPI_DPHY, 0, &phy_opts); + if (ret) + return ret; + + return div_u64((u64)phy_opts.mipi_dphy.hs_clk_rate * nlanes, bitspp); +} + static int cdns_dsi_bridge_atomic_check(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, @@ -926,11 +948,26 @@ static int cdns_dsi_bridge_atomic_check(struct drm_bridge *bridge, struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode; struct cdns_dsi_cfg *dsi_cfg = &dsi_state->dsi_cfg; struct videomode vm; + long pclk; /* cdns-dsi requires negative syncs */ adjusted_mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC); adjusted_mode->flags |= DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC; + /* + * The DPHY PLL has quite a coarsely grained clock rate options. See + * what hsclk rate we can achieve based on the pixel clock, convert it + * back to pixel clock, set that to the adjusted_mode->clock. This is + * all in hopes that the CRTC will be able to provide us the requested + * clock, as otherwise the DPI and DSI clocks will be out of sync. + */ + + pclk = cdns_dsi_round_pclk(dsi, adjusted_mode->clock * 1000); + if (pclk < 0) + return (int)pclk; + + adjusted_mode->clock = pclk / 1000; + drm_display_mode_to_videomode(adjusted_mode, &vm); return cdns_dsi_check_conf(dsi, &vm, dsi_cfg); -- 2.43.0 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy