Replace bounded_enum! for Architecture with TryFrom and Into using the shared convert helper. Keep the six discriminants, Bounded<u32, 6> input and output, and Error/EINVAL on invalid inputs.
Use From and Into for FalconCoreRevSubversion, which covers every value of Bounded<u32, 2>. Its existing infallible conversion and blanket TryFrom error type remain unchanged. Leave other register enums and Chipset conversion behavior in place. This exercises both fallible and exhaustive conversions in actual register field users without changing register accesses or GPU initialization logic. Link: https://lore.kernel.org/rust-for-linux/[email protected]/ Signed-off-by: Kaiqi Guo <[email protected]> --- drivers/gpu/nova-core/falcon.rs | 19 +++++++++---------- drivers/gpu/nova-core/gpu.rs | 22 ++++++++++------------ 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon.rs index 65cb12d26e2b..15bbbda7df28 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -59,16 +59,15 @@ pub(crate) enum FalconCoreRev with TryFrom<Bounded<u32, 4>> { } } -bounded_enum! { - /// Revision subversion number of a falcon core, used in the - /// [`crate::regs::NV_PFALCON_FALCON_HWCFG1`] register. - #[derive(Debug, Copy, Clone)] - pub(crate) enum FalconCoreRevSubversion with From<Bounded<u32, 2>> { - Subversion0 = 0, - Subversion1 = 1, - Subversion2 = 2, - Subversion3 = 3, - } +/// Revision subversion number of a falcon core, used in the +/// [`crate::regs::NV_PFALCON_FALCON_HWCFG1`] register. +#[derive(Debug, Copy, Clone, kernel::macros::From, kernel::macros::Into)] +#[convert(Bounded<u32, 2>)] +pub(crate) enum FalconCoreRevSubversion { + Subversion0 = 0, + Subversion1 = 1, + Subversion2 = 2, + Subversion3 = 3, } bounded_enum! { diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index fd1414004dd0..66249bb5b369 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -14,7 +14,6 @@ }; use crate::{ - bounded_enum, driver::Bar0, falcon::{ gsp::Gsp as GspFalcon, @@ -155,17 +154,16 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { } } -bounded_enum! { - /// Enum representation of the GPU generation. - #[derive(fmt::Debug, Copy, Clone)] - pub(crate) enum Architecture with TryFrom<Bounded<u32, 6>> { - Turing = 0x16, - Ampere = 0x17, - Hopper = 0x18, - Ada = 0x19, - BlackwellGB10x = 0x1a, - BlackwellGB20x = 0x1b, - } +/// Enum representation of the GPU generation. +#[derive(fmt::Debug, Copy, Clone, kernel::macros::TryFrom, kernel::macros::Into)] +#[convert(Bounded<u32, 6>)] +pub(crate) enum Architecture { + Turing = 0x16, + Ampere = 0x17, + Hopper = 0x18, + Ada = 0x19, + BlackwellGB10x = 0x1a, + BlackwellGB20x = 0x1b, } #[derive(Clone, Copy)]
