From: "Joshua Peisach" <jpeisach@ubuntu.com>
To: "Michal Wilczynski" <m.wilczynski@samsung.com>,
"Vinod Koul" <vkoul@kernel.org>,
"Neil Armstrong" <neil.armstrong@linaro.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Andrzej Hajda" <andrzej.hajda@intel.com>,
"Robert Foss" <rfoss@kernel.org>,
"Laurent Pinchart" <Laurent.pinchart@ideasonboard.com>,
"Jonas Karlman" <jonas@kwiboo.se>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"Luca Ceresoli" <luca.ceresoli@bootlin.com>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"Lee Jones" <lee@kernel.org>,
"Andy Yan" <andy.yan@rock-chips.com>,
"Philipp Zabel" <p.zabel@pengutronix.de>,
"Emil Renner Berthing" <kernel@esmil.dk>,
"Hal Feng" <hal.feng@starfivetech.com>,
"Michael Turquette" <mturquette@baylibre.com>,
"Stephen Boyd" <sboyd@kernel.org>,
"Brian Masney" <bmasney@redhat.com>,
"Heiko Stuebner" <heiko@sntech.de>,
"Conor Dooley" <conor@kernel.org>,
"Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Dominique Belhachemi" <db@domibel.de>,
"Brian Masney" <bmasney+clk@redhat.com>,
"Jerome Brunet" <jbrunet+clk@baylibre.com>
Cc: <linux-phy@lists.infradead.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <dri-devel@lists.freedesktop.org>,
<mfd@lists.linux.dev>, <linux-clk@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-rockchip@lists.infradead.org>,
<linux-riscv@lists.infradead.org>, "Andy Yan" <andyshrk@163.com>,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
"Maud Spierings" <maud_spierings@murena.io>,
"Graham Markall" <hello@big-grey.co.uk>,
"Icenowy Zheng" <zhengxingda@iscas.ac.cn>
Subject: Re: [PATCH v3 00/19] drm: starfive: jh7110: Enable display subsystem
Date: Fri, 04 Sep 2026 11:13:05 -0400 [thread overview]
Message-ID: <DL6MO1P17KSW.1DKQ6HW2U2ZCK@ubuntu.com> (raw)
In-Reply-To: <20260904-jh7110-clean-send-v3-0-484f9ae72715@samsung.com>
On Fri Sep 4, 2026 at 9:27 AM EDT, Michal Wilczynski wrote:
> This series enables the display subsystem on the StarFive JH7110.
>
> The dom_vout block holds the display controller (dc8200), the clock
> generator (voutcrg) and the HDMI IP, all inside PD_VOUT. The HDMI IP is
> a single register block containing both the controller and the PHY, and
> it has a circular clock dependency with voutcrg:
>
> - the HDMI controller needs pclk/mclk/bclk from voutcrg
> - voutcrg needs the pixel clock for its dc8200 pixel MUXes, and that
> clock is generated by the HDMI PHY
>
> The loop only exists if the HDMI block is treated as one device. The
> PHY's reference clock is xin24m, not a voutcrg output, so splitting the
> node into a parent plus phy and controller children gives deferred probe
> a linear order: hdmi-phy, then voutcrg, then hdmi-controller.
>
> The parent maps the register block and owns the regmap its two children
> share. Everything in the region sits behind one NoC port whose clock and
> reset gate access to it, inside PD_VOUT, so the vout subsystem node from
> the RFC is back and owns those for as long as any child exists.
>
> Patch 10 adds a .mode_valid platform op to inno-hdmi.
> inno_hdmi_bridge_mode_valid() checks the pixel clock against
> hdmi->refclk, but that clock only exists where a "ref" clock is
> described. The JH7110 gets its pixel clock from the PHY, so refclk is
> NULL and the check was skipped: unsupported modes were advertised, the
> modeset then "succeeded" because the atomic enable path cannot fail, and
> the display stayed blank.
>
> Patches 15-17 drop the PHY duplication from the RFC. The JH7110 has the
> same Innosilicon PHY as the RK3328, offset by 0x100 because it sits
> behind the controller in the shared register block. Patch 15 factors out
> the pre-PLL config format, table lookup, determine_rate, recalc_rate and
> the pre-PLL programming; patch 16 moves Rockchip onto it; patch 17 adds
> the JH7110 driver. Pixel clock tables, post-PLL and analog config stay
> SoC specific.
>
> Patch 16 should be a no-op for Rockchip - same writes, same order, same
> values - and RK3228, whose pre-PLL is at different addresses, keeps its
> own register code and shares only the lookup. I have no Rockchip
> hardware, so it is build tested only (arm and riscv). A Tested-by would
> help.
>
> The dc8200 driver, th1520 reset controller and inno-hdmi bridge that the
> RFC listed as prerequisites are all upstream now, so there are no
> out-of-tree dependencies.
>
> Testing
> =======
>
> Tested on a VisionFive 2 v1.3B using modetest.
>
> All 42 modes the sink advertises work, with nothing in dmesg. Pixel
> clocks run from 25.175 MHz (640x480@59.94) up to 297 MHz
> (4096x2160@30), including 3840x2160 and the full 1920x1080 and 1280x720
> rate families.
>
> The four modes the RFC reported as broken work now too: 2560x1440@59.95,
> 2048x1080@60.00, 2048x1080@24.00 and 720x400@70.08.
>
> Before patch 10, four of the advertised modes failed: 1680x1050@59.95
> (146.250 MHz), 1400x1050@59.98 (121.750), 1152x864@59.97 (81.768) and
> 1280x768@60.35 (80.140). Those pixel clocks are not in the PHY pre-PLL
> table, so clk_set_rate() returned -EINVAL and the screen stayed black
> while userspace saw a successful modeset. They are rejected in
> .mode_valid now; the other refresh rates of those resolutions still work.
>
> Every commit builds for riscv, and the Rockchip PHY also for arm.
>
> Notes
> =====
>
> The JH7110 has no central MAINTAINERS entry and maintainership is
> fragmented, so patch 19 adds one for the display subsystem and I am
> happy to help maintain it. The new PHY library lives under drivers/phy/,
> already covered by the generic PHY framework entry.
>
> checkpatch warns "does MAINTAINERS need updating?" on the patches adding
> files, because that entry comes in patch 19.
>
> Thanks to Icenowy Zheng for the dc8200 driver and for explaining how the
> SoC and the display pipeline fit together.
>
> Thanks also to Dominique Belhachemi, who got rid of the vout-subsystem
> wrapper and helped with the testing, to Maud Spierings for testing on a
> Framework 13 panel, and to Graham Markall for testing
> the JH7110 display patches independently and writing up the results:
> https://big-grey.co.uk/2026/01/26/testing-starfive-jh7110-display-controller-patches/
>
> Link to v1: https://lore.kernel.org/all/20251108-jh7110-clean-send-v1-0-06bf43bb76b1@samsung.com/
>
> ---
> Changes in v3:
> - Brought back the vout subsystem node and driver, now owning the NoC
> bus clock, its reset and PD_VOUT for the whole region, with dc8200,
> the HDMI block, the syscon and voutcrg as its children (Icenowy Zheng).
> - Fixed a hard hang when the bridge is built as a module: the PHY's
> .is_prepared read a register in the window gated by the controller's
> system clock, so clk_disable_unused() wedged the CPU before the
> controller had bound. The op is gone; the framework uses the software
> prepare count instead. (Marek Szyprowski)
> - The HDMI controller now programs the display mux in dom_vout_syscon
> from the port graph rather than inheriting whatever the bootloader
> left, with a phandle to the syscon (Icenowy Zheng).
> - The register access clock is named "pclk" to match the existing
> inno-hdmi binding, so the generic driver no longer picks up the pixel
> clock. Previously it held the pre-PLL powered from probe and sized the
> DDC divider from the wrong rate.
> - Dropped the clk suffixes and the single-entry -names properties from
> the bindings (Conor Dooley). mclk and bclk keep their names: per TRM
> 5.3 they are the HDMI audio clocks, not module and bus clocks, so the
> descriptions say that instead.
> - Replaced patternProperties with plain properties in the hdmi-subsystem
> binding (Conor Dooley).
> - dc8200 gets an SoC specific compatible, and inherits dma-noncoherent
> from the subsystem bus node, so it validates against verisilicon,dc.
> - Added the pre-PLL entry for the Framework 13 panel and fixed two
> devicetree whitespace nits (Maud Spierings).
> - select REGMAP_MMIO, CLK_SET_RATE_NO_REPARENT on the dc8200 pixel MUXes
> so clk_set_rate() cannot reroute them, and inno-hdmi register reads
> return 0 instead of stack garbage when regmap_read() fails.
> - phy: rockchip: dropped the local pre-PLL lookup wrapper and the 28 now
> unused RK3328 pre-PLL macros, and restored the VCO debug output, this
> time in the shared helper so both drivers get it (Jonas Karlman).
> - Rebased onto v7.3-rc1.
> - Link to v2: https://lore.kernel.org/r/20260828-jh7110-clean-send-v2-0-331680c8b9d1@samsung.com
>
> Changes since the RFC:
> - Dropped the vout-subsystem wrapper driver and its binding, along with
> the patch relaxing the voutcrg binding; genpd handles PD_VOUT per
> node.
> - Renamed the compatible to starfive,jh7110-hdmi-subsystem, dropping
> "mfd" as a Linux term (Conor Dooley).
> - Absolute $refs in the bindings, unused example labels dropped, and the
> examples deduplicated between parent and children (Conor Dooley).
> - Added the .mode_valid platform operation (patch 7).
> - Split the inno-hdmi rework into a mechanical probe/bind split (patch
> 4)
> and the regmap-from-parent change (patch 5). struct inno_hdmi is no
> longer exported; no platform glue dereferences it.
> - Replaced the duplicated PHY driver with a shared Innosilicon library
> and moved Rockchip onto it (patches 11-13).
> - Fixed pre-PLL lock detection, which masked the status read with the
> register address instead of the lock bit.
> - Fixed a pixel clock refcount underflow: enable returns early on
> failure while disable tore down unconditionally.
> - voutcrg patch reduced to adding CLK_SET_RATE_PARENT to the two dc8200
> pixel MUXes.
> - Rebased onto v7.2.
>
> ---
> Michal Wilczynski (19):
> dt-bindings: phy: Add starfive,jh7110-inno-hdmi-phy
> dt-bindings: display: bridge: Add starfive,jh7110-inno-hdmi-controller
> dt-bindings: mfd: Add starfive,jh7110-hdmi-subsystem
> dt-bindings: soc: starfive: Add starfive,jh7110-vout-syscon
> dt-bindings: soc: starfive: Add starfive,jh7110-vout-subsystem
> dt-bindings: display: verisilicon: Add starfive,jh7110-dc8200
> drm/bridge: inno-hdmi: Split probe out of bind
> drm/bridge: inno-hdmi: Allow the register map to come from a parent
> drm/bridge: inno-hdmi: Add .disable platform operation
> drm/bridge: inno-hdmi: Add .mode_valid platform operation
> soc: starfive: Add jh7110-hdmi-subsystem driver
> soc: starfive: Add jh7110-vout-subsystem driver
> clk: starfive: jh7110-vout: Allow pixel clock rate propagation
> drm/bridge: starfive: Add JH7110 HDMI controller driver
> phy: Add common Innosilicon HDMI PHY helpers
> phy: rockchip: inno-hdmi: Use the common Innosilicon PHY helpers
> phy: starfive: Add jh7110-inno-hdmi-phy driver
> riscv: dts: starfive: jh7110: Update DT for display subsystem
> MAINTAINERS: Add StarFive JH7110 display subsystem entry
>
> .../starfive,jh7110-inno-hdmi-controller.yaml | 121 +++++
> .../bindings/display/verisilicon,dc.yaml | 1 +
> .../mfd/starfive,jh7110-hdmi-subsystem.yaml | 95 ++++
> .../phy/starfive,jh7110-inno-hdmi-phy.yaml | 49 ++
> .../soc/starfive/starfive,jh7110-syscon.yaml | 6 +
> .../starfive/starfive,jh7110-vout-subsystem.yaml | 100 ++++
> MAINTAINERS | 13 +
> arch/riscv/boot/dts/starfive/jh7110-common.dtsi | 121 ++++-
> arch/riscv/boot/dts/starfive/jh7110.dtsi | 102 +++-
> drivers/clk/starfive/clk-starfive-jh7110-vout.c | 6 +-
> drivers/gpu/drm/bridge/Kconfig | 11 +
> drivers/gpu/drm/bridge/Makefile | 1 +
> drivers/gpu/drm/bridge/inno-hdmi.c | 84 ++-
> drivers/gpu/drm/bridge/jh7110-inno-hdmi.c | 318 +++++++++++
> drivers/phy/Kconfig | 8 +
> drivers/phy/Makefile | 1 +
> drivers/phy/phy-inno-hdmi.c | 298 +++++++++++
> drivers/phy/rockchip/Kconfig | 1 +
> drivers/phy/rockchip/phy-rockchip-inno-hdmi.c | 165 +-----
> drivers/phy/starfive/Kconfig | 20 +
> drivers/phy/starfive/Makefile | 1 +
> drivers/phy/starfive/phy-jh7110-inno-hdmi.c | 579 +++++++++++++++++++++
> drivers/soc/Kconfig | 1 +
> drivers/soc/Makefile | 1 +
> drivers/soc/starfive/Kconfig | 43 ++
> drivers/soc/starfive/Makefile | 3 +
> drivers/soc/starfive/jh7110-hdmi-subsystem.c | 74 +++
> drivers/soc/starfive/jh7110-vout-subsystem.c | 83 +++
> include/drm/bridge/inno_hdmi.h | 10 +-
> include/linux/phy/inno-hdmi-phy.h | 85 +++
> 30 files changed, 2227 insertions(+), 174 deletions(-)
> ---
> base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
> change-id: 20251031-jh7110-clean-send-7d2242118026
>
> Best regards,
So as a kernel newbie, and someone who happens to have this device,
it's nice to see it here.
It looks good to me, just a few questions:
- One patch mentioned in a comment "the docs" - is there documentation
for the device?
- There are multiple pieces, like the hdmi and vout subsystem, and also
the inno helpers. Should those be separate patches? I honestly don't
have enough experience (or authority) to suggest doing so.
I thought this would be great as a possible driver I could do to learn
kernel dev.. looks like I was very wrong. Great work, and hopefully
in the future I get my hands on some device that needs a driver to be
written for it.
I'm at university, once my board gets mailed from home I'll be able to
test. For now,
Reviewed-by: Joshua Peisach <jpeisach@ubuntu.com>
next prev parent reply other threads:[~2026-09-04 15:13 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20260904132708eucas1p1adfa26ef0fe5109eca63a3aeadf74915@eucas1p1.samsung.com>
2026-09-04 13:27 ` [PATCH v3 00/19] drm: starfive: jh7110: Enable display subsystem Michal Wilczynski
2026-09-04 13:27 ` [PATCH v3 01/19] dt-bindings: phy: Add starfive,jh7110-inno-hdmi-phy Michal Wilczynski
2026-09-04 13:30 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 02/19] dt-bindings: display: bridge: Add starfive,jh7110-inno-hdmi-controller Michal Wilczynski
2026-09-04 13:35 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 03/19] dt-bindings: mfd: Add starfive,jh7110-hdmi-subsystem Michal Wilczynski
2026-09-04 13:37 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 04/19] dt-bindings: soc: starfive: Add starfive,jh7110-vout-syscon Michal Wilczynski
2026-09-04 13:30 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 05/19] dt-bindings: soc: starfive: Add starfive,jh7110-vout-subsystem Michal Wilczynski
2026-09-04 13:36 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 06/19] dt-bindings: display: verisilicon: Add starfive,jh7110-dc8200 Michal Wilczynski
2026-09-04 13:31 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 07/19] drm/bridge: inno-hdmi: Split probe out of bind Michal Wilczynski
2026-09-04 13:42 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 08/19] drm/bridge: inno-hdmi: Allow the register map to come from a parent Michal Wilczynski
2026-09-04 13:43 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 09/19] drm/bridge: inno-hdmi: Add .disable platform operation Michal Wilczynski
2026-09-04 13:49 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 10/19] drm/bridge: inno-hdmi: Add .mode_valid " Michal Wilczynski
2026-09-04 13:40 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 11/19] soc: starfive: Add jh7110-hdmi-subsystem driver Michal Wilczynski
2026-09-04 13:52 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 12/19] soc: starfive: Add jh7110-vout-subsystem driver Michal Wilczynski
2026-09-04 13:47 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 13/19] clk: starfive: jh7110-vout: Allow pixel clock rate propagation Michal Wilczynski
2026-09-04 13:44 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 14/19] drm/bridge: starfive: Add JH7110 HDMI controller driver Michal Wilczynski
2026-09-04 13:39 ` Icenowy Zheng
2026-09-04 13:57 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 15/19] phy: Add common Innosilicon HDMI PHY helpers Michal Wilczynski
2026-09-04 13:55 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 16/19] phy: rockchip: inno-hdmi: Use the common Innosilicon " Michal Wilczynski
2026-09-04 13:59 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 17/19] phy: starfive: Add jh7110-inno-hdmi-phy driver Michal Wilczynski
2026-09-04 13:57 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 18/19] riscv: dts: starfive: jh7110: Update DT for display subsystem Michal Wilczynski
2026-09-04 14:03 ` sashiko-bot
2026-09-04 13:27 ` [PATCH v3 19/19] MAINTAINERS: Add StarFive JH7110 display subsystem entry Michal Wilczynski
2026-09-04 15:13 ` Joshua Peisach [this message]
2026-09-05 5:21 ` [PATCH v3 00/19] drm: starfive: jh7110: Enable display subsystem Maud Spierings
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=DL6MO1P17KSW.1DKQ6HW2U2ZCK@ubuntu.com \
--to=jpeisach@ubuntu.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=alex@ghiti.fr \
--cc=andrzej.hajda@intel.com \
--cc=andy.yan@rock-chips.com \
--cc=andyshrk@163.com \
--cc=aou@eecs.berkeley.edu \
--cc=bmasney+clk@redhat.com \
--cc=bmasney@redhat.com \
--cc=conor+dt@kernel.org \
--cc=conor@kernel.org \
--cc=db@domibel.de \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=hal.feng@starfivetech.com \
--cc=heiko@sntech.de \
--cc=hello@big-grey.co.uk \
--cc=jbrunet+clk@baylibre.com \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=kernel@esmil.dk \
--cc=krzk+dt@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=luca.ceresoli@bootlin.com \
--cc=m.szyprowski@samsung.com \
--cc=m.wilczynski@samsung.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=maud_spierings@murena.io \
--cc=mfd@lists.linux.dev \
--cc=mripard@kernel.org \
--cc=mturquette@baylibre.com \
--cc=neil.armstrong@linaro.org \
--cc=p.zabel@pengutronix.de \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=rfoss@kernel.org \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
--cc=vkoul@kernel.org \
--cc=zhengxingda@iscas.ac.cn \
/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