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 >
