linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Dominique MARTINET <dominique.martinet@atmark-techno.com>
To: Adam Ford <aford173@gmail.com>, Lucas Stach <l.stach@pengutronix.de>
Cc: linux-arm-kernel@lists.infradead.org, marex@denx.de,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Andrzej Hajda <andrzej.hajda@intel.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Robert Foss <rfoss@kernel.org>, Jonas Karlman <jonas@kwiboo.se>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Pengutronix Kernel Team <kernel@pengutronix.de>,
	Fabio Estevam <festevam@gmail.com>,
	NXP Linux Team <linux-imx@nxp.com>, Vinod Koul <vkoul@kernel.org>,
	Kishon Vijay Abraham I <kishon@kernel.org>,
	Liu Ying <victor.liu@nxp.com>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	linux-phy@lists.infradead.org,
	Makoto Sato <makoto.sato@atmark-techno.com>
Subject: Re: drm/bridge/imx8mp-hdmi-tx: Allow inexact pixel clock frequencies (Was: [PATCH V8 10/12] drm/bridge: imx: add bridge wrapper driver for i.MX8MP DWC HDMI)
Date: Tue, 18 Jun 2024 08:45:38 +0900	[thread overview]
Message-ID: <ZnDKovBokBu5D_eb@atmark-techno.com> (raw)
In-Reply-To: <22a3f5266260dd3915269ae3eec7724f7537eb55.camel@pengutronix.de> <CAHCN7xJt+1WGFYeBii1jUDEg9OU176f0AA+rMkXCqNQrfq=XWg@mail.gmail.com>

Thanks for the replies, replying to both mails at once.

Adam Ford wrote on Mon, Jun 17, 2024 at 08:28:58AM -0500:
> > Commit 6ad082bee902 ("phy: freescale: add Samsung HDMI PHY") already
> > "fixed" the samsung hdmi phy driver to return the next frequency if an
> > exact match hasn't been found (NXP tree's match frequencies exactly, but
> > this gets the first clock with pixclk <= rate), so if this check is also
> > relaxed our displays would work out of the box.
> 
> Are you proposing to replace 'return MODE_CLOCK_RANGE' with a printed warning?

Yes, something like that.

The imx93-mipi-dsi.c code has a check that's a bit more complex that
might be closer to what we want if you think the check is useful:
        if ((bridge->ops & DRM_BRIDGE_OP_DETECT) &&
            (bridge->ops & DRM_BRIDGE_OP_EDID)) {
                unsigned long pixel_clock_rate = mode->clock * 1000;
                unsigned long rounded_rate;

                /* Allow +/-0.5% pixel clock rate deviation */
                rounded_rate = clk_round_rate(dsi->clk_pixel, pixel_clock_rate);
                if (rounded_rate < pixel_clock_rate * 995 / 1000 ||
                    rounded_rate > pixel_clock_rate * 1005 / 1000) {
                        dev_dbg(dsi->dev, "failed to round clock for mode " DRM_MODE_FMT "\n",
                                DRM_MODE_ARG(mode));
                        return MODE_NOCLOCK;
                }
        }

However, for my particular case 0.5% wouldn't be enough to get something
to display unfortunately :/

> > In practice the screen I'm looking at has an EDID which only supports
> > 51.2MHz and the closest frequency supported by the Samsung HDMI phy is
> > 50.4MHz, so that's a ~1.5% difference and it'd be great if it could work
> > out of the box.
> 
> I wonder if the HDMI PHY could be improved to better dynamically
> calculate values instead of the look tables.

That would probably be ideal, right... If we could do that we could
likely compute something within 0.5% of the required freq.

The original code from NXP was full of what seemed at the time magic
values, but with the new code it seems quite a bit clearer...
At least the values that are left seem to somewhat make sense:
https://gaia.codewreck.org/local/linux/hdmi/plot-combined.svg
https://gaia.codewreck.org/local/linux/hdmi/plot-1.svg
 -> dented linear values, per the intervals defined in
 fsl_samsung_hdmi_phy_configure_pixclk()
https://gaia.codewreck.org/local/linux/hdmi/plot-2.svg
 -> constant for each intervals?
https://gaia.codewreck.org/local/linux/hdmi/plot-3.svg
https://gaia.codewreck.org/local/linux/hdmi/plot-4.svg
 these don't really make sense to me...
