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

Gary Guo posted 10 patches 3 days, 6 hours ago
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(-)
[PATCH 00/10] rust: io: make register bases typed and remove relative registers
Posted by Gary Guo 3 days, 6 hours ago
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 <gary@garyguo.net>
---
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 <gary@garyguo.net>