rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [WIP RFC v2 00/35] Rust bindings for KMS + RVKMS
@ 2024-09-30 23:09 Lyude Paul
  2024-09-30 23:09 ` [WIP RFC v2 01/35] WIP: rust/drm: Add fourcc bindings Lyude Paul
                   ` (35 more replies)
  0 siblings, 36 replies; 111+ messages in thread
From: Lyude Paul @ 2024-09-30 23:09 UTC (permalink / raw)
  To: dri-devel, rust-for-linux
  Cc: Asahi Lina, Danilo Krummrich, mcanal, airlied, zhiw, cjia,
	jhubbard, Miguel Ojeda, Alex Gaynor, Wedson Almeida Filho,
	Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
	Andreas Hindborg, Alice Ryhl, Trevor Gross

Hi again! It's been a while since the last time I sent this, there's
still a good bit of work to do here but I think there's more then enough
to start reviewing the design I have so far :) - especially since I'll
be presenting this work at XDC2024 this year.  This patch series
introduces a WIP set of bindings for KMS drivers written in rust, based
on top of the work of quite a number of people:

* Garry Guo's #[unique] macro for #[vtable]
  (used for getting consistent memory addresses for C vtables, which we
  need for Opaque* object types)
* Andreas Hindborg's hrtimer bindings
  For vblank emulation in rvkms. Note: the version of the patch series
  used here is slightly older then the one he last sent upstream, but
  API wise it's more or less identical, with some additions I need to
  upstream.
* My IRQ bindings for rust + SpinlockIrq type
* Misc. Lock additions from me that need to be cleaned up + upstreamed
* Asahi Lina and María Canal's platform driver bindings + resource
  management patches
  I need to clean these up quite a bit and work on upstreaming these
* Asahi Lina and Danilo Krummrich's DRM device bindings for rust
* Asahi Lina's gem shmem bindings
* Some misc. DRM fixes from me

All of these dependencies are either in the process of currently being
upstreamed, or are planned by me to be upstreamed.

Since this is still a WIP, I've done my best to mark all of the patches
where I think there's still work to be done - along with leaving TODOs
in various comments, and in the commit descriptions for each WIP patch.
Some general TODOs series-wide to keep in mind here:

* I don't have code examples in the documentation yet, consider rvkms to
  be that example for the time being
* This compiles with a lot of warnings. I will hopefully have these
  cleaned up soon, but didn't have the time to sort through all of them
  since some of them are leftover from various dependencies we have
* Most of the documentation has been typed up, but don't be surprised if
  you find a few formatting issues (feel free to point them out though!)
* I need to go through and add appropriate SPDX copyright notices
* I need to make sure these compile independently. I think they should,
  but it's been a while since I checked
* I've left some currently unused bindings out, including:
  * CRTC commit_data equivalents
  * "Ephemeral data" - e.g. data in Crtc, Plane, and Connector objects
    that is embedded within the main modeset objects themselves but can
    only be accessed during an atomic commit.
  * Misc. DRM helpers (currently just a drm_rect port to rust)
* I still need to make the device registration in rvkms static,
  currently we do device probing/creation in the legacy fashion.

Because of the pretty substantial number of dependencies this patch
series relies on, I currently have a tag for this on my freedesktop
branch:

https://gitlab.freedesktop.org/lyudess/linux/-/commits/rvkms-xdc2024-base

Additionally, you can see the rest of the work I've done so far
(including the patches I omitted for this series) here:

https://gitlab.freedesktop.org/lyudess/linux/-/commits/rvkms-wip

And finally, I do have these patches applied on a branch also available
on my gitlab:

https://gitlab.freedesktop.org/lyudess/linux/-/commits/rvkms-xdc2024

And of course - since the last time I sent out these patches, I've split
things up quite a bit to make it easier to go through.

Cheers!