https://gaia.codewreck.org/local/linux/hdmi/plot-5.svg
 that one 0 value at 154000000 looks odd,
 but that aside we could probably get away with constant 0x80
 if the value matters at all...
https://gaia.codewreck.org/local/linux/hdmi/plot-6.svg
 weird as well

I'm thinking the last few values just affect a very small % of the
values, but would need to check with a proper scope if I can get a hold
of the clock line...
Does any of you happen to have any datasheet for these registers,
or should we consider them to be magic values?

Lucas Stach wrote on Mon, Jun 17, 2024 at 06:32:45PM +0200:
> > Do you know why such a check is here?
> 
> Sending a HDMI signal with a different rate than what the display
> expects rarely ends well, so this check avoids that.
>
> However, this check is a bit overcautious in that it only allows exact
> rate matches. IIRC HDMI allows a rate mismatch of +- 0.5%, so this
> check could be relaxed quite a bit to allow for that.

I'd expect displays to be tolerant to quite a few percents, but I didn't
know the spec defined something like that... iirc the HDMI spec isn't
public?

> > In practice the screen I'm looking at has an EDID which only supports
> > 51.2MHz and the closest frequency supported by the Samsung HDMI phy is
> > 50.4MHz, so that's a ~1.5% difference and it'd be great if it could work
> > out of the box.
> 
> For rate mismatches larger than the 0.5% allowed by the HDMI spec it
> would be better to actually add PHY PLL parameters matching those
> rates.
> 
> We could potentially add some more leeway for displays like yours that
> aren't actually HDMI (as it doesn't seem to have a standard HDMI
> resolution). But that's more of a last resort option, as it may
> introduce other problems for displays that aren't as tolerant with
> their input rates. Remember the mode_valid call is used to filter modes
> that aren't compatible with the source, so for a display with multiple
> modes allowing too much leeway may lead to incompatible modes not
> getting tossed, in turn allowing userspace to set a mode that the
> display may not like due to too much rate deviation, instead of only
> presenting a list of valid modes. This again would present the user
> with a black-screen without warning situation.

Ah, that's a very good point, if other modes are valid then we don't
want to present modes that are less likely to work, we should only allow
bigger variations if no other mode worked...
I don't think we have this info at validation time though?

I think that Adam's suggestion of making this more dynamic would be
great, if we can just generate finer frequencies for a reasonable range
then it wouldn't be a problem to limit the check to 0.5%.

Short of something really dynamic I can add a value for our particular
display based on what I've seen above (just pick a couple of points
along the lines for the two values I understood and whatever value
neighbors have for the rest & check with a scope it's somewhat close),
but I honestly would rather not get too far down this hole, we can't
cover all the quirky hardwares that exist manually...


Cheers,
-- 
Dominique




  reply	other threads:[~2024-06-17 23:46 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-03 16:52 [PATCH V8 00/12] soc: imx8mp: Add support for HDMI Adam Ford
2024-02-03 16:52 ` [PATCH V8 01/12] dt-bindings: phy: add binding for the i.MX8MP HDMI PHY Adam Ford
2024-02-06 17:34   ` Luca Ceresoli
2024-02-03 16:52 ` [PATCH V8 02/12] phy: freescale: add Samsung " Adam Ford
2024-02-03 17:12   ` Christophe JAILLET
2024-02-04  9:23   ` Dmitry Baryshkov
2024-02-05  8:17     ` Marco Felsch
2024-02-06  3:39       ` Adam Ford
2024-02-06 17:35   ` Luca Ceresoli
2024-02-03 16:52 ` [PATCH V8 03/12] dt-bindings: soc: imx: add missing clock and power-domains to imx8mp-hdmi-blk-ctrl Adam Ford
2024-02-05 19:19   ` Rob Herring
2024-02-03 16:52 ` [PATCH V8 04/12] pmdomain: imx8mp-blk-ctrl: imx8mp_blk: Add fdcc clock to hdmimix domain Adam Ford
2024-02-03 16:52 ` [PATCH V8 05/12] arm64: dts: imx8mp: add HDMI power-domains Adam Ford
2024-02-05  7:26   ` Alexander Stein
2024-02-06  2:25     ` Adam Ford
2024-02-03 16:52 ` [PATCH V8 06/12] arm64: dts: imx8mp: add HDMI irqsteer Adam Ford
2024-02-04 12:00   ` Francesco Dolcini
2024-02-04 14:54     ` Adam Ford
2024-02-03 16:52 ` [PATCH V8 07/12] dt-bindings: display: imx: add binding for i.MX8MP HDMI PVI Adam Ford
2024-02-06 17:35   ` Luca Ceresoli
2024-02-03 16:52 ` [PATCH V8 08/12] drm/bridge: imx: add driver for HDMI TX Parallel Video Interface Adam Ford
2024-02-06 17:06   ` Nathan Chancellor
2024-02-06 18:50     ` Adam Ford
2024-02-06 18:52       ` Nathan Chancellor
2024-02-03 16:52 ` [PATCH V8 09/12] dt-bindings: display: imx: add binding for i.MX8MP HDMI TX Adam Ford
2024-02-05 11:17   ` Neil Armstrong
2024-02-05 19:23   ` Rob Herring
2024-02-06 17:35   ` Luca Ceresoli
2024-02-16  9:05   ` Alexander Stein
2024-02-16  9:37     ` Laurent Pinchart
2024-02-16 11:31     ` Adam Ford
2024-02-16 11:42       ` Alexander Stein
2024-02-03 16:52 ` [PATCH V8 10/12] drm/bridge: imx: add bridge wrapper driver for i.MX8MP DWC HDMI Adam Ford
2024-02-06 17:35   ` Luca Ceresoli
2024-06-17  6:16   ` drm/bridge/imx8mp-hdmi-tx: Allow inexact pixel clock frequencies (Was: [PATCH V8 10/12] drm/bridge: imx: add bridge wrapper driver for i.MX8MP DWC HDMI) Dominique MARTINET
2024-06-17 13:28     ` Adam Ford
2024-06-17 23:45       ` Dominique MARTINET [this message]
2024-06-18  0:04         ` Dominique MARTINET
2024-06-17 16:32     ` Lucas Stach
2024-08-15  8:19       ` Frieder Schrempf
2024-08-21  2:49         ` Adam Ford
2024-08-21  3:57           ` Dominique MARTINET
2024-08-21 12:45             ` Adam Ford
2024-08-22  1:59               ` Adam Ford
2024-08-27  0:25                 ` Adam Ford
2024-08-27  7:00                   ` Frieder Schrempf
2024-08-27  7:26                     ` Dominique MARTINET
2024-02-03 16:52 ` [PATCH V8 11/12] arm64: dts: imx8mp: add HDMI display pipeline Adam Ford
2024-02-05  7:29   ` Alexander Stein
2024-02-03 16:52 ` [PATCH V8 12/12] arm64: defconfig: Enable DRM_IMX8MP_DW_HDMI_BRIDGE as module Adam Ford
2024-02-05 11:19 ` (subset) [PATCH V8 00/12] soc: imx8mp: Add support for HDMI Neil Armstrong
2024-02-06  8:15 ` Neil Armstrong
2024-02-06 14:54 ` Ulf Hansson
2024-02-15 15:05 ` Joao Paulo Goncalves
2024-03-25 21:48 ` Tommaso Merciai
2024-03-25 22:03   ` Laurent Pinchart
2024-03-26  7:46     ` Tommaso Merciai
2024-03-26 11:43       ` Adam Ford
2024-03-26 12:00         ` Tommaso Merciai
2024-10-25  8:05 ` imx8mp: HDMI display blank/black problems mailinglist1
2024-10-30  9:01   ` Frieder Schrempf
2024-10-30 17:28     ` Adam Ford
2024-10-30 20:20       ` Saravana Kannan
2025-03-19  7:52         ` Frieder Schrempf

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=ZnDKovBokBu5D_eb@atmark-techno.com \
    --to=dominique.martinet@atmark-techno.com \
    --cc=aford173@gmail.com \
    --cc=airlied@gmail.com \
    --cc=andrzej.hajda@intel.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=festevam@gmail.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=kernel@pengutronix.de \
    --cc=kishon@kernel.org \
    --cc=l.stach@pengutronix.de \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=makoto.sato@atmark-techno.com \
    --cc=marex@denx.de \
    --cc=mripard@kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=rfoss@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=tzimmermann@suse.de \
    --cc=victor.liu@nxp.com \
    --cc=vkoul@kernel.org \
    /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).