Linux Renesas SOC kernel development
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jose Abreu <Jose.Abreu@synopsys.com>
Cc: Russell King - ARM Linux <linux@armlinux.org.uk>,
	Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
	dri-devel@lists.freedesktop.org,
	Andy Yan <andy.yan@rock-chips.com>,
	Archit Taneja <architt@codeaurora.org>,
	Fabio Estevam <fabio.estevam@freescale.com>,
	Heiko Stuebner <heiko@sntech.de>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>,
	Mark Yao <mark.yao@rock-chips.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Ulrich Hecht <ulrich.hecht@gmail.com>,
	Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>,
	linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH 13/22] drm: bridge: dw-hdmi: Replace device type with platform quirks
Date: Mon, 05 Dec 2016 13:32:15 +0200	[thread overview]
Message-ID: <1576280.tBdiYM6mm0@avalon> (raw)
In-Reply-To: <b7ea84bb-4130-8936-ca94-256cf4a36548@synopsys.com>

Hi Jose,

On Monday 05 Dec 2016 10:50:19 Jose Abreu wrote:
> On 02-12-2016 15:43, Laurent Pinchart wrote:
> > On Friday 02 Dec 2016 14:24:01 Russell King - ARM Linux wrote:
> >> On Fri, Dec 02, 2016 at 01:43:28AM +0200, Laurent Pinchart wrote:
> >>> From: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
> >>> 
> >>> The dw-hdmi driver declares a dev_type to distinguish platform specific
> >>> changes. Replace this with a quirk field, so that the platform can
> >>> specify the required quirks for the driver, rather than the driver
> >>> becoming conditional on multiple platforms.
> >>> 
> >>> As part of this, we rename the dw-hdmi 'spare' which is defined as the
> >>> SVSRET bit in later documentation.
> >> 
> >> I'd really prefer that we did not go down the broken route of adding
> >> a set of "quirk" flags - look at what a mess SDHCI has become through
> >> allowing that kind of practice.
> >> 
> >> I'd much rather we find a saner structure to this - and we know that
> >> the hardware has ID registers in it which can be used (so far) to
> >> identify the buggy hardware.
> > 
> > I'd much prefer something that would allow runtime identification of the
> > device and the corresponding actions to be taken. However, the amount of
> > documentation we have on the DWC HDMI TX IP core (and the associated PHY)
> > is pretty limited, given that Synopsys doesn't make the documentation
> > available publicly. Changes made to the IP core by integrators could
> > complicate this further. I'm trying to gather as much information as
> > possible to make clean the code up, for instance by trying to identify
> > the PHYs used on the various platforms we support. Progress is slow on
> > that front, there isn't enough leaked information available online :-) I
> > haven't given up though, but I'll need more time.
> > 
> > I don't like quirks much either. They are however already used today, even
> > if we trigger them through dev_type instead of quirk flags. This patch
> > came from a previous version found in a BSP that simply sprinkled several
> > if (hdmi-> dev_type == RCAR_HDMI) through the code. For instance,
> > 
> > -	if (hdmi->dev_type == RK3288_HDMI)
> > +	if (hdmi->dev_type == RK3288_HDMI || hdmi->dev_type == RCAR_HDMI)
> > 		dw_hdmi_phy_enable_spare(hdmi, 1);
> > 
> > which I think is worse than flags as it would quickly degenerate to
> > spaghetti code.
> > 
> > For this specific case, we've managed to identify that on Renesas
> > platforms the bit set by this function is called SVSRET. Its usage isn't
> > clear yet, but I suspect it to control one of the PHY input control
> > signals, like the other bits in the same register. I'm trying to get more
> > information to clean the implementation further, hopefully with a way to
> > determine whether the signal is used based on PHY identification.
> 
> SVSRET is a low power mode consumption and is a PHY input signal
> as you suggested.

Thank you for the confirmation. Would you happen to know what SVSRET stands 
for ?

> Most of the configurable input signals of the PHY are available by the
> controller regbank. I don't think it is possible to detect this at runtime,
> I think you have at least to hardcode which version of the PHY you are
> using.
>
> I would suggest that maybe all the PHY logic should be extracted and then
> use callbacks to glue controller and phy. Then, depending on the PHY you
> could use empty stubs if, for example, a given PHY did not support SVSRET.
> Still, I don't know if this is the best option. What I do know is that there
> are a large number of PHY's with different flavors that can use the same
> controller. The controller has different versions also, and each version can
> have quirks but I think it would be easier to manage this driver if we had a
> clear distinction between PHY and controller.

Agreed, I'd like to go in that direction. What makes it quite difficult is the 
lack of documentation about the PHYs :-) I've found six different PHY types 
that can be identified by the CONFIG2_ID register:

Bits    | Field         	| Description
------------------------------------------------------------------------------
7-0     | phytype       	| PHY interface
        |               	| 0x00: Legacy PHY (HDMI TX PHY)
        |               	| 0xb2: MHL PHY + HEAC PHY
        |               	| 0xc2: MHL PHY
        |               	| 0xe2: HDMI 3D TX PHY + HEAC PHY
        |               	| 0xf2: HDMI 3D TX PHY
        |               	| 0xf3: HDMI2 TX PHY

I'm sure there's more than that. In particular I wonder how external vendor 
PHYs are identified.

I'm also wondering whether there's a need to keep support for the legacy PHY 
signals (ENTMDS and PDZ in the PHY_CONF0 register). As far as I understand 
they're not used by the Gen2 PHYs (including the external vendor PHYs), but I 
can't confirm that without more documentation (although I could test that on 
the platforms I have access to).

