public inbox for linux-doc@vger.kernel.org
 help / color / mirror / Atom feed
From: "Alexandre Courbot" <acourbot@nvidia.com>
To: "Eliot Courtney" <ecourtney@nvidia.com>
Cc: "Danilo Krummrich" <dakr@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Trevor Gross" <tmgross@umich.edu>,
	"John Hubbard" <jhubbard@nvidia.com>,
	"Alistair Popple" <apopple@nvidia.com>,
	"Joel Fernandes" <joelagnelf@nvidia.com>,
	"Timur Tabi" <ttabi@nvidia.com>, "Zhi Wang" <zhiw@nvidia.com>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	linux-riscv@lists.infradead.org, linux-doc@vger.kernel.org,
	rust-for-linux@vger.kernel.org
Subject: Re: [PATCH 7/8] gpu: nova-core: convert falcon registers to kernel register macro
Date: Thu, 19 Mar 2026 23:34:24 +0900	[thread overview]
Message-ID: <DH6U0CO238C0.MHQ7TUBQTA9L@nvidia.com> (raw)
In-Reply-To: <DH6IJKX25H7H.28NWD4KJSXX73@nvidia.com>

On Thu Mar 19, 2026 at 2:35 PM JST, Eliot Courtney wrote:
> On Wed Mar 18, 2026 at 5:06 PM JST, Alexandre Courbot wrote:
>> Convert all PFALCON, PFALCON2 and PRISCV registers to use the kernel's
>> register macro and update the code accordingly.
>>
>> Because they rely on the same types to implement relative registers,
>> they need to be updated in lockstep.
>>
>> nova-core's local register macro is now unused, so remove it.
>>
>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>> ---
>>  drivers/gpu/nova-core/falcon.rs                    | 333 +++++-----
>>  drivers/gpu/nova-core/falcon/gsp.rs                |  22 +-
>>  drivers/gpu/nova-core/falcon/hal/ga102.rs          |  55 +-
>>  drivers/gpu/nova-core/falcon/hal/tu102.rs          |  12 +-
>>  drivers/gpu/nova-core/falcon/sec2.rs               |  17 +-
>>  drivers/gpu/nova-core/firmware/fwsec/bootloader.rs |  19 +-
>>  drivers/gpu/nova-core/regs.rs                      | 350 +++++-----
>>  drivers/gpu/nova-core/regs/macros.rs               | 739 ---------------------
>>  8 files changed, 421 insertions(+), 1126 deletions(-)
>>
>> diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon.rs
>> index 4721865f59d9..90afef40acd0 100644
>> --- a/drivers/gpu/nova-core/falcon.rs
>> +++ b/drivers/gpu/nova-core/falcon.rs
>> @@ -14,9 +14,14 @@
>>          DmaMask, //
>>      },
>>      io::{
>> -        poll::read_poll_timeout, //
>> +        poll::read_poll_timeout,
>> +        register::{
>> +            RegisterBase,
>> +            WithBase, //
>> +        },
>>          Io,
>>      },
>> +    num::Bounded,
>>      prelude::*,
>>      sync::aref::ARef,
>>      time::Delta,
>> @@ -33,7 +38,6 @@
>>          IntoSafeCast, //
>>      },
>>      regs,
>> -    regs::macros::RegisterBase, //
>>  };
>>  
>>  pub(crate) mod gsp;
>> @@ -44,11 +48,14 @@
>>  pub(crate) const MEM_BLOCK_ALIGNMENT: usize = 256;
>>  
>>  // TODO[FPRI]: Replace with `ToPrimitive`.
>> -macro_rules! impl_from_enum_to_u8 {
>> -    ($enum_type:ty) => {
>> -        impl From<$enum_type> for u8 {
>> +macro_rules! impl_from_enum_to_bounded {
>> +    ($enum_type:ty, $length:literal) => {
>> +        impl From<$enum_type> for Bounded<u32, $length> {
>>              fn from(value: $enum_type) -> Self {
>> -                value as u8
>> +                // Shift the value left by the number of unused bits.
>> +                let b = Bounded::<u32, 32>::from((value as u32) << (32 - $length));
>> +                // Shift back right to create a `Bounded` of the expected width.
>> +                b.shr::<{ 32 - $length }, $length>()
>>              }
>>          }
>>      };
>
> This can silently truncate stuff if we typo the wrong bounded size.
> Any reason not to use `Bounded::from_expr(value as u32)` for this?

`from_expr` is tricky to use because it assumes the compiler optimizer
has enough information to guarantee that the set of possible values will
fit into the `Bounded` - and drops a very obscure build-time error if
the proof cannot be established. So it is really for obvious cases like
`if x < 0x10 { Bounded::<u8, 4>::new(x) }`.

Here we are converting from an enum, and in my experience `from_expr`
does work, but I still prefer to avoid it if we can. The bit-shake
method is another way of obtaining the right `Bounded` but in this case
you are right we can lose data - although the use is purely local, and
temporary until the `TryFrom` and `Into` derive macros [1] are
available.

The "correct" way to do this meanwhile would be to generate a match
statement handling all valid values, but this is a bit more intrusive
for something that is temporary.

[1] https://lore.kernel.org/all/20260129-try-from-into-macro-v5-0-dd011008118c@gmail.com/

>
>> diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs
>> index 4ac4e9126db8..08d9a9697adc 100644
>> --- a/drivers/gpu/nova-core/regs.rs
>> +++ b/drivers/gpu/nova-core/regs.rs
>> @@ -1,13 +1,10 @@
>>  // SPDX-License-Identifier: GPL-2.0
>>  
>> -// Required to retain the original register names used by OpenRM, which are all capital snake case
>> -// but are mapped to types.
>> -#![allow(non_camel_case_types)]
>> -
>> -#[macro_use]
>> -pub(crate) mod macros;
>> -
>>  use kernel::{
>> +    io::{
>> +        register::WithBase,
>> +        Io, //
>> +    },
>>      prelude::*,
>>      time, //
>>  };
>> @@ -314,60 +311,147 @@ pub(crate) fn vga_workspace_addr(self) -> Option<u64> {
>>  
>>  // PFALCON
>>  
>> -register!(NV_PFALCON_FALCON_IRQSCLR @ PFalconBase[0x00000004] {
>> -    4:4     halt as bool;
>> -    6:6     swgen0 as bool;
>> -});
>> +nv_reg! {
>> +    NV_PFALCON_FALCON_IRQSCLR @ PFalconBase + 0x00000004 {
>> +        4:4     halt => bool;
>> +        6:6     swgen0 => bool;
>> +    }
>>  
>> -register!(NV_PFALCON_FALCON_MAILBOX0 @ PFalconBase[0x00000040] {
>> -    31:0    value as u32;
>> -});
>> +    NV_PFALCON_FALCON_MAILBOX0 @ PFalconBase + 0x00000040 {
>> +        31:0    value => u32;
>> +    }
>>  
>> -register!(NV_PFALCON_FALCON_MAILBOX1 @ PFalconBase[0x00000044] {
>> -    31:0    value as u32;
>> -});
>> +    NV_PFALCON_FALCON_MAILBOX1 @ PFalconBase + 0x00000044 {
>> +        31:0    value => u32;
>> +    }
>>  
>> -// Used to store version information about the firmware running
>> -// on the Falcon processor.
>> -register!(NV_PFALCON_FALCON_OS @ PFalconBase[0x00000080] {
>> -    31:0    value as u32;
>> -});
>> +    /// Used to store version information about the firmware running
>> +    /// on the Falcon processor.
>> +    NV_PFALCON_FALCON_OS @ PFalconBase + 0x00000080 {
>> +        31:0    value => u32;
>> +    }
>>  
>> -register!(NV_PFALCON_FALCON_RM @ PFalconBase[0x00000084] {
>> -    31:0    value as u32;
>> -});
>> +    NV_PFALCON_FALCON_RM @ PFalconBase + 0x00000084 {
>> +        31:0    value => u32;
>> +    }
>>  
>> -register!(NV_PFALCON_FALCON_HWCFG2 @ PFalconBase[0x000000f4] {
>> -    10:10   riscv as bool;
>> -    12:12   mem_scrubbing as bool, "Set to 0 after memory scrubbing is completed";
>> -    31:31   reset_ready as bool, "Signal indicating that reset is completed (GA102+)";
>> -});
>> +    NV_PFALCON_FALCON_HWCFG2 @ PFalconBase + 0x000000f4 {
>> +        10:10   riscv => bool;
>> +        /// Set to 0 after memory scrubbing is completed.
>> +        12:12   mem_scrubbing => bool;
>> +        /// Signal indicating that reset is completed (GA102+).
>> +        31:31   reset_ready => bool;
>> +    }
>>  
>> -impl NV_PFALCON_FALCON_HWCFG2 {
>> -    /// Returns `true` if memory scrubbing is completed.
>> -    pub(crate) fn mem_scrubbing_done(self) -> bool {
>> -        !self.mem_scrubbing()
>> +    NV_PFALCON_FALCON_CPUCTL @ PFalconBase + 0x00000100 {
>> +        1:1     startcpu => bool;
>> +        4:4     halted => bool;
>> +        6:6     alias_en => bool;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_BOOTVEC @ PFalconBase + 0x00000104 {
>> +        31:0    value => u32;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_DMACTL @ PFalconBase + 0x0000010c {
>> +        0:0     require_ctx => bool;
>> +        1:1     dmem_scrubbing => bool;
>> +        2:2     imem_scrubbing => bool;
>> +        6:3     dmaq_num;
>> +        7:7     secure_stat => bool;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_DMATRFBASE @ PFalconBase + 0x00000110 {
>> +        31:0    base => u32;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_DMATRFMOFFS @ PFalconBase + 0x00000114 {
>> +        23:0    offs;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_DMATRFCMD @ PFalconBase + 0x00000118 {
>> +        0:0     full => bool;
>> +        1:1     idle => bool;
>> +        3:2     sec;
>> +        4:4     imem => bool;
>> +        5:5     is_write => bool;
>> +        10:8    size ?=> DmaTrfCmdSize;
>> +        14:12   ctxdma;
>> +        16:16   set_dmtag;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_DMATRFFBOFFS @ PFalconBase + 0x0000011c {
>> +        31:0    offs => u32;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_DMATRFBASE1 @ PFalconBase + 0x00000128 {
>> +        8:0     base;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_HWCFG1 @ PFalconBase + 0x0000012c {
>> +        /// Core revision.
>> +        3:0     core_rev ?=> FalconCoreRev;
>> +        /// Security model.
>> +        5:4     security_model ?=> FalconSecurityModel;
>> +        /// Core revision subversion.
>> +        7:6     core_rev_subversion => FalconCoreRevSubversion;
>> +    }
>> +
>> +    NV_PFALCON_FALCON_CPUCTL_ALIAS @ PFalconBase + 0x00000130 {
>> +        1:1     startcpu => bool;
>> +    }
>> +
>> +    /// IMEM access control register. Up to 4 ports are available for IMEM access.
>> +    NV_PFALCON_FALCON_IMEMC[4, stride = 16] @ PFalconBase + 0x00000180 {
>> +        /// IMEM block and word offset.
>> +        15:0      offs;
>> +        /// Auto-increment on write.
>> +        24:24     aincw => bool;
>> +        /// Access secure IMEM.
>> +        28:28     secure => bool;
>> +    }
>> +
>> +    /// IMEM data register. Reading/writing this register accesses IMEM at the address
>> +    /// specified by the corresponding IMEMC register.
>> +    NV_PFALCON_FALCON_IMEMD[4, stride = 16] @ PFalconBase + 0x00000184 {
>> +        31:0      data;
>> +    }
>> +
>> +    /// IMEM tag register. Used to set the tag for the current IMEM block.
>> +    NV_PFALCON_FALCON_IMEMT[4, stride = 16] @ PFalconBase + 0x00000188 {
>> +        15:0      tag;
>> +    }
>> +
>> +    /// DMEM access control register. Up to 8 ports are available for DMEM access.
>> +    NV_PFALCON_FALCON_DMEMC[8, stride = 8] @ PFalconBase + 0x000001c0 {
>> +        /// DMEM block and word offset.
>> +        15:0      offs;
>> +        /// Auto-increment on write.
>> +        24:24     aincw => bool;
>> +    }
>> +
>> +    /// DMEM data register. Reading/writing this register accesses DMEM at the address
>> +    /// specified by the corresponding DMEMC register.
>> +    NV_PFALCON_FALCON_DMEMD[8, stride = 8] @ PFalconBase + 0x000001c4 {
>> +        31:0      data;
>> +    }
>> +
>> +    /// Actually known as `NV_PSEC_FALCON_ENGINE` and `NV_PGSP_FALCON_ENGINE` depending on the
>> +    /// falcon instance.
>> +    NV_PFALCON_FALCON_ENGINE @ PFalconBase + 0x000003c0 {
>> +        0:0     reset => bool;
>> +    }
>> +
>> +    NV_PFALCON_FBIF_TRANSCFG[8] @ PFalconBase + 0x00000600 {
>> +        1:0     target ?=> FalconFbifTarget;
>> +        2:2     mem_type => FalconFbifMemType;
>> +    }
>> +
>> +    NV_PFALCON_FBIF_CTL @ PFalconBase + 0x00000624 {
>> +        7:7     allow_phys_no_ctx => bool;
>>      }
>>  }
>>  
>> -register!(NV_PFALCON_FALCON_CPUCTL @ PFalconBase[0x00000100] {
>> -    1:1     startcpu as bool;
>> -    4:4     halted as bool;
>> -    6:6     alias_en as bool;
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_BOOTVEC @ PFalconBase[0x00000104] {
>> -    31:0    value as u32;
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_DMACTL @ PFalconBase[0x0000010c] {
>> -    0:0     require_ctx as bool;
>> -    1:1     dmem_scrubbing as bool;
>> -    2:2     imem_scrubbing as bool;
>> -    6:3     dmaq_num as u8;
>> -    7:7     secure_stat as bool;
>> -});
>> -
>>  impl NV_PFALCON_FALCON_DMACTL {
>>      /// Returns `true` if memory scrubbing is completed.
>>      pub(crate) fn mem_scrubbing_done(self) -> bool {
>> @@ -375,147 +459,81 @@ pub(crate) fn mem_scrubbing_done(self) -> bool {
>>      }
>>  }
>>  
>> -register!(NV_PFALCON_FALCON_DMATRFBASE @ PFalconBase[0x00000110] {
>> -    31:0    base as u32;
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_DMATRFMOFFS @ PFalconBase[0x00000114] {
>> -    23:0    offs as u32;
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_DMATRFCMD @ PFalconBase[0x00000118] {
>> -    0:0     full as bool;
>> -    1:1     idle as bool;
>> -    3:2     sec as u8;
>> -    4:4     imem as bool;
>> -    5:5     is_write as bool;
>> -    10:8    size as u8 ?=> DmaTrfCmdSize;
>> -    14:12   ctxdma as u8;
>> -    16:16   set_dmtag as u8;
>> -});
>> -
>>  impl NV_PFALCON_FALCON_DMATRFCMD {
>>      /// Programs the `imem` and `sec` fields for the given FalconMem
>>      pub(crate) fn with_falcon_mem(self, mem: FalconMem) -> Self {
>> -        self.set_imem(mem != FalconMem::Dmem)
>> -            .set_sec(if mem == FalconMem::ImemSecure { 1 } else { 0 })
>> +        let this = self.with_imem(mem != FalconMem::Dmem);
>> +
>> +        match mem {
>> +            FalconMem::ImemSecure => this.with_const_sec::<1>(),
>> +            _ => this.with_const_sec::<0>(),
>> +        }
>>      }
>>  }
>>  
>> -register!(NV_PFALCON_FALCON_DMATRFFBOFFS @ PFalconBase[0x0000011c] {
>> -    31:0    offs as u32;
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_DMATRFBASE1 @ PFalconBase[0x00000128] {
>> -    8:0     base as u16;
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_HWCFG1 @ PFalconBase[0x0000012c] {
>> -    3:0     core_rev as u8 ?=> FalconCoreRev, "Core revision";
>> -    5:4     security_model as u8 ?=> FalconSecurityModel, "Security model";
>> -    7:6     core_rev_subversion as u8 ?=> FalconCoreRevSubversion, "Core revision subversion";
>> -});
>> -
>> -register!(NV_PFALCON_FALCON_CPUCTL_ALIAS @ PFalconBase[0x00000130] {
>> -    1:1     startcpu as bool;
>> -});
>> -
>> -// IMEM access control register. Up to 4 ports are available for IMEM access.
>> -register!(NV_PFALCON_FALCON_IMEMC @ PFalconBase[0x00000180[4; 16]] {
>> -    15:0      offs as u16, "IMEM block and word offset";
>> -    24:24     aincw as bool, "Auto-increment on write";
>> -    28:28     secure as bool, "Access secure IMEM";
>> -});
>> -
>> -// IMEM data register. Reading/writing this register accesses IMEM at the address
>> -// specified by the corresponding IMEMC register.
>> -register!(NV_PFALCON_FALCON_IMEMD @ PFalconBase[0x00000184[4; 16]] {
>> -    31:0      data as u32;
>> -});
>> -
>> -// IMEM tag register. Used to set the tag for the current IMEM block.
>> -register!(NV_PFALCON_FALCON_IMEMT @ PFalconBase[0x00000188[4; 16]] {
>> -    15:0      tag as u16;
>> -});
>> -
>> -// DMEM access control register. Up to 8 ports are available for DMEM access.
>> -register!(NV_PFALCON_FALCON_DMEMC @ PFalconBase[0x000001c0[8; 8]] {
>> -    15:0      offs as u16, "DMEM block and word offset";
>> -    24:24     aincw as bool, "Auto-increment on write";
>> -});
>> -
>> -// DMEM data register. Reading/writing this register accesses DMEM at the address
>> -// specified by the corresponding DMEMC register.
>> -register!(NV_PFALCON_FALCON_DMEMD @ PFalconBase[0x000001c4[8; 8]] {
>> -    31:0      data as u32;
>> -});
>> -
>> -// Actually known as `NV_PSEC_FALCON_ENGINE` and `NV_PGSP_FALCON_ENGINE` depending on the falcon
>> -// instance.
>> -register!(NV_PFALCON_FALCON_ENGINE @ PFalconBase[0x000003c0] {
>> -    0:0     reset as bool;
>> -});
>> -
>>  impl NV_PFALCON_FALCON_ENGINE {
>>      /// Resets the falcon
>>      pub(crate) fn reset_engine<E: FalconEngine>(bar: &Bar0) {
>> -        Self::read(bar, &E::ID).set_reset(true).write(bar, &E::ID);
>> +        bar.update(Self::of::<E>(), |r| r.with_reset(true));
>>  
>>          // TIMEOUT: falcon engine should not take more than 10us to reset.
>>          time::delay::fsleep(time::Delta::from_micros(10));
>>  
>> -        Self::read(bar, &E::ID).set_reset(false).write(bar, &E::ID);
>> +        bar.update(Self::of::<E>(), |r| r.with_reset(false));
>>      }
>>  }
>>  
>> -register!(NV_PFALCON_FBIF_TRANSCFG @ PFalconBase[0x00000600[8]] {
>> -    1:0     target as u8 ?=> FalconFbifTarget;
>> -    2:2     mem_type as bool => FalconFbifMemType;
>> -});
>> -
>> -register!(NV_PFALCON_FBIF_CTL @ PFalconBase[0x00000624] {
>> -    7:7     allow_phys_no_ctx as bool;
>> -});
>> +impl NV_PFALCON_FALCON_HWCFG2 {
>> +    /// Returns `true` if memory scrubbing is completed.
>> +    pub(crate) fn mem_scrubbing_done(self) -> bool {
>> +        !self.mem_scrubbing()
>> +    }
>> +}
>>  
>>  /* PFALCON2 */
>>  
>> -register!(NV_PFALCON2_FALCON_MOD_SEL @ PFalcon2Base[0x00000180] {
>> -    7:0     algo as u8 ?=> FalconModSelAlgo;
>> -});
>> +nv_reg! {
>> +    NV_PFALCON2_FALCON_MOD_SEL @ PFalcon2Base + 0x00000180 {
>> +        7:0     algo ?=> FalconModSelAlgo;
>> +    }
>>  
>> -register!(NV_PFALCON2_FALCON_BROM_CURR_UCODE_ID @ PFalcon2Base[0x00000198] {
>> -    7:0    ucode_id as u8;
>> -});
>> +    NV_PFALCON2_FALCON_BROM_CURR_UCODE_ID @ PFalcon2Base + 0x00000198 {
>> +        7:0    ucode_id => u8;
>> +    }
>>  
>> -register!(NV_PFALCON2_FALCON_BROM_ENGIDMASK @ PFalcon2Base[0x0000019c] {
>> -    31:0    value as u32;
>> -});
>> +    NV_PFALCON2_FALCON_BROM_ENGIDMASK @ PFalcon2Base + 0x0000019c {
>> +        31:0    value => u32;
>> +    }
>>  
>> -// OpenRM defines this as a register array, but doesn't specify its size and only uses its first
>> -// element. Be conservative until we know the actual size or need to use more registers.
>> -register!(NV_PFALCON2_FALCON_BROM_PARAADDR @ PFalcon2Base[0x00000210[1]] {
>> -    31:0    value as u32;
>> -});
>> +    /// OpenRM defines this as a register array, but doesn't specify its size and only uses its
>> +    /// first element. Be conservative until we know the actual size or need to use more registers.
>> +    NV_PFALCON2_FALCON_BROM_PARAADDR[1] @ PFalcon2Base + 0x00000210 {
>> +        31:0    value => u32;
>> +    }
>> +}
>>  
>>  // PRISCV
>>  
>> -// RISC-V status register for debug (Turing and GA100 only).
>> -// Reflects current RISC-V core status.
>> -register!(NV_PRISCV_RISCV_CORE_SWITCH_RISCV_STATUS @ PFalcon2Base[0x00000240] {
>> -    0:0     active_stat as bool, "RISC-V core active/inactive status";
>> -});
>> -
>>  // GA102 and later
>> -register!(NV_PRISCV_RISCV_CPUCTL @ PFalcon2Base[0x00000388] {
>> -    0:0     halted as bool;
>> -    7:7     active_stat as bool;
>> -});
>> +nv_reg! {
>> +    /// RISC-V status register for debug (Turing and GA100 only).
>> +    /// Reflects current RISC-V core status.
>> +    NV_PRISCV_RISCV_CORE_SWITCH_RISCV_STATUS @ PFalcon2Base + 0x00000240 {
>> +        /// RISC-V core active/inactive status.
>> +        0:0     active_stat => bool;
>> +    }
>
> The above comment says "GA102 and later" but right after it has
> "Turing and GA100 only" which seems incongruous.

Right, this comment was for `NV_PRISCV_RISCV_CPUCTL` but it likely had a
copy/paste accident.

  reply	other threads:[~2026-03-19 14:34 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-18  8:05 [PATCH 0/8] gpu: nova-core: convert registers to use the kernel register macro Alexandre Courbot
2026-03-18  8:05 ` [PATCH 1/8] gpu: nova-core: convert PMC registers to " Alexandre Courbot
2026-03-18 13:28   ` Gary Guo
2026-03-19 14:39     ` Alexandre Courbot
2026-03-19  1:42   ` Eliot Courtney
2026-03-19  2:07     ` Alexandre Courbot
2026-03-19  2:16       ` Eliot Courtney
2026-03-19 14:18         ` Alexandre Courbot
2026-03-18  8:06 ` [PATCH 2/8] gpu: nova-core: convert PBUS " Alexandre Courbot
2026-03-19  1:43   ` Eliot Courtney
2026-03-18  8:06 ` [PATCH 3/8] gpu: nova-core: convert PFB " Alexandre Courbot
2026-03-19  1:51   ` Eliot Courtney
2026-03-18  8:06 ` [PATCH 4/8] gpu: nova-core: convert GC6 " Alexandre Courbot
2026-03-19  2:07   ` Eliot Courtney
2026-03-19 14:19     ` Alexandre Courbot
2026-03-18  8:06 ` [PATCH 5/8] gpu: nova-core: convert FUSE " Alexandre Courbot
2026-03-19  2:17   ` Eliot Courtney
2026-03-19 14:24     ` Alexandre Courbot
2026-03-18  8:06 ` [PATCH 6/8] gpu: nova-core: convert PDISP " Alexandre Courbot
2026-03-19  2:18   ` Eliot Courtney
2026-03-18  8:06 ` [PATCH 7/8] gpu: nova-core: convert falcon " Alexandre Courbot
2026-03-19  5:35   ` Eliot Courtney
2026-03-19 14:34     ` Alexandre Courbot [this message]
2026-03-18  8:06 ` [PATCH 8/8] Documentation: nova: remove register abstraction task Alexandre Courbot
2026-03-19  2:20   ` Eliot Courtney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DH6U0CO238C0.MHQ7TUBQTA9L@nvidia.com \
    --to=acourbot@nvidia.com \
    --cc=a.hindborg@kernel.org \
    --cc=airlied@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=apopple@nvidia.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun@kernel.org \
    --cc=dakr@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=ecourtney@nvidia.com \
    --cc=gary@garyguo.net \
    --cc=jhubbard@nvidia.com \
    --cc=joelagnelf@nvidia.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=lossin@kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tmgross@umich.edu \
    --cc=ttabi@nvidia.com \
    --cc=tzimmermann@suse.de \
    --cc=zhiw@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox