drivers/gpu/nova-core/vbios.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
Use the offset_of macro for each struct field, annotate the
`PmuLookupTableHeader` struct with `#[repr(C)]` attribute,
and add a TODO message to use FromBytes when available.
Signed-off-by: Rhys Lloyd <krakow20@gmail.com>
---
drivers/gpu/nova-core/vbios.rs | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs
index a77d7a4c8595..cedfcf3476bb 100644
--- a/drivers/gpu/nova-core/vbios.rs
+++ b/drivers/gpu/nova-core/vbios.rs
@@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> {
///
/// See the [`PmuLookupTable`] description for more information.
#[expect(dead_code)]
+#[repr(C)]
struct PmuLookupTableHeader {
version: u8,
header_len: u8,
@@ -901,16 +902,17 @@ struct PmuLookupTableHeader {
}
impl PmuLookupTableHeader {
+ // TODO[TRSM]: use FromBytes::from_bytes when it becomes available.
fn new(data: &[u8]) -> Result<Self> {
if data.len() < core::mem::size_of::<Self>() {
return Err(EINVAL);
}
Ok(PmuLookupTableHeader {
- version: data[0],
- header_len: data[1],
- entry_len: data[2],
- entry_count: data[3],
+ version: data[const { core::mem::offset_of!(PmuLookupTableHeader, version) }],
+ header_len: data[const { core::mem::offset_of!(PmuLookupTableHeader, header_len) }],
+ entry_len: data[const { core::mem::offset_of!(PmuLookupTableHeader, entry_len) }],
+ entry_count: data[const { core::mem::offset_of!(PmuLookupTableHeader, entry_count) }],
})
}
}
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105
prerequisite-patch-id: 6f9311de987d56f4313d5fbdd85ed8c48a44e78c
--
2.50.1
On Fri Jul 18, 2025 at 4:36 PM JST, Rhys Lloyd wrote:
> Use the offset_of macro for each struct field, annotate the
> `PmuLookupTableHeader` struct with `#[repr(C)]` attribute,
> and add a TODO message to use FromBytes when available.
>
> Signed-off-by: Rhys Lloyd <krakow20@gmail.com>
> ---
> drivers/gpu/nova-core/vbios.rs | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs
> index a77d7a4c8595..cedfcf3476bb 100644
> --- a/drivers/gpu/nova-core/vbios.rs
> +++ b/drivers/gpu/nova-core/vbios.rs
> @@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> {
> ///
> /// See the [`PmuLookupTable`] description for more information.
> #[expect(dead_code)]
> +#[repr(C)]
> struct PmuLookupTableHeader {
> version: u8,
> header_len: u8,
> @@ -901,16 +902,17 @@ struct PmuLookupTableHeader {
> }
>
> impl PmuLookupTableHeader {
> + // TODO[TRSM]: use FromBytes::from_bytes when it becomes available.
> fn new(data: &[u8]) -> Result<Self> {
> if data.len() < core::mem::size_of::<Self>() {
> return Err(EINVAL);
> }
>
> Ok(PmuLookupTableHeader {
> - version: data[0],
> - header_len: data[1],
> - entry_len: data[2],
> - entry_count: data[3],
> + version: data[const { core::mem::offset_of!(PmuLookupTableHeader, version) }],
> + header_len: data[const { core::mem::offset_of!(PmuLookupTableHeader, header_len) }],
> + entry_len: data[const { core::mem::offset_of!(PmuLookupTableHeader, entry_len) }],
> + entry_count: data[const { core::mem::offset_of!(PmuLookupTableHeader, entry_count) }],
This chunk does not apply - on nova-next PmuLookupTableHeader does not
seem to exist. I think I remember you split PmuLookupTableHeader in
another patch, so can you send all the relevant patches as a series that
applies cleanly on top of nova-next?
On 7/25/25 3:35 PM, Alexandre Courbot wrote: > This chunk does not apply - on nova-next PmuLookupTableHeader does not > seem to exist. I think I remember you split PmuLookupTableHeader in > another patch, so can you send all the relevant patches as a series that > applies cleanly on top of nova-next? If otherwise the series is ready, please wait for -rc1 to be out, and rebase on -rc1. Thanks, Danilo
On Fri, Jul 25, 2025 at 7:04 AM Danilo Krummrich <dakr@kernel.org> wrote: > > On 7/25/25 3:35 PM, Alexandre Courbot wrote: > > This chunk does not apply - on nova-next PmuLookupTableHeader does not > > seem to exist. I think I remember you split PmuLookupTableHeader in > > another patch, so can you send all the relevant patches as a series that > > applies cleanly on top of nova-next? > > If otherwise the series is ready, please wait for -rc1 to be out, and rebase on > -rc1. > > Thanks, > Danilo Strange that it does not apply. I'll figure out how to send a patch series and resend it without any changes.
Annotate the PmuLookupTableEntry with an `#[repr(C, packed)]` attribute.
Removes another magic number by making the struct the same size as
the data it needs to read, allowing the use of
`size_of::<PmuLookupTableEntry>()`
Signed-off-by: Rhys Lloyd <krakow20@gmail.com>
---
Changes in v2:
- get_data helper function renamed to data
Changes in v3:
- Change PmuLookupTableEntry.data back to u32
- Remove helper function
- Annotate `PmuLookupTableEntry` with `#[repr(C, packed)]`
---
drivers/gpu/nova-core/vbios.rs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs
index 5b5d9f38cbb3..4c8368946bd6 100644
--- a/drivers/gpu/nova-core/vbios.rs
+++ b/drivers/gpu/nova-core/vbios.rs
@@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> {
///
/// See the [`PmuLookupTable`] description for more information.
#[expect(dead_code)]
+#[repr(C, packed)]
struct PmuLookupTableEntry {
application_id: u8,
target_id: u8,
@@ -901,7 +902,7 @@ struct PmuLookupTableEntry {
impl PmuLookupTableEntry {
fn new(data: &[u8]) -> Result<Self> {
- if data.len() < 6 {
+ if data.len() < core::mem::size_of::<Self>() {
return Err(EINVAL);
}
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105
--
2.50.1
On Fri Jul 18, 2025 at 4:36 PM JST, Rhys Lloyd wrote: > Annotate the PmuLookupTableEntry with an `#[repr(C, packed)]` attribute. > Removes another magic number by making the struct the same size as > the data it needs to read, allowing the use of > `size_of::<PmuLookupTableEntry>()` > > Signed-off-by: Rhys Lloyd <krakow20@gmail.com> Looking good - I'll also push this one after a short grace period. Thanks!
12 is identical to the value of `size_of::<BitHeader>()`,
so use the latter instead.
Signed-off-by: Rhys Lloyd <krakow20@gmail.com>
---
Changes in v2:
- Added `#[repr(C)]` to `BitHeader`
---
drivers/gpu/nova-core/vbios.rs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs
index 5b5d9f38cbb3..912698308102 100644
--- a/drivers/gpu/nova-core/vbios.rs
+++ b/drivers/gpu/nova-core/vbios.rs
@@ -346,6 +346,7 @@ fn image_size_bytes(&self) -> usize {
/// [`FwSecBiosImage`].
#[derive(Debug, Clone, Copy)]
#[expect(dead_code)]
+#[repr(C)]
struct BitHeader {
/// 0h: BIT Header Identifier (BMP=0x7FFF/BIT=0xB8FF)
id: u16,
@@ -365,7 +366,7 @@ struct BitHeader {
impl BitHeader {
fn new(data: &[u8]) -> Result<Self> {
- if data.len() < 12 {
+ if data.len() < core::mem::size_of::<Self>() {
return Err(EINVAL);
}
base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105
--
2.50.1
On Fri Jul 18, 2025 at 4:36 PM JST, Rhys Lloyd wrote: > 12 is identical to the value of `size_of::<BitHeader>()`, > so use the latter instead. > > Signed-off-by: Rhys Lloyd <krakow20@gmail.com> Looking good - I'll push this to nova-next unless someone complains. Thanks!
© 2016 - 2026 Red Hat, Inc.