> > This is all work in progress, and if anyone has access to any
> > documentation and can provide additional information I'll be grateful.
> > 
> >>> Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
> >>> Signed-off-by: Laurent Pinchart
> >>> <laurent.pinchart+renesas@ideasonboard.com>
> >>> ---
> >>> 
> >>>  drivers/gpu/drm/bridge/dw-hdmi.c            | 14 ++++++--------
> >>>  drivers/gpu/drm/bridge/dw-hdmi.h            |  4 ++--
> >>>  drivers/gpu/drm/imx/dw_hdmi-imx.c           |  3 +--
> >>>  drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c |  2 +-
> >>>  include/drm/bridge/dw_hdmi.h                | 12 +++++-------
> >>>  5 files changed, 15 insertions(+), 20 deletions(-)

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2016-12-05 11:32 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-01 23:43 [PATCH 00/22] R-Car Gen3 HDMI output support Laurent Pinchart
2016-12-01 23:43 ` [PATCH 01/22] drm: bridge: dw-hdmi: Merge __hdmi_phy_i2c_write and hdmi_phy_i2c_write Laurent Pinchart
2016-12-01 23:43 ` [PATCH 02/22] drm: bridge: dw-hdmi: Remove unneeded arguments to bind/unbind functions Laurent Pinchart
2016-12-01 23:43 ` [PATCH 03/22] drm: bridge: dw-hdmi: Remove unused function parameter Laurent Pinchart
2016-12-01 23:43 ` [PATCH 04/22] drm: bridge: dw-hdmi: Embed drm_bridge in struct dw_hdmi Laurent Pinchart
2016-12-01 23:43 ` [PATCH 05/22] drm: bridge: dw-hdmi: Remove encoder field from " Laurent Pinchart
2016-12-01 23:43 ` [PATCH 06/22] drm: bridge: dw-hdmi: Don't forward HPD events to DRM core before attach Laurent Pinchart
2016-12-01 23:43 ` [PATCH 07/22] drm: bridge: dw-hdmi: Move IRQ and IO resource allocation to common code Laurent Pinchart
2016-12-01 23:43 ` [PATCH 08/22] drm: bridge: dw-hdmi: Reorder functions to prepare for next commit Laurent Pinchart
2016-12-01 23:43 ` [PATCH 09/22] drm: bridge: dw-hdmi: Create connector in the bridge attach operation Laurent Pinchart
2016-12-01 23:43 ` [PATCH 10/22] drm: bridge: dw-hdmi: Implement DRM bridge registration Laurent Pinchart
2016-12-01 23:43 ` [PATCH 11/22] drm: bridge: dw-hdmi: Refactor hdmi_phy_configure resolution parameter Laurent Pinchart
2016-12-02 14:18   ` Russell King - ARM Linux
2016-12-02 15:51     ` Laurent Pinchart
2016-12-02 16:08       ` Russell King - ARM Linux
2016-12-05  7:53     ` Kieran Bingham
2016-12-01 23:43 ` [PATCH 12/22] drm: bridge: dw-hdmi: Abstract the platform PHY configuration Laurent Pinchart
2016-12-02 11:15   ` Jose Abreu
2016-12-02 14:09     ` Laurent Pinchart
2016-12-01 23:43 ` [PATCH 13/22] drm: bridge: dw-hdmi: Replace device type with platform quirks Laurent Pinchart
2016-12-02 14:24   ` Russell King - ARM Linux
2016-12-02 15:43     ` Laurent Pinchart
2016-12-02 16:08       ` Russell King - ARM Linux
2016-12-02 16:45         ` Laurent Pinchart
2016-12-05 11:51           ` Laurent Pinchart
2016-12-05 10:50       ` Jose Abreu
2016-12-05 11:32         ` Laurent Pinchart [this message]
2016-12-05 12:31           ` Jose Abreu
2016-12-05 12:44             ` Laurent Pinchart
2016-12-01 23:43 ` [PATCH 14/22] dt-bindings: display: dw-hdmi: Clean up DT bindings documentation Laurent Pinchart
2016-12-06 21:15   ` Rob Herring
2016-12-07  9:53     ` Laurent Pinchart
2016-12-01 23:43 ` [PATCH 15/22] dt-bindings: display: renesas: Add R-Car Gen3 HDMI TX DT bindings Laurent Pinchart
2016-12-06 21:18   ` Rob Herring
2016-12-01 23:43 ` [PATCH 16/22] drm: rcar-du: Add Gen3 HDMI encoder support Laurent Pinchart
2016-12-01 23:43 ` [PATCH 17/22] drm: rcar-du: Skip disabled outputs Laurent Pinchart
2016-12-01 23:43 ` [PATCH 18/22] drm: rcar-du: Add DPLL support Laurent Pinchart
2016-12-01 23:43 ` [PATCH 19/22] drm: rcar-du: Add HDMI outputs to R8A7795 device description Laurent Pinchart
2016-12-01 23:43 ` [PATCH 20/22] arm64: dts: r8a7795: Add HDMI encoder support Laurent Pinchart
2016-12-01 23:43 ` [PATCH 21/22] arm64: dts: r8a7795: salvator-x: Enable HDMI outputs Laurent Pinchart
2016-12-01 23:43 ` [PATCH 22/22] arm64: dts: r8a7795: salvator-x: Add DU1 and DU2 external dot clocks Laurent Pinchart
2016-12-02 11:11 ` [PATCH 00/22] R-Car Gen3 HDMI output support Jose Abreu

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=1576280.tBdiYM6mm0@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=Jose.Abreu@synopsys.com \
    --cc=andy.yan@rock-chips.com \
    --cc=architt@codeaurora.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=fabio.estevam@freescale.com \
    --cc=heiko@sntech.de \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.yao@rock-chips.com \
    --cc=p.zabel@pengutronix.de \
    --cc=ulrich.hecht@gmail.com \
    --cc=vladimir_zapolskiy@mentor.com \
    /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