Lyude Paul (35):
  WIP: rust/drm: Add fourcc bindings
  WIP: rust: drm: Add traits for registering KMS devices
  rust: drm/kms/fbdev: Add FbdevShmem
  rust: drm/kms: Introduce the main ModeConfigObject traits
  rust: drm/kms: Add bindings for drm_connector
  rust: drm/kms: Add drm_plane bindings
  WIP: rust: drm/kms: Add drm_crtc bindings
  rust: drm/kms: Add bindings for drm_encoder
  WIP: rust: drm/kms: Add Connector.attach_encoder()
  rust: drm/kms: Add DriverConnector::get_mode callback
  rust: drm/kms: Add ConnectorGuard::add_modes_noedid()
  rust: drm/kms: Add ConnectorGuard::set_preferred_mode
  WIP: rust: drm/kms: Add OpaqueConnector and OpaqueConnectorState
  WIP: rust: drm/kms: Add OpaqueCrtc and OpaqueCrtcState
  WIP: rust: drm/kms: Add OpaquePlane and OpaquePlaneState
  rust: drm/kms: Add RawConnector and RawConnectorState
  rust: drm/kms: Add RawCrtc and RawCrtcState
  rust: drm/kms: Add RawPlane and RawPlaneState
  WIP: rust: drm/kms: Add OpaqueEncoder
  WIP: rust: drm/kms: Add drm_atomic_state bindings
  rust: drm/kms: Introduce DriverCrtc::atomic_check()
  rust: drm/kms: Add DriverPlane::atomic_update()
  rust: drm/kms: Add DriverPlane::atomic_check()
  rust: drm/kms: Add RawCrtcState::active()
  rust: drm/kms: Add RawPlaneState::crtc()
  WIP: rust: drm/kms: Add RawPlaneState::atomic_helper_check()
  rust: drm/kms: Add drm_framebuffer bindings
  rust: drm/kms: Add RawPlane::framebuffer()
  rust: drm/kms: Add DriverCrtc::atomic_begin() and atomic_flush()
  rust: drm/kms: Add DriverCrtc::atomic_enable() and atomic_disable()
  rust: drm: Add Device::event_lock()
  rust: drm/kms: Add Device::num_crtcs()
  WIP: rust: drm/kms: Add VblankSupport
  WIP: rust: drm/kms: Add Kms::atomic_commit_tail
  WIP: drm: Introduce RVKMS!

 drivers/gpu/drm/Kconfig            |   2 +
 drivers/gpu/drm/Makefile           |   1 +
 drivers/gpu/drm/rvkms/Kconfig      |   3 +
 drivers/gpu/drm/rvkms/Makefile     |   1 +
 drivers/gpu/drm/rvkms/connector.rs |  53 ++
 drivers/gpu/drm/rvkms/crtc.rs      | 253 ++++++++
 drivers/gpu/drm/rvkms/encoder.rs   |  33 +
 drivers/gpu/drm/rvkms/file.rs      |  22 +
 drivers/gpu/drm/rvkms/gem.rs       |  30 +
 drivers/gpu/drm/rvkms/output.rs    |  55 ++
 drivers/gpu/drm/rvkms/plane.rs     |  81 +++
 drivers/gpu/drm/rvkms/rvkms.rs     | 168 +++++
 rust/bindings/bindings_helper.h    |  11 +
 rust/helpers/drm/atomic.c          |  32 +
 rust/helpers/drm/drm.c             |   5 +
 rust/helpers/drm/vblank.c          |   8 +
 rust/kernel/drm/device.rs          |  25 +-
 rust/kernel/drm/drv.rs             |  45 +-
 rust/kernel/drm/fourcc.rs          | 127 ++++
 rust/kernel/drm/kms.rs             | 475 +++++++++++++++
 rust/kernel/drm/kms/atomic.rs      | 774 +++++++++++++++++++++++
 rust/kernel/drm/kms/connector.rs   | 831 +++++++++++++++++++++++++
 rust/kernel/drm/kms/crtc.rs        | 944 +++++++++++++++++++++++++++++
 rust/kernel/drm/kms/encoder.rs     | 303 +++++++++
 rust/kernel/drm/kms/fbdev.rs       |  51 ++
 rust/kernel/drm/kms/fbdev/shmem.rs |  33 +
 rust/kernel/drm/kms/framebuffer.rs |  58 ++
 rust/kernel/drm/kms/plane.rs       | 875 ++++++++++++++++++++++++++
 rust/kernel/drm/kms/vblank.rs      | 454 ++++++++++++++
 rust/kernel/drm/mod.rs             |   2 +
 30 files changed, 5747 insertions(+), 8 deletions(-)
 create mode 100644 drivers/gpu/drm/rvkms/Kconfig
 create mode 100644 drivers/gpu/drm/rvkms/Makefile
 create mode 100644 drivers/gpu/drm/rvkms/connector.rs
 create mode 100644 drivers/gpu/drm/rvkms/crtc.rs
 create mode 100644 drivers/gpu/drm/rvkms/encoder.rs
 create mode 100644 drivers/gpu/drm/rvkms/file.rs
 create mode 100644 drivers/gpu/drm/rvkms/gem.rs
 create mode 100644 drivers/gpu/drm/rvkms/output.rs
 create mode 100644 drivers/gpu/drm/rvkms/plane.rs
 create mode 100644 drivers/gpu/drm/rvkms/rvkms.rs
 create mode 100644 rust/helpers/drm/atomic.c
 create mode 100644 rust/helpers/drm/vblank.c
 create mode 100644 rust/kernel/drm/fourcc.rs
 create mode 100644 rust/kernel/drm/kms.rs
 create mode 100644 rust/kernel/drm/kms/atomic.rs
 create mode 100644 rust/kernel/drm/kms/connector.rs
 create mode 100644 rust/kernel/drm/kms/crtc.rs
 create mode 100644 rust/kernel/drm/kms/encoder.rs
 create mode 100644 rust/kernel/drm/kms/fbdev.rs
 create mode 100644 rust/kernel/drm/kms/fbdev/shmem.rs
 create mode 100644 rust/kernel/drm/kms/framebuffer.rs
 create mode 100644 rust/kernel/drm/kms/plane.rs
 create mode 100644 rust/kernel/drm/kms/vblank.rs

