[PATCH 05/12] gpu: nova-core: mm: Implement Alignable and Debug for VramAddress
Eliot Courtney <[email protected]> Wed, 05 Aug 2026 14:44:52 +0900
| Newsgroups | gmane.linux.documentation,gmane.linux.kernel.rust,gmane.linux.kernel,gmane.comp.video.dri.devel |
|---|---|
| Message-ID | <[email protected]> |
Later patches align VRAM addresses down to the PRAMIN window. Implement
`Alignable` trait for `VramAddress` and plus add a `ZERO` constant.
Also print the address in hex under `{:?}`, so it reads well in debug
output.
Signed-off-by: Eliot Courtney <[email protected]>
---
drivers/gpu/nova-core/mm.rs | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/nova-core/mm.rs b/drivers/gpu/nova-core/mm.rs
index dcd5e5e919bf..f9d80ffbe01d 100644
--- a/drivers/gpu/nova-core/mm.rs
+++ b/drivers/gpu/nova-core/mm.rs
@@ -10,7 +10,14 @@
ops, //
};
-use kernel::fmt;
+use kernel::{
+ fmt,
+ prelude::*,
+ ptr::{
+ Alignable,
+ Alignment, //
+ },
+};
/// Physical VRAM address in GPU video memory.
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
@@ -18,6 +25,9 @@
pub(crate) struct VramAddress(u64);
impl VramAddress {
+ /// The zero address.
+ pub(crate) const ZERO: Self = Self::from_raw(0);
+
/// Creates an address from a raw value.
pub(crate) const fn from_raw(addr: u64) -> Self {
Self(addr)
@@ -37,12 +47,28 @@ pub(crate) const fn checked_add(self, rhs: u64) -> Option<Self> {
}
}
+impl Alignable for VramAddress {
+ fn align_down(self, alignment: Alignment) -> Self {
+ Self::from_raw(self.into_raw().align_down(alignment))
+ }
+
+ fn align_up(self, alignment: Alignment) -> Option<Self> {
+ self.into_raw().align_up(alignment).map(Self::from_raw)
+ }
+}
+
impl LowerHex for VramAddress {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
LowerHex::fmt(&self.into_raw(), f)
}
}
+impl fmt::Debug for VramAddress {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ f.write_fmt(fmt!("{:#x}", self))
+ }
+}
+
impl ops::Add<u64> for VramAddress {
type Output = Self;
--
2.55.0