[PATCH 00/10] rust: io: make register bases typed and remove relative registers

Gary Guo <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,dev.linux.lists.driver-core,dev.linux.lists.nova-gpu,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci
Message-ID <[email protected]>
Currently registers work for all untyped I/O regions, which is not ideal.
It allows registers defined for device A to work for another device B and
there is no safeguarding at all.

Change this by requiring a base type for registers. `register!` can still
define registers on untyped `Region`s, although users would need to do so
explicitly and supply a concrete type.

This change makes it possible to use projection for relative registers;
relative registers can be implemented by defining new types for the I/O
subregions and just define registers for these subregion types like normal
registers.

This actually results in more ergnomic code for users of relative registers
(currently only nova-core), because non-array registers can be written to
with

    subregion_proj(bar).read(REG)
    subregion_proj(bar).write_reg(reg)

instead of

    bar.read(REG::of::<Subregion>())
    bar.write(WithBase::of::<Subregion>(), reg)

Signed-off-by: Gary Guo <[email protected]>
---
Gary Guo (10):
      rust: io: register: allow explicit base type specification
      gpu: nova-core: specify base type for registers
      drm/tyr: specify base type for registers
      samples: rust: pci: specify base type for registers
      rust: io: register: make register have a typed base
      rust: io: add static `cast()` method for views
      rust: io: add subregion method with compile-time check
      gpu: nova-core: use projection for PFALCON and PFALCON2 registers
      gpu: nova-core: convert hshub0 from relative register to projection
      rust: io: register: remove relative registers

 drivers/gpu/drm/tyr/driver.rs                      |   1 +
 drivers/gpu/drm/tyr/regs.rs                        |  42 ++
 drivers/gpu/nova-core/driver.rs                    |   1 +
 drivers/gpu/nova-core/falcon.rs                    | 158 +++---
 drivers/gpu/nova-core/falcon/fsp.rs                |  53 +-
 drivers/gpu/nova-core/falcon/gsp.rs                |  43 +-
 drivers/gpu/nova-core/falcon/hal/ga102.rs          |  39 +-
 drivers/gpu/nova-core/falcon/hal/tu102.rs          |   8 +-
 drivers/gpu/nova-core/falcon/sec2.rs               |  32 +-
 drivers/gpu/nova-core/fb/hal/gb100.rs              |  51 +-
 drivers/gpu/nova-core/fb/regs.rs                   |   4 +
 drivers/gpu/nova-core/firmware/fwsec/bootloader.rs |  11 +-
 drivers/gpu/nova-core/gsp/regs.rs                  |   4 +
 drivers/gpu/nova-core/regs.rs                      | 134 +++--
 drivers/gpu/nova-core/vbios.rs                     |  11 +-
 rust/kernel/io.rs                                  |  67 +++
 rust/kernel/io/register.rs                         | 539 +++------------------
 samples/rust/rust_driver_pci.rs                    |   4 +
 18 files changed, 461 insertions(+), 741 deletions(-)
---
base-commit: 3fe08b9796f36ef437ab9328e7dd1e5ff2d66603
change-id: 20260721-typed_register-176eab3abee7

Best regards,
--  
Gary Guo <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.