[PATCH 0/7] rust: io: add read-only and write-only views and registers
From: Daniel Almeida
Date: Thu Oct 15 2026 - 08:47:36 EST
This series adds read-only and write-only I/O views, and the #[ro]
and #[wo] attributes to register!. An access in the wrong direction
then does not compile.
This is needed by Tyr, where the doorbell registers are write-only and
the CSF control and output blocks shared with the firmware must only be
read by the driver. Laura's CSF interface series [1] will be the second
user.
Patches 1 and 2 split IoCapable into IoReadable and IoWritable, and
IoCopyable into IoCopyReadable and IoCopyWritable.
Patch 3 adds the ReadOnly and WriteOnly views, returned by
Io::read_only() and Io::write_only(). They wrap any view, and the views
projected from them keep the restriction.
Patch 4 makes the primitive accessors (read32() and friends) project the
view directly instead of going through the generic read and write
methods.
Patch 5 lets an IoLoc carry an access mode, which is applied to the view
projected through it.
Patch 6 adds the #[ro] and #[wo] attributes to register!.
Patch 7 marks the read-only and write-only registers in Tyr. Where
regs.rs does not document a mode, it follows the register permissions
for v10 GPUs in Arm's kbase driver (r54p1).
This is based on drm-rust-next.
[1] https://lore.kernel.org/r/20260915-tyr-interfaces-v1-6-5d28f1f75aca@xxxxxxxxxxxxx
Signed-off-by: Daniel Almeida <daniel.almeida@xxxxxxxxxxxxx>
---
Daniel Almeida (7):
rust: io: split IoCapable into IoReadable and IoWritable
rust: io: split IoCopyable into IoCopyReadable and IoCopyWritable
rust: io: add read-only and write-only views
rust: io: project primitive accessors directly
rust: io: let I/O locations carry an access mode
rust: io: register: add `#[ro]` and `#[wo]` attributes
drm/tyr: mark read-only and write-only registers
drivers/gpu/drm/tyr/regs.rs | 77 ++++++++
rust/kernel/dma.rs | 29 +--
rust/kernel/io.rs | 416 +++++++++++++++++++++++++++++++++-----------
rust/kernel/io/access.rs | 76 ++++++++
rust/kernel/io/register.rs | 71 +++++++-
rust/kernel/pci/io.rs | 10 +-
rust/macros/io/register.rs | 34 +++-
7 files changed, 595 insertions(+), 118 deletions(-)
---
base-commit: 5a1b7121a6c4db6c0239d3ac3fd1c2bb33a40025
change-id: 20261015-io-access-modes-19ac2b0aa238
Best regards,
--
Daniel Almeida <daniel.almeida@xxxxxxxxxxxxx>