From: Daniel Almeida <daniel.almeida@collabora.com>
To: Lyude Paul <lyude@redhat.com>
Cc: dri-devel@lists.freedesktop.org, rust-for-linux@vger.kernel.org,
"Asahi Lina" <lina@asahilina.net>,
"Danilo Krummrich" <dakr@kernel.org>,
mcanal@igalia.com, airlied@redhat.com, zhiw@nvidia.com,
cjia@nvidia.com, jhubbard@nvidia.com,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@samsung.com>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@redhat.com>,
"Mika Westerberg" <mika.westerberg@linux.intel.com>,
"open list" <linux-kernel@vger.kernel.org>
Subject: Re: [WIP RFC v2 27/35] rust: drm/kms: Add drm_framebuffer bindings
Date: Thu, 28 Nov 2024 11:26:42 -0300 [thread overview]
Message-ID: <B9ADBAF1-7A13-4756-8787-C05CF36DC2BD@collabora.com> (raw)
In-Reply-To: <20240930233257.1189730-28-lyude@redhat.com>
> On 30 Sep 2024, at 20:10, Lyude Paul <lyude@redhat.com> wrote:
>
> This adds some very simple bindings for drm_framebuffer. We don't use them
> much yet, but we'll eventually be using them when rvkms eventually gets CRC
> and writeback support. Just like Connector objects, these use RcModeObject.
Yeah, for the non-KMS devs like me, a brief explanation on CRC and writeback support
would be helpful
>
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
> rust/bindings/bindings_helper.h | 1 +
> rust/kernel/drm/kms.rs | 1 +
> rust/kernel/drm/kms/framebuffer.rs | 58 ++++++++++++++++++++++++++++++
> 3 files changed, 60 insertions(+)
> create mode 100644 rust/kernel/drm/kms/framebuffer.rs
>
> diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helper.h
> index 7695f11f4363c..7c324003c3885 100644
> --- a/rust/bindings/bindings_helper.h
> +++ b/rust/bindings/bindings_helper.h
> @@ -15,6 +15,7 @@
> #include <drm/drm_fourcc.h>
> #include <drm/drm_fbdev_dma.h>
> #include <drm/drm_fbdev_shmem.h>
> +#include <drm/drm_framebuffer.h>
> #include <drm/drm_gem.h>
> #include <drm/drm_gem_framebuffer_helper.h>
> #include <drm/drm_gem_shmem_helper.h>
> diff --git a/rust/kernel/drm/kms.rs b/rust/kernel/drm/kms.rs
> index 4ab039d67352e..3edd90bc0025a 100644
> --- a/rust/kernel/drm/kms.rs
> +++ b/rust/kernel/drm/kms.rs
> @@ -7,6 +7,7 @@
> pub mod crtc;
> pub mod encoder;
> pub mod fbdev;
> +pub mod framebuffer;
> pub mod plane;
>
> use crate::{
> diff --git a/rust/kernel/drm/kms/framebuffer.rs b/rust/kernel/drm/kms/framebuffer.rs
> new file mode 100644
> index 0000000000000..bbe408c187670
> --- /dev/null
> +++ b/rust/kernel/drm/kms/framebuffer.rs
> @@ -0,0 +1,58 @@
> +// SPDX-License-Identifier: GPL-2.0 OR MIT
> +//! DRM Framebuffer related bindings
> +
> +use crate::{
> + drm::{
> + device::Device,
> + fourcc::*,
> + },
> + types::*,
> + prelude::*,
> +};
> +use bindings;
> +use core::{
> + marker::*,
> + slice,
> +};
> +use super::{ModeObject, RcModeObject, KmsDriver};
> +
> +/// The main interface for [`struct drm_framebuffer`].
> +///
> +/// [`struct drm_framebuffer`]: srctree/include/drm/drm_framebuffer.h
> +#[repr(transparent)]
> +pub struct Framebuffer<T: KmsDriver> {
> + inner: Opaque<bindings::drm_framebuffer>,
> + _p: PhantomData<T>,
> +}
> +
> +impl<T: KmsDriver> ModeObject for Framebuffer<T> {
> + type Driver = T;
> +
> + fn drm_dev(&self) -> &Device<Self::Driver> {
> + unsafe { Device::borrow((*self.inner.get()).dev) }
> + }
> +
> + fn raw_mode_obj(&self) -> *mut bindings::drm_mode_object {
> + // SAFETY: We don't expose Framebuffer<T> to users before it's initialized, so `base` is
> + // always initialized
> + unsafe { &mut (*self.inner.get()).base }
> + }
> +}
> +
> +// SAFETY: Framebuffers are refcounted mode objects.
> +unsafe impl<T: KmsDriver> RcModeObject for Framebuffer<T> {}
> +
> +// SAFETY: References to framebuffers are safe to be accessed from any thread
> +unsafe impl<T: KmsDriver> Send for Framebuffer<T> {}
> +// SAFETY: References to framebuffers are safe to be accessed from any thread
> +unsafe impl<T: KmsDriver> Sync for Framebuffer<T> {}
> +
> +impl<T: KmsDriver> crate::private::Sealed for Framebuffer<T> {}
A brief comment on why you’re implementing Sealed would also be good :)
> +
> +impl<T: KmsDriver> Framebuffer<T> {
> + #[inline]
> + pub(super) unsafe fn from_raw<'a>(ptr: *const bindings::drm_framebuffer) -> &'a Self {
> + // SAFETY: Our data layout is identical to drm_framebuffer
> + unsafe { &*ptr.cast() }
> + }
> +}
> --
> 2.46.1
>
This LGTM.
— Daniel
next prev parent reply other threads:[~2024-11-28 14:27 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240930233257.1189730-1-lyude@redhat.com>
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 [this message]
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
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=B9ADBAF1-7A13-4756-8787-C05CF36DC2BD@collabora.com \
--to=daniel.almeida@collabora.com \
--cc=a.hindborg@samsung.com \
--cc=airlied@redhat.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=cjia@nvidia.com \
--cc=dakr@kernel.org \
--cc=dakr@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=lina@asahilina.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=mcanal@igalia.com \
--cc=mika.westerberg@linux.intel.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
--cc=wedsonaf@gmail.com \
--cc=zhiw@nvidia.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
all inboxes | Powered by JetHome®