-- 
2.46.1


^ permalink raw reply	[flat|nested] 111+ messages in thread

end of thread, other threads:[~2025-01-14 18:55 UTC | newest]

Thread overview: 111+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-30 23:09 [WIP RFC v2 00/35] Rust bindings for KMS + RVKMS Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 01/35] WIP: rust/drm: Add fourcc bindings Lyude Paul
2024-10-01  9:25   ` Jani Nikula
2024-10-01 15:18     ` Miguel Ojeda
2024-10-03  8:33   ` Louis Chauvet
2024-10-03 20:16     ` Lyude Paul
2024-11-26 17:40   ` Daniel Almeida
2024-11-27 21:11     ` Lyude Paul
2025-01-14 18:54       ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 02/35] WIP: rust: drm: Add traits for registering KMS devices Lyude Paul
2024-11-26 18:18   ` Daniel Almeida
2024-11-27 21:21     ` Lyude Paul
2024-12-05 14:03       ` Daniel Almeida
2024-12-03 22:41     ` Lyude Paul
2024-12-05 13:43       ` Daniel Almeida
2024-12-06 15:23   ` Alice Ryhl
2024-12-09 23:20     ` Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 03/35] rust: drm/kms/fbdev: Add FbdevShmem Lyude Paul
2024-11-26 19:58   ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 04/35] rust: drm/kms: Introduce the main ModeConfigObject traits Lyude Paul
2024-11-26 20:34   ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 05/35] rust: drm/kms: Add bindings for drm_connector Lyude Paul
2024-11-26 21:25   ` Daniel Almeida
2024-12-04 21:16     ` Lyude Paul
2024-12-04 21:18       ` Lyude Paul
2024-12-10 23:41     ` Lyude Paul
2024-12-11  8:43       ` Simona Vetter
2024-12-12  0:34         ` Lyude Paul
2024-12-12 10:03           ` Simona Vetter
2024-09-30 23:09 ` [WIP RFC v2 06/35] rust: drm/kms: Add drm_plane bindings Lyude Paul
2024-10-03  8:30   ` Louis Chauvet
2024-10-03 20:06     ` Lyude Paul
2024-11-27 14:05   ` Daniel Almeida
2024-12-12 21:28     ` Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 07/35] WIP: rust: drm/kms: Add drm_crtc bindings Lyude Paul
2024-11-27 14:36   ` Daniel Almeida
2024-12-12 22:25     ` Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 08/35] rust: drm/kms: Add bindings for drm_encoder Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 09/35] WIP: rust: drm/kms: Add Connector.attach_encoder() Lyude Paul
2024-11-27 14:43   ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 10/35] rust: drm/kms: Add DriverConnector::get_mode callback Lyude Paul
2024-11-27 15:03   ` Daniel Almeida
2024-12-12 22:37     ` Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 11/35] rust: drm/kms: Add ConnectorGuard::add_modes_noedid() Lyude Paul
2024-11-27 15:06   ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 12/35] rust: drm/kms: Add ConnectorGuard::set_preferred_mode Lyude Paul
2024-11-27 15:11   ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 13/35] WIP: rust: drm/kms: Add OpaqueConnector and OpaqueConnectorState Lyude Paul
2024-11-27 15:51   ` Daniel Almeida
2024-12-05 23:25     ` Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 14/35] WIP: rust: drm/kms: Add OpaqueCrtc and OpaqueCrtcState Lyude Paul
2024-11-27 16:00   ` Daniel Almeida
2024-12-12 23:01     ` Lyude Paul
2024-09-30 23:09 ` [WIP RFC v2 15/35] WIP: rust: drm/kms: Add OpaquePlane and OpaquePlaneState Lyude Paul
2024-11-27 17:03   ` Daniel Almeida
2024-09-30 23:09 ` [WIP RFC v2 16/35] rust: drm/kms: Add RawConnector and RawConnectorState Lyude Paul
2024-11-27 19:26   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 17/35] rust: drm/kms: Add RawCrtc and RawCrtcState Lyude Paul
2024-11-27 19:29   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 18/35] rust: drm/kms: Add RawPlane and RawPlaneState Lyude Paul
2024-11-27 19:30   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 19/35] WIP: rust: drm/kms: Add OpaqueEncoder Lyude Paul
2024-11-27 19:35   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 20/35] WIP: rust: drm/kms: Add drm_atomic_state bindings Lyude Paul
2024-11-27 20:54   ` Daniel Almeida
2024-12-12 23:37     ` Lyude Paul
2024-09-30 23:10 ` [WIP RFC v2 21/35] rust: drm/kms: Introduce DriverCrtc::atomic_check() Lyude Paul
2024-11-28 13:37   ` Daniel Almeida
2025-01-13 23:43     ` Lyude Paul
2024-09-30 23:10 ` [WIP RFC v2 22/35] rust: drm/kms: Add DriverPlane::atomic_update() Lyude Paul
2024-11-28 13:38   ` Daniel Almeida
2025-01-13 23:47     ` Lyude Paul
2024-11-28 13:51   ` Daniel Almeida
2025-01-13 23:53     ` Lyude Paul
2024-09-30 23:10 ` [WIP RFC v2 23/35] rust: drm/kms: Add DriverPlane::atomic_check() Lyude Paul
2024-11-28 13:49   ` Daniel Almeida
2025-01-13 23:51     ` Lyude Paul
2024-09-30 23:10 ` [WIP RFC v2 24/35] rust: drm/kms: Add RawCrtcState::active() Lyude Paul
2024-11-28 13:54   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 25/35] rust: drm/kms: Add RawPlaneState::crtc() Lyude Paul
2024-11-28 13:58   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 26/35] WIP: rust: drm/kms: Add RawPlaneState::atomic_helper_check() Lyude Paul
2024-11-28 14:04   ` Daniel Almeida
2025-01-13 23:57     ` Lyude Paul
2025-01-14 14:07       ` Simona Vetter
2024-09-30 23:10 ` [WIP RFC v2 27/35] rust: drm/kms: Add drm_framebuffer bindings Lyude Paul
2024-11-28 14:26   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 28/35] rust: drm/kms: Add RawPlane::framebuffer() Lyude Paul
2024-11-28 14:29   ` Daniel Almeida
2025-01-14  0:03     ` Lyude Paul
2025-01-14 14:09       ` Simona Vetter
2024-09-30 23:10 ` [WIP RFC v2 29/35] rust: drm/kms: Add DriverCrtc::atomic_begin() and atomic_flush() Lyude Paul
2024-11-28 14:31   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 30/35] rust: drm/kms: Add DriverCrtc::atomic_enable() and atomic_disable() Lyude Paul
2024-11-28 14:33   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 31/35] rust: drm: Add Device::event_lock() Lyude Paul
2024-11-28 14:35   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 32/35] rust: drm/kms: Add Device::num_crtcs() Lyude Paul
2024-11-28 14:38   ` Daniel Almeida
2025-01-14  0:05     ` Lyude Paul
2024-09-30 23:10 ` [WIP RFC v2 33/35] WIP: rust: drm/kms: Add VblankSupport Lyude Paul
2024-12-05 15:29   ` Daniel Almeida
2025-01-14  0:43     ` Lyude Paul
2025-01-14 14:24       ` Simona Vetter
2025-01-14 15:04         ` Miguel Ojeda
2025-01-14 15:38           ` Simona Vetter
2024-09-30 23:10 ` [WIP RFC v2 34/35] WIP: rust: drm/kms: Add Kms::atomic_commit_tail Lyude Paul
2024-12-05 16:09   ` Daniel Almeida
2024-09-30 23:10 ` [WIP RFC v2 35/35] WIP: drm: Introduce RVKMS! Lyude Paul
2024-12-05 16:36   ` Daniel Almeida
2024-10-01  0:11 ` [WIP RFC v2 00/35] Rust bindings for KMS + RVKMS Lyude Paul

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).