From: "Danilo Krummrich" <dakr@kernel.org>
To: "Gary Guo" <gary@garyguo.net>
Cc: "Alexandre Courbot" <acourbot@nvidia.com>,
"Alice Ryhl" <aliceryhl@google.com>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Yury Norov" <yury.norov@gmail.com>,
"John Hubbard" <jhubbard@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Joel Fernandes" <joelagnelf@nvidia.com>,
"Timur Tabi" <ttabi@nvidia.com>, "Edwin Peer" <epeer@nvidia.com>,
"Eliot Courtney" <ecourtney@nvidia.com>,
"Dirk Behme" <dirk.behme@de.bosch.com>,
"Steven Price" <steven.price@arm.com>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 5/7] rust: io: add `register!` macro
Date: Fri, 30 Jan 2026 17:44:53 +0100 [thread overview]
Message-ID: <DG22Q420ISG8.169OONC5IKK7I@kernel.org> (raw)
In-Reply-To: <DG222YZ4WT33.21A5GG66K9X5O@garyguo.net>
On Fri Jan 30, 2026 at 5:14 PM CET, Gary Guo wrote:
> On Fri Jan 30, 2026 at 6:55 AM GMT, Alexandre Courbot wrote:
>> No, I'm starting to believe that the fundamental issue is that the
>> register interface does its I/O backwards, and that design issue is only
>> exacerbated by the recent I/O redesign. I.e. instead of doing
>>
>> regs::NV_PMC_BOOT_0::read(bar);
>>
>> We should really do
>>
>> bar.read_reg::<regs::NV_PMC_BOOT_0>();
>>
>> Because that way we can use deref coercion.
>>
>> That's quite a big redesign though, which means I don't believe
>> `register!` can make it this cycle... I'll give it a try though.
>
> Hmm, that's unfortunate, but I think this is indeed a big design change that we
> should iron out before merging...
>
> I think you're right that if we put the methods on `Io` then all of the deref
> issue would just went away.
I already discussed this with Alex offline and I think we should not take this
direction just because of the Deref issue, as we can easily overcome this with
using AsRef (or a custom trait).
Whereas the downside of bar.read_reg() is that you end up with a more
inconsistent and complicated API for drivers.
For instance, with the API as is you can do things like:
register!(NV_PFALCON_FALCON_ENGINE @ PFalconBase[0x000003c0] {
0:0 reset as bool;
});
impl NV_PFALCON_FALCON_ENGINE {
pub(crate) fn reset_engine<E: FalconEngine>(bar: &Bar0) {
Self::update(bar, &E::ID, |r| r.set_reset(true));
// TIMEOUT: falcon engine should not take more than 10us to reset.
time::delay::fsleep(time::Delta::from_micros(10));
Self::update(bar, &E::ID, |r| r.set_reset(false));
}
}
and then use this from the driver code like this:
impl<E: FalconEngine> FalconHal<E> for Tu102<E> {
fn do_stuff(&self, bar: &Bar0) {
//...
regs::NV_PFALCON_FALCON_ENGINE::reset_engine::<E>(bar);
//...
}
}
Having to implement AsRef (or a custom trait) for the corresponding I/O backend
implementations is a pretty minor inconvinience compared to the simplicity the
current API provides to drivers.
next prev parent reply other threads:[~2026-01-30 16:44 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-28 2:37 [PATCH v4 0/7] rust: add `register!` macro Alexandre Courbot
2026-01-28 2:37 ` [PATCH v4 1/7] rust: enable the `generic_arg_infer` feature Alexandre Courbot
2026-01-28 2:37 ` [PATCH v4 2/7] rust: num: add `shr` and `shl` methods to `Bounded` Alexandre Courbot
2026-01-28 15:38 ` Gary Guo
2026-01-28 2:37 ` [PATCH v4 3/7] rust: num: add `as_bool` method to `Bounded<_, 1>` Alexandre Courbot
2026-01-28 2:37 ` [PATCH v4 4/7] rust: num: add `into_inner` method to `Bounded` Alexandre Courbot
2026-01-28 15:43 ` Gary Guo
2026-01-29 8:05 ` Alexandre Courbot
2026-01-29 20:23 ` Gary Guo
2026-01-30 0:58 ` Alexandre Courbot
2026-01-28 2:37 ` [PATCH v4 5/7] rust: io: add `register!` macro Alexandre Courbot
2026-01-28 3:02 ` John Hubbard
2026-01-28 3:47 ` Joel Fernandes
2026-01-28 7:42 ` Alexandre Courbot
2026-01-28 17:56 ` Joel Fernandes
2026-01-29 11:59 ` Alexandre Courbot
2026-01-28 16:16 ` Gary Guo
2026-01-29 8:00 ` Alexandre Courbot
2026-01-29 14:10 ` Gary Guo
2026-01-29 21:08 ` Danilo Krummrich
2026-01-30 6:55 ` Alexandre Courbot
2026-01-30 16:14 ` Gary Guo
2026-01-30 16:44 ` Danilo Krummrich [this message]
2026-01-30 17:01 ` Gary Guo
2026-01-30 17:18 ` Danilo Krummrich
2026-01-29 12:48 ` Danilo Krummrich
2026-01-28 2:37 ` [PATCH v4 6/7] sample: rust: pci: use " Alexandre Courbot
2026-01-28 12:35 ` Zhi Wang
2026-01-28 13:27 ` Alexandre Courbot
2026-01-28 15:46 ` Gary Guo
2026-01-29 8:01 ` Alexandre Courbot
2026-01-31 1:06 ` Danilo Krummrich
2026-01-28 2:37 ` [PATCH FOR REFERENCE v4 7/7] gpu: nova-core: use the kernel " Alexandre Courbot
2026-01-28 2:57 ` John Hubbard
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=DG22Q420ISG8.169OONC5IKK7I@kernel.org \
--to=dakr@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=apopple@nvidia.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=daniel.almeida@collabora.com \
--cc=dirk.behme@de.bosch.com \
--cc=ecourtney@nvidia.com \
--cc=epeer@nvidia.com \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=joelagnelf@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=steven.price@arm.com \
--cc=tmgross@umich.edu \
--cc=ttabi@nvidia.com \
--cc=yury.norov@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.