Re: [PATCH v2 1/5] drm/nova: use `zerocopy` in firmware.rs

Alistair Popple <[email protected]>
Newsgroups dev.linux.lists.nova-gpu,org.freedesktop.lists.dri-devel,org.kernel.vger.rust-for-linux
Message-ID <[email protected]>
On 2026-07-02 at 22:03 +1000, Pedro Yudi Honda <[email protected]> wrote...
> From: Pedro Yudi Honda <[email protected]>
> 
> In firmware.rs, replace the following `transmute` traits with their
> `zerocopy` equivalents:
> 
> - `transmute::FromBytes` -> `zerocopy::FromBytes`
> 
> Update call sites accordingly.
> 
> Note that the module `elf` is untouched, as the bindings generated by
> bindgen do not implement `FromBytes` for the structs.

Also I believe this module is pretty temporary and going to go away.

Everything here is pretty mechanical though, and looks good to me so:

Reviewed-by: Alistair Popple <[email protected]>

> Signed-off-by: Pedro Yudi Honda <[email protected]>
> ---
>  drivers/gpu/nova-core/firmware.rs                  | 10 +++-------
>  drivers/gpu/nova-core/firmware/fwsec/bootloader.rs |  4 +++-
>  2 files changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firmware.rs
> index a94820a3b335..80ce0df244a8 100644
> --- a/drivers/gpu/nova-core/firmware.rs
> +++ b/drivers/gpu/nova-core/firmware.rs
> @@ -11,8 +11,7 @@
>      device,
>      firmware,
>      prelude::*,
> -    str::CString,
> -    transmute::FromBytes, //
> +    str::CString, //
>  };
>  
>  use crate::{
> @@ -347,7 +346,7 @@ fn no_patch_signature(self) -> FirmwareObject<F, Signed> {
>  
>  /// Header common to most firmware files.
>  #[repr(C)]
> -#[derive(Debug, Clone)]
> +#[derive(Debug, Clone, FromBytes)]
>  struct BinHdr {
>      /// Magic number, must be `0x10de`.
>      bin_magic: u32,
> @@ -363,9 +362,6 @@ struct BinHdr {
>      data_size: u32,
>  }
>  
> -// SAFETY: all bit patterns are valid for this type, and it doesn't use interior mutability.
> -unsafe impl FromBytes for BinHdr {}
> -
>  // A firmware blob starting with a `BinHdr`.
>  struct BinFirmware<'a> {
>      hdr: BinHdr,
> @@ -381,7 +377,7 @@ fn new(fw: &'a firmware::Firmware) -> Result<Self> {
>  
>          fw.get(0..size_of::<BinHdr>())
>              // Extract header.
> -            .and_then(BinHdr::from_bytes_copy)
> +            .and_then(|b| BinHdr::read_from_bytes(b).ok())
>              // Validate header.
>              .filter(|hdr| hdr.bin_magic == BIN_MAGIC)
>              .map(|hdr| Self { hdr, fw })
> diff --git a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs b/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs
> index d9fafd2eea5b..66b9f4d1b41c 100644
> --- a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs
> +++ b/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs
> @@ -25,6 +25,8 @@
>      },
>  };
>  
> +use zerocopy::FromBytes as _;
> +
>  use crate::{
>      driver::Bar0,
>      falcon::{
> @@ -150,7 +152,7 @@ pub(crate) fn new(
>          let hdr = fw
>              .data()
>              .get(0..size_of::<BinHdr>())
> -            .and_then(BinHdr::from_bytes_copy)
> +            .and_then(|b| BinHdr::read_from_bytes(b).ok())
>              .ok_or(EINVAL)?;
>  
>          let desc = {
> -- 
> 2.34.1
>
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.