From: Liu Ying <victor.liu@nxp.com>
To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, imx@lists.linux.dev,
linux-arm-kernel@lists.infradead.org
Cc: andrzej.hajda@intel.com, neil.armstrong@linaro.org,
rfoss@kernel.org, Laurent.pinchart@ideasonboard.com,
jonas@kwiboo.se, jernej.skrabec@gmail.com, airlied@gmail.com,
simona@ffwll.ch, maarten.lankhorst@linux.intel.com,
mripard@kernel.org, tzimmermann@suse.de, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, shawnguo@kernel.org,
s.hauer@pengutronix.de, kernel@pengutronix.de,
festevam@gmail.com, catalin.marinas@arm.com, will@kernel.org,
quic_bjorande@quicinc.com, geert+renesas@glider.be,
dmitry.baryshkov@linaro.org, arnd@arndb.de,
nfraprado@collabora.com, o.rempel@pengutronix.de,
y.moog@phytec.de, marex@denx.de, isaac.scott@ideasonboard.com,
biju.das.jz@bp.renesas.com
Subject: [PATCH v2 4/9] drm/bridge: fsl-ldb: Use clk_round_rate() to validate "ldb" clock rate
Date: Sat, 12 Oct 2024 15:35:38 +0800 [thread overview]
Message-ID: <20241012073543.1388069-5-victor.liu@nxp.com> (raw)
In-Reply-To: <20241012073543.1388069-1-victor.liu@nxp.com>
Multiple display modes could be read from a display device's EDID.
Use clk_round_rate() to validate the "ldb" clock rate for each mode
in drm_bridge_funcs::mode_valid() to filter unsupported modes out.
Also, since this driver doesn't directly reference pixel clock, use
clk_round_rate() to validate the pixel clock rate against the "ldb"
clock if the "ldb" clock and the pixel clock are sibling in clock
tree. This is not done in display controller driver because
drm_crtc_helper_funcs::mode_valid() may not decide to do the
validation or not if multiple encoders are connected to the CRTC,
e.g., i.MX93 LCDIF may connect with MIPI DSI controller, LDB and
parallel display output simultaneously.
Signed-off-by: Liu Ying <victor.liu@nxp.com>
---
v2:
* Add more comments in fsl-ldb.c and commit message about pixel clock
rate validation. (Maxime)
drivers/gpu/drm/bridge/fsl-ldb.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/drivers/gpu/drm/bridge/fsl-ldb.c b/drivers/gpu/drm/bridge/fsl-ldb.c
index b559f3e0bef6..77afc169f0d3 100644
--- a/drivers/gpu/drm/bridge/fsl-ldb.c
+++ b/drivers/gpu/drm/bridge/fsl-ldb.c
@@ -11,6 +11,7 @@
#include <linux/of_graph.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
+#include <linux/units.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h>
@@ -64,6 +65,7 @@ struct fsl_ldb_devdata {
u32 lvds_ctrl;
bool lvds_en_bit;
bool single_ctrl_reg;
+ bool ldb_clk_pixel_clk_sibling;
};
static const struct fsl_ldb_devdata fsl_ldb_devdata[] = {
@@ -74,11 +76,13 @@ static const struct fsl_ldb_devdata fsl_ldb_devdata[] = {
[IMX8MP_LDB] = {
.ldb_ctrl = 0x5c,
.lvds_ctrl = 0x128,
+ .ldb_clk_pixel_clk_sibling = true,
},
[IMX93_LDB] = {
.ldb_ctrl = 0x20,
.lvds_ctrl = 0x24,
.lvds_en_bit = true,
+ .ldb_clk_pixel_clk_sibling = true,
},
};
@@ -269,11 +273,31 @@ fsl_ldb_mode_valid(struct drm_bridge *bridge,
const struct drm_display_info *info,
const struct drm_display_mode *mode)
{
+ unsigned long link_freq, pclk_rate, rounded_pclk_rate;
struct fsl_ldb *fsl_ldb = to_fsl_ldb(bridge);
if (mode->clock > (fsl_ldb_is_dual(fsl_ldb) ? 160000 : 80000))
return MODE_CLOCK_HIGH;
+ /* Validate "ldb" clock rate. */
+ link_freq = fsl_ldb_link_frequency(fsl_ldb, mode->clock);
+ if (link_freq != clk_round_rate(fsl_ldb->clk, link_freq))
+ return MODE_NOCLOCK;
+
+ /*
+ * Since this driver doesn't directly reference pixel clock and
+ * display controller driver cannot validate pixel clock due to
+ * multiple types of encoders connected, use "ldb" clock to
+ * validate pixel clock rate, if the two clocks are sibling.
+ */
+ if (fsl_ldb->devdata->ldb_clk_pixel_clk_sibling) {
+ pclk_rate = mode->clock * HZ_PER_KHZ;
+
+ rounded_pclk_rate = clk_round_rate(fsl_ldb->clk, pclk_rate);
+ if (rounded_pclk_rate != pclk_rate)
+ return MODE_NOCLOCK;
+ }
+
return MODE_OK;
}
--
2.34.1
next prev parent reply other threads:[~2024-10-12 7:37 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-12 7:35 [PATCH v2 0/9] Add ITE IT6263 LVDS to HDMI converter support Liu Ying
2024-10-12 7:35 ` [PATCH v2 1/9] arm64: dts: imx8mp-skov-revb-mi1010ait-1cp1: Add panel-timing node to panel node Liu Ying
2024-10-12 20:33 ` Marek Vasut
2024-10-12 7:35 ` [PATCH v2 2/9] arm64: dts: imx8mp-phyboard-pollux-rdk: Add panel-timing node to panel-lvds node Liu Ying
2024-10-12 20:34 ` Marek Vasut
2024-10-12 7:35 ` [PATCH v2 3/9] drm/bridge: fsl-ldb: Get the next non-panel bridge Liu Ying
2024-10-12 8:48 ` Dmitry Baryshkov
2024-10-12 7:35 ` Liu Ying [this message]
2024-10-12 7:35 ` [PATCH v2 5/9] dt-bindings: display: bridge: Add ITE IT6263 LVDS to HDMI converter Liu Ying
2024-10-12 8:30 ` Dmitry Baryshkov
2024-10-12 9:14 ` Liu Ying
2024-10-13 23:45 ` Dmitry Baryshkov
2024-10-14 5:33 ` Liu Ying
2024-10-14 5:54 ` Liu Ying
2024-10-14 7:07 ` Dmitry Baryshkov
2024-10-14 10:01 ` Liu Ying
2024-10-14 11:15 ` Dmitry Baryshkov
2024-10-15 18:58 ` Rob Herring
2024-10-15 6:28 ` Liu Ying
2024-10-19 2:44 ` Dmitry Baryshkov
2024-10-14 7:39 ` Biju Das
2024-10-14 7:58 ` Biju Das
2024-10-14 8:04 ` Dmitry Baryshkov
2024-10-14 8:09 ` Biju Das
2024-10-14 11:16 ` Dmitry Baryshkov
2024-10-14 11:25 ` Biju Das
2024-10-14 11:36 ` Dmitry Baryshkov
2024-10-14 8:30 ` Biju Das
2024-10-12 7:35 ` [PATCH v2 6/9] drm/bridge: " Liu Ying
2024-10-12 8:45 ` Dmitry Baryshkov
2024-10-12 10:01 ` Liu Ying
2024-10-13 10:48 ` Biju Das
2024-10-14 0:00 ` Dmitry Baryshkov
2024-10-18 6:58 ` Liu Ying
2024-10-13 23:58 ` Dmitry Baryshkov
2024-10-13 10:27 ` Biju Das
2024-10-14 0:06 ` Dmitry Baryshkov
2024-10-17 9:53 ` Liu Ying
2024-10-14 7:10 ` Dmitry Baryshkov
2024-10-14 7:18 ` Liu Ying
2024-10-14 7:32 ` Dmitry Baryshkov
2024-10-14 8:28 ` Liu Ying
2024-10-14 11:22 ` Dmitry Baryshkov
2024-10-14 8:14 ` Biju Das
2024-10-14 8:37 ` Liu Ying
2024-10-15 4:54 ` kernel test robot
2024-10-12 7:35 ` [PATCH v2 7/9] arm64: dts: imx8mp-evk: Add NXP LVDS to HDMI adapter cards Liu Ying
2024-10-12 7:35 ` [PATCH v2 8/9] arm64: defconfig: Enable ITE IT6263 driver Liu Ying
2024-10-12 7:35 ` [PATCH v2 9/9] MAINTAINERS: Add maintainer for " Liu Ying
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241012073543.1388069-5-victor.liu@nxp.com \
--to=victor.liu@nxp.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=arnd@arndb.de \
--cc=biju.das.jz@bp.renesas.com \
--cc=catalin.marinas@arm.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmitry.baryshkov@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=festevam@gmail.com \
--cc=geert+renesas@glider.be \
--cc=imx@lists.linux.dev \
--cc=isaac.scott@ideasonboard.com \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=kernel@pengutronix.de \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marex@denx.de \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=nfraprado@collabora.com \
--cc=o.rempel@pengutronix.de \
--cc=quic_bjorande@quicinc.com \
--cc=rfoss@kernel.org \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
--cc=will@kernel.org \
--cc=y.moog@phytec.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).