On 2026-07-02 at 22:03 +1000, Pedro Yudi Honda <[email protected]> wrote... > From: Pedro Yudi Honda <[email protected]> > > In firmware/fwsec.rs, replace the following `transmute` traits with > their `zerocopy` equivalents: > > - `transmute::FromBytes` -> `zerocopy::FromBytes` > - `transmute::AsBytes` -> `zerocopy::IntoBytes` > - add `zerocopy::KnownLayout` where necessary
Argh, ok. It makes more sense when there are more things in the list :-) That said I'd also be ok without, but either is fine. Reviewed-by: Alistair Popple <[email protected]> > Update call sites accordingly. > > Signed-off-by: Pedro Yudi Honda <[email protected]> > --- > drivers/gpu/nova-core/firmware/fwsec.rs | 49 ++++++------------------- > 1 file changed, 12 insertions(+), 37 deletions(-) > > diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs > b/drivers/gpu/nova-core/firmware/fwsec.rs > index 95e0dd77746b..1b75cdc02256 100644 > --- a/drivers/gpu/nova-core/firmware/fwsec.rs > +++ b/drivers/gpu/nova-core/firmware/fwsec.rs > @@ -19,11 +19,7 @@ > self, > Device, // > }, > - prelude::*, > - transmute::{ > - AsBytes, > - FromBytes, // > - }, > + prelude::*, // > }; > > use crate::{ > @@ -49,26 +45,22 @@ > const NVFW_FALCON_APPIF_ID_DMEMMAPPER: u32 = 0x4; > > #[repr(C)] > -#[derive(Debug)] > +#[derive(Debug, FromBytes)] > struct FalconAppifHdrV1 { > version: u8, > header_size: u8, > entry_size: u8, > entry_count: u8, > } > -// SAFETY: Any byte sequence is valid for this struct. > -unsafe impl FromBytes for FalconAppifHdrV1 {} > > #[repr(C, packed)] > -#[derive(Debug)] > +#[derive(Debug, FromBytes)] > struct FalconAppifV1 { > id: u32, > dmem_base: u32, > } > -// SAFETY: Any byte sequence is valid for this struct. > -unsafe impl FromBytes for FalconAppifV1 {} > > -#[derive(Debug)] > +#[derive(Debug, FromBytes, IntoBytes, zerocopy_derive::KnownLayout)] > #[repr(C, packed)] > struct FalconAppifDmemmapperV3 { > signature: u32, > @@ -89,12 +81,8 @@ struct FalconAppifDmemmapperV3 { > ucode_cmd_mask1: u32, > multi_tgt_tbl: u32, > } > -// SAFETY: Any byte sequence is valid for this struct. > -unsafe impl FromBytes for FalconAppifDmemmapperV3 {} > -// SAFETY: This struct doesn't contain uninitialized bytes and doesn't have > interior mutability. > -unsafe impl AsBytes for FalconAppifDmemmapperV3 {} > > -#[derive(Debug)] > +#[derive(Debug, FromBytes, IntoBytes, zerocopy_derive::KnownLayout)] > #[repr(C, packed)] > struct ReadVbios { > ver: u32, > @@ -103,12 +91,8 @@ struct ReadVbios { > size: u32, > flags: u32, > } > -// SAFETY: Any byte sequence is valid for this struct. > -unsafe impl FromBytes for ReadVbios {} > -// SAFETY: This struct doesn't contain uninitialized bytes and doesn't have > interior mutability. > -unsafe impl AsBytes for ReadVbios {} > > -#[derive(Debug)] > +#[derive(Debug, FromBytes, IntoBytes, zerocopy_derive::KnownLayout)] > #[repr(C, packed)] > struct FrtsRegion { > ver: u32, > @@ -117,22 +101,15 @@ struct FrtsRegion { > size: u32, > ftype: u32, > } > -// SAFETY: Any byte sequence is valid for this struct. > -unsafe impl FromBytes for FrtsRegion {} > -// SAFETY: This struct doesn't contain uninitialized bytes and doesn't have > interior mutability. > -unsafe impl AsBytes for FrtsRegion {} > > const NVFW_FRTS_CMD_REGION_TYPE_FB: u32 = 2; > > #[repr(C, packed)] > +#[derive(FromBytes, IntoBytes, zerocopy_derive::KnownLayout)] > struct FrtsCmd { > read_vbios: ReadVbios, > frts_region: FrtsRegion, > } > -// SAFETY: Any byte sequence is valid for this struct. > -unsafe impl FromBytes for FrtsCmd {} > -// SAFETY: This struct doesn't contain uninitialized bytes and doesn't have > interior mutability. > -unsafe impl AsBytes for FrtsCmd {} > > const NVFW_FALCON_APPIF_DMEMMAPPER_CMD_FRTS: u32 = 0x15; > const NVFW_FALCON_APPIF_DMEMMAPPER_CMD_SB: u32 = 0x19; > @@ -151,11 +128,9 @@ pub(crate) enum FwsecCommand { > > /// A single signature that can be patched into a FWSEC image. > #[repr(transparent)] > +#[derive(FromBytes)] > pub(crate) struct Bcrt30Rsa3kSignature([u8; BCRT30_RSA3K_SIG_SIZE]); > > -/// SAFETY: A signature is just an array of bytes. > -unsafe impl FromBytes for Bcrt30Rsa3kSignature {} > - > impl From<[u8; BCRT30_RSA3K_SIG_SIZE]> for Bcrt30Rsa3kSignature { > fn from(sig: [u8; BCRT30_RSA3K_SIG_SIZE]) -> Self { > Self(sig) > @@ -228,7 +203,7 @@ fn new_fwsec(bios: &Vbios, cmd: FwsecCommand) -> > Result<Self> { > > let hdr = ucode > .get(hdr_offset..) > - .and_then(FalconAppifHdrV1::from_bytes_prefix) > + .and_then(|b| FalconAppifHdrV1::read_from_prefix(b).ok()) > .ok_or(EINVAL)? > .0; > > @@ -246,7 +221,7 @@ fn new_fwsec(bios: &Vbios, cmd: FwsecCommand) -> > Result<Self> { > > let app = ucode > .get(entry_offset..) > - .and_then(FalconAppifV1::from_bytes_prefix) > + .and_then(|b| FalconAppifV1::read_from_prefix(b).ok()) > .ok_or(EINVAL)? > .0; > > @@ -263,7 +238,7 @@ fn new_fwsec(bios: &Vbios, cmd: FwsecCommand) -> > Result<Self> { > > let dmem_mapper = ucode > .get_mut(dmem_mapper_offset..) > - .and_then(FalconAppifDmemmapperV3::from_bytes_mut_prefix) > + .and_then(|b| > FalconAppifDmemmapperV3::mut_from_prefix(b).ok()) > .ok_or(EINVAL)? > .0; > > @@ -281,7 +256,7 @@ fn new_fwsec(bios: &Vbios, cmd: FwsecCommand) -> > Result<Self> { > > let frts_cmd = ucode > .get_mut(frts_cmd_offset..) > - .and_then(FrtsCmd::from_bytes_mut_prefix) > + .and_then(|b| FrtsCmd::mut_from_prefix(b).ok()) > .ok_or(EINVAL)? > .0; > > -- > 2.34.1 >
