From: Mike Lothian <mike@fireburn.co.uk>
To: rust-for-linux@vger.kernel.org
Cc: dri-devel@lists.freedesktop.org,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Lyude Paul" <lyude@redhat.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
linux-kernel@vger.kernel.org,
"Mike Lothian" <mike@fireburn.co.uk>
Subject: [RFC PATCH v2 00/10] drm/vino: DisplayLink DL3 dock driver
Date: Fri, 3 Jul 2026 04:02:05 +0100 [thread overview]
Message-ID: <20260703030217.2886-1-mike@fireburn.co.uk> (raw)
In-Reply-To: <20260617151249.2937-1-mike@fireburn.co.uk>
This is v2 of the vino RFC: an in-kernel Rust driver for DisplayLink
DL3 docks (Dell D6000, 17e9:6006), replacing the out-of-tree EVDI
module plus the DisplayLinkManager userspace daemon.
Still an RFC in the same place v1 was: the dock never engages its
content-protection channel for vino, so no pixels flow yet. What's
different is everything underneath it. v1's review said, in short,
"work on safe KMS abstractions instead of raw C KMS + as_raw()" --
that's the bulk of this round (see the drm series cover for the
detail), plus the driver picked up several months of hardware-testing
fixes since v1 that had nowhere to land until now.
1/10 skeleton + USB bind + plaintext bring-up (proto, rng)
2/10 clean-room HDCP 2.2 AKE/LC/SKE (crypto, hdcp, ake, golden)
3/10 AES-CTR/AES-CMAC control-plane seal + arm (cp)
4/10 Vino framebuffer codec (video)
5/10 DRM/KMS sink, on the safe KMS mode-object layer (drm_sink)
6/10 the driver itself: USB bind, bring-up, KUnit tests (vino)
7/10 the hardware cursor plane (cursor_atomic_update -> CP) (drm_sink)
8/10 CRTC gamma, plane rotation and DDC/CI monitor controls (drm_sink, cp)
9/10 two heads, 90/270 rotation, damage clips, connector probe (drm_sink)
10/10 hrtimer-driven software vblank for refresh-rate pacing (drm_sink)
What's here and works, HW-verified: USB bind + plaintext session init;
HDCP 2.2 AKE (H'/L'/V'); AES-CTR + Dl3Cmac control-plane seal, byte-exact
against the reference daemon's wire traffic; the stream-open arm marker
that gets the dock processing our encrypted CP for the first time; a
registered DRM/KMS card (CRTC + primary plane + virtual connector/
encoder, GEM-shmem dumb buffers); the Vino codec's DC plane and 8x8
transform, byte-exact against captured hardware output.
What's missing / why it's still RFC:
- No live pixels. Every host-observable byte we put on the wire now
matches the daemon -- verified down to paired full-bus USB captures
and xHCI TRB completion codes -- but the dock still won't ack the
first encrypted control-plane frame. Current read is a dock-firmware
gate unreachable from the host; a hardware USB analyser is the one
untried next step. See docs/BLOCKER.md in the source tree for the
full trail of what's been ruled out.
- The codec's AC coefficient entropy grammar is reverse-engineered but
not finished (EOB/scan/context still open), so the WHT colour path
only covers 64x16-aligned geometry; other modes use the RLE
fallback. Not fabricating the rest until it's verified against
hardware.
- Per-head EDID and per-head mode-set/DDC. Two heads are wired (patch
9), each scanned out to its own video endpoint with its own cursor,
but the bring-up only reads head 0's EDID, and the CP mode-set has no
decoded head/stream field -- so a head is conveyed on the wire only by
which endpoint its frames go to. Real dual-monitor use past the CP
wall needs those captured.
- Two known-open items from v1's automated review, unresolved because
fixing them properly needs more of the safe-KMS work above: some CP
message builders (cursor/mode-set) still GFP_KERNEL-allocate from a
path DRM considers atomic-commit context, and CP_ENGAGED/scanout
state are still module-global statics rather than per-device (the
driver is single-instance throughout, so this only matters for a
theoretical multi-dock case).
Depends on the safe KMS mode-object layer landing (posted alongside,
"[RFC PATCH v2 00/18] rust: drm: safe KMS mode-object layer + evdi
bindings") and, transitively, on the locking/DRM-registration
prerequisite postings that series depends on -- see that cover letter
for exactly what and why. This series won't build without them.
Source, HDCP/HDMI specs referenced, and the full RE trail:
https://github.com/FireBurn/vino-scripts
https://github.com/FireBurn/linux/tree/vino
https://gitlab.freedesktop.org/FireBurn/linux/-/tree/vino
Changes since v1:
- Rebuilt on the safe KMS mode-object layer instead of raw C KMS +
as_raw() (Danilo, Miguel) -- see the drm series cover.
- Folded in the v1 review fixes that survive independently of the KMS
rework: in-tree AES-CMAC + key-prepared-once AES (Eric Biggers);
Interface<Bound> threading + cancel_work_sync() of the bring-up work
in disconnect() (fixes a dropped-work-handle UAF); EP08 16-bit
length overflow rejected; codec SECTION_CODE mode indexing fixed;
encoder shadow committed only on full-frame success; cursor_image
checked arithmetic; EP84_BUF-sized cap reads; pace_cap_ack/
lockstep_reply no longer abort on short frames; Kconfig depends on
USB (was USB=y); #[cfg(CONFIG_KUNIT)] (was the always-false
CONFIG_KUNIT = "y"); a redundant Kconfig select dropped (Julian
Braha). All from the Sashiko bot + human review on v1.
- Added the byte-exact Vino colour codec (DC plane + 8x8 transform)
and the real EP08 wire-record framing, from continued hardware
testing since v1.
- Re-added the hardware cursor plane (patch 7) and, now that the safe
KMS layer exposes them, the CRTC gamma LUT, plane rotation property
and DDC/CI brightness/contrast/DPMS controls (patch 8) that v1's
raw-KMS driver had.
- Added a second display head, 90/270 rotation, damage-clipped repaint
and connector detect()/mode_valid() (patch 9), consuming the new
drm-series bindings. The KMS feature set now exceeds v1's.
- Added hrtimer-driven software vblank (patch 10): the CRTC now paces
page-flips to the display's refresh rate instead of completing them
immediately, using the safe KMS layer's VblankSupport.
Mike Lothian (10):
drm/vino: add DisplayLink DL3 dock skeleton and protocol framing
drm/vino: add the clean-room HDCP 2.2 AKE/LC/SKE handshake
drm/vino: add the AES-CTR/AES-CMAC control-plane seal and arm sequence
drm/vino: add the Vino framebuffer codec
drm/vino: add the DRM/KMS sink, built on the safe KMS mode-object
layer
drm/vino: add the DisplayLink DL3 dock driver
drm/vino: wire the hardware cursor plane
drm/vino: wire CRTC gamma, plane rotation and DDC/CI monitor controls
drm/vino: two heads, 90/270 rotation, damage clips and connector probe
drm/vino: hrtimer-driven software vblank
drivers/gpu/drm/Kconfig | 1 +
drivers/gpu/drm/Makefile | 1 +
drivers/gpu/drm/vino/Kconfig | 20 +
drivers/gpu/drm/vino/Makefile | 2 +
drivers/gpu/drm/vino/ake.rs | 173 ++
drivers/gpu/drm/vino/cp.rs | 733 +++++++++
drivers/gpu/drm/vino/crypto.rs | 48 +
drivers/gpu/drm/vino/drm_sink.rs | 1173 +++++++++++++
drivers/gpu/drm/vino/golden.rs | 69 +
drivers/gpu/drm/vino/hdcp.rs | 167 ++
drivers/gpu/drm/vino/proto.rs | 73 +
drivers/gpu/drm/vino/rng.rs | 12 +
drivers/gpu/drm/vino/video.rs | 1229 ++++++++++++++
drivers/gpu/drm/vino/vino.rs | 2640 ++++++++++++++++++++++++++++++
14 files changed, 6341 insertions(+)
create mode 100644 drivers/gpu/drm/vino/Kconfig
create mode 100644 drivers/gpu/drm/vino/Makefile
create mode 100644 drivers/gpu/drm/vino/ake.rs
create mode 100644 drivers/gpu/drm/vino/cp.rs
create mode 100644 drivers/gpu/drm/vino/crypto.rs
create mode 100644 drivers/gpu/drm/vino/drm_sink.rs
create mode 100644 drivers/gpu/drm/vino/golden.rs
create mode 100644 drivers/gpu/drm/vino/hdcp.rs
create mode 100644 drivers/gpu/drm/vino/proto.rs
create mode 100644 drivers/gpu/drm/vino/rng.rs
create mode 100644 drivers/gpu/drm/vino/video.rs
create mode 100644 drivers/gpu/drm/vino/vino.rs
--
2.55.0
next prev parent reply other threads:[~2026-07-03 3:02 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-17 15:12 [RFC PATCH 0/7] drm/vino: DisplayLink DL3 dock driver (RFC, help wanted) Mike Lothian
2026-06-17 15:12 ` [RFC PATCH 1/7] drm/vino: add DisplayLink DL3 dock skeleton and plaintext bring-up Mike Lothian
2026-06-17 15:17 ` Miguel Ojeda
2026-06-18 10:39 ` Julian Braha
2026-06-17 15:12 ` [RFC PATCH 2/7] drm/vino: add the clean-room HDCP 2.2 AKE/LC/SKE Mike Lothian
2026-06-17 16:18 ` Eric Biggers
2026-06-17 15:12 ` [RFC PATCH 3/7] drm/vino: add the AES-CTR/AES-CMAC control-plane seal and arm Mike Lothian
2026-06-17 15:12 ` [RFC PATCH 4/7] drm/vino: add the Vino (RawRl mode-2) framebuffer codec Mike Lothian
2026-06-17 15:12 ` [RFC PATCH 5/7] drm/vino: register a DRM/KMS device and scan out to EP08 Mike Lothian
2026-06-17 15:12 ` [RFC PATCH 6/7] drm/vino: add DDC/CI brightness/contrast, DPMS power and DFU info Mike Lothian
2026-06-17 15:12 ` [RFC PATCH 7/7] drm/vino: add KUnit self-tests for the protocol and crypto paths Mike Lothian
2026-06-17 15:55 ` [RFC PATCH 0/7] drm/vino: DisplayLink DL3 dock driver (RFC, help wanted) Danilo Krummrich
2026-07-03 3:02 ` Mike Lothian [this message]
2026-07-03 3:02 ` [RFC PATCH v2 01/10] drm/vino: add DisplayLink DL3 dock skeleton and protocol framing Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 02/10] drm/vino: add the clean-room HDCP 2.2 AKE/LC/SKE handshake Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 03/10] drm/vino: add the AES-CTR/AES-CMAC control-plane seal and arm sequence Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 04/10] drm/vino: add the Vino framebuffer codec Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 05/10] drm/vino: add the DRM/KMS sink, built on the safe KMS mode-object layer Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 06/10] drm/vino: add the DisplayLink DL3 dock driver Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 07/10] drm/vino: wire the hardware cursor plane Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 08/10] drm/vino: wire CRTC gamma, plane rotation and DDC/CI monitor controls Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 09/10] drm/vino: two heads, 90/270 rotation, damage clips and connector probe Mike Lothian
2026-07-03 3:02 ` [RFC PATCH v2 10/10] drm/vino: hrtimer-driven software vblank Mike Lothian
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=20260703030217.2886-1-mike@fireburn.co.uk \
--to=mike@fireburn.co.uk \
--cc=a.hindborg@kernel.org \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=tmgross@umich.edu \
--cc=tzimmermann@suse.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