dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Zhi Wang <zhiw@nvidia.com>
To: FUJITA Tomonori <fujita.tomonori@gmail.com>
Cc: "dakr@redhat.com" <dakr@redhat.com>,
	"maarten.lankhorst@linux.intel.com"
	<maarten.lankhorst@linux.intel.com>,
	"mripard@kernel.org" <mripard@kernel.org>,
	"tzimmermann@suse.de" <tzimmermann@suse.de>,
	"airlied@gmail.com" <airlied@gmail.com>,
	"daniel@ffwll.ch" <daniel@ffwll.ch>,
	 "ojeda@kernel.org" <ojeda@kernel.org>,
	"alex.gaynor@gmail.com" <alex.gaynor@gmail.com>,
	"wedsonaf@gmail.com" <wedsonaf@gmail.com>,
	"boqun.feng@gmail.com" <boqun.feng@gmail.com>,
	"gary@garyguo.net" <gary@garyguo.net>,
	"bjorn3_gh@protonmail.com" <bjorn3_gh@protonmail.com>,
	"benno.lossin@proton.me" <benno.lossin@proton.me>,
	"a.hindborg@samsung.com" <a.hindborg@samsung.com>,
	"aliceryhl@google.com" <aliceryhl@google.com>,
	"lina@asahilina.net" <lina@asahilina.net>,
	"pstanner@redhat.com" <pstanner@redhat.com>,
	"ajanulgu@redhat.com" <ajanulgu@redhat.com>,
	"lyude@redhat.com" <lyude@redhat.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"rust-for-linux@vger.kernel.org" <rust-for-linux@vger.kernel.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>,
	"nouveau@lists.freedesktop.org" <nouveau@lists.freedesktop.org>
Subject: Re: [RFC PATCH 7/8] rust: add firmware abstractions
Date: Tue, 28 May 2024 10:45:31 +0000	[thread overview]
Message-ID: <1e09c517-123f-442d-8184-c33ba52a37bf@nvidia.com> (raw)
In-Reply-To: <20240528.191754.1306229738730927340.fujita.tomonori@gmail.com>

On 28/05/2024 13.17, FUJITA Tomonori wrote:
> External email: Use caution opening links or attachments
> 
> 
> Hi,
> 
> On Tue, 28 May 2024 08:40:20 +0000
> Zhi Wang <zhiw@nvidia.com> wrote:
> 
>> On 27/05/2024 22.18, Danilo Krummrich wrote:
>>> External email: Use caution opening links or attachments
>>>
>>>
>>> On Tue, May 21, 2024 at 08:32:31AM +0300, Zhi Wang wrote:
>>>> On Mon, 20 May 2024 19:24:19 +0200
>>>> Danilo Krummrich <dakr@redhat.com> wrote:
>>>>
>>>>> Add an abstraction around the kernels firmware API to request firmware
>>>>> images. The abstraction provides functions to access the firmware
>>>>> buffer and / or copy it to a new buffer allocated with a given
>>>>> allocator backend.
>>>>>
>>>>
>>>> Was playing with firmware extractions based on this patch.
>>>> Unfortunately I ended up with a lot of pointer operations, unsafe
>>>> statements.
>>>>
>>>> As we know many vendors have a C headers for the definitions of the
>>>> firwmare content, the driver extract the data by applying a struct
>>>> pointer on it.
>>>>
>>>> But in rust, I feel it would nice that we can also have a common
>>>> firmware extractor for drivers, that can wrap the pointer operations,
>>>> take a list of the firmware struct members that converted from C headers
>>>> as the input, offer the driver some common ABI methods to query them.
>>>> Maybe that would ease the pain a lot.
>>>
>>> So, you mean some abstraction that takes a list of types, offsets in the
>>> firmware and a reference to the firmware itself and provides references to the
>>> corresponding objects?
>>>
>>> I agree it might be helpful to have some common infrastructure for this, but the
>>> operations on it would still be unsafe, since ultimately it involves
>>> dereferencing pointers.
>>>
>>
>> I think the goal is to 1) concentrate the "unsafe" operations in a
>> abstraction so the driver doesn't have to write explanation of unsafe
>> operations here and there, improve the readability of the driver that
>> interacts with vendor-firmware buffer. 2) ease the driver maintenance
>> burden.
>>
>> Some solutions I saw in different projects written in rust for
>> de-referencing a per-defined struct:
> 
> Aren't there other abstractions that require that functionality, not
> just the firmware abstractions?

Sure, but they might implement it in a different way due to their 
different scale and requirements of maintenance.

I am more interested in what is the better option for firmware 
abstractions based on its scale and requirements. 1) how to improve the 
readability of the driver, meanwhile keep the operations safe. 2) there 
has been C-version vendor-firmware definitions, what would be the best 
for the rust driver to leverage it based on the routines that the rust 
kernel has already had. 3) how to avoid syncing the headers of vendor 
firmware between C and rust version, as the definition can scale up due 
to HW generations or ABI changes.

Thanks,
Zhi.

  reply	other threads:[~2024-05-28 11:57 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-20 17:20 [RFC PATCH 0/8] [RFC] DRM Rust abstractions and Nova Danilo Krummrich
2024-05-20 17:20 ` [RFC PATCH 1/8] rust: drm: ioctl: Add DRM ioctl abstraction Danilo Krummrich
2024-05-20 17:20 ` [RFC PATCH 2/8] rust: Add a Sealed trait Danilo Krummrich
2024-05-20 17:20 ` [RFC PATCH 3/8] rust: drm: Add Device and Driver abstractions Danilo Krummrich
2024-05-21 21:23   ` Rob Herring
2024-05-27 19:26     ` Danilo Krummrich
2024-06-09  5:15     ` Asahi Lina
2024-06-09 14:18       ` Danilo Krummrich
2024-06-11 15:46       ` Rob Herring
2024-05-20 17:20 ` [RFC PATCH 4/8] rust: drm: implement `AsRef` for DRM device Danilo Krummrich
2024-05-20 17:24 ` Danilo Krummrich
2024-05-20 17:24 ` [RFC PATCH 5/8] rust: drm: file: Add File abstraction Danilo Krummrich
2024-05-20 17:24 ` [RFC PATCH 6/8] rust: drm: gem: Add GEM object abstraction Danilo Krummrich
2024-06-06 15:26   ` Daniel Almeida
2024-05-20 17:24 ` [RFC PATCH 7/8] rust: add firmware abstractions Danilo Krummrich
2024-05-21  5:32   ` Zhi Wang
2024-05-27 19:18     ` Danilo Krummrich
2024-05-28  8:40       ` Zhi Wang
2024-05-28 10:17         ` FUJITA Tomonori
2024-05-28 10:45           ` Zhi Wang [this message]
2024-05-28 14:18         ` Danilo Krummrich
2024-05-28 21:20           ` Zhi Wang
2024-05-21 23:53   ` FUJITA Tomonori
2024-05-22  7:37     ` Philipp Stanner
2024-05-22 23:15       ` FUJITA Tomonori
2024-05-23  2:48         ` Boqun Feng
2024-05-27 19:22     ` Danilo Krummrich
2024-05-28 11:01       ` FUJITA Tomonori
2024-05-28 12:19         ` Danilo Krummrich
2024-05-28 12:45           ` Greg KH
2024-05-28 13:17             ` Danilo Krummrich
2024-05-29  0:28             ` FUJITA Tomonori
2024-05-29 19:57               ` Greg KH
2024-05-29 23:28                 ` FUJITA Tomonori
2024-05-30  2:01                   ` Danilo Krummrich
2024-05-30  4:24                     ` FUJITA Tomonori
2024-05-30  6:47                       ` Danilo Krummrich
2024-05-31  7:50                         ` FUJITA Tomonori
2024-05-31  9:59                           ` Danilo Krummrich
2024-06-07 12:11                             ` FUJITA Tomonori
2024-06-07 12:36                               ` Greg KH
2024-06-07 13:05                                 ` Danilo Krummrich
2024-06-07 13:33                                 ` Danilo Krummrich
2024-06-07 15:41                                   ` Greg KH
2024-06-07 17:55                                     ` Danilo Krummrich
2024-06-07 23:28                                       ` FUJITA Tomonori
2024-06-10 13:13                                         ` Danilo Krummrich
2024-06-07 12:43                               ` Danilo Krummrich
2024-05-29  0:38           ` FUJITA Tomonori
2024-05-28 12:06   ` Danilo Krummrich
2024-05-20 17:24 ` [RFC PATCH 8/8] nova: add initial driver stub Danilo Krummrich
2024-05-20 17:30 ` Device / Driver and PCI Rust abstractions Danilo Krummrich

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=1e09c517-123f-442d-8184-c33ba52a37bf@nvidia.com \
    --to=zhiw@nvidia.com \
    --cc=a.hindborg@samsung.com \
    --cc=airlied@gmail.com \
    --cc=ajanulgu@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=dakr@redhat.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=fujita.tomonori@gmail.com \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=lina@asahilina.net \
    --cc=lyude@redhat.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=ojeda@kernel.org \
    --cc=pstanner@redhat.com \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tzimmermann@suse.de \
    --cc=wedsonaf@gmail.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