Alexandre Courbot
2025-Nov-13 08:03 UTC
[PATCH v7 4/4] gpu: nova-core: add boot42 support for next-gen GPUs
On Wed Nov 12, 2025 at 1:30 PM JST, John Hubbard wrote:> NVIDIA GPUs are moving away from using NV_PMC_BOOT_0 to contain > architecture and revision details, and will instead use NV_PMC_BOOT_42 > in the future. NV_PMC_BOOT_0 will contain a specific set of values > that will mean "go read NV_PMC_BOOT_42 instead". > > Change the selection logic in Nova so that it will claim Turing and > later GPUs. This will work for the foreseeable future, without any > further code changes here, because all NVIDIA GPUs are considered, from > the oldest supported on Linux (NV04), through the future GPUs. > > Add some comment documentation to explain, chronologically, how boot0 > and boot42 change with the GPU eras, and how that affects the selection > logic. > > Cc: Alexandre Courbot <acourbot at nvidia.com> > Cc: Danilo Krummrich <dakr at kernel.org> > Cc: Timur Tabi <ttabi at nvidia.com> > Signed-off-by: John Hubbard <jhubbard at nvidia.com>Love it, it's super simple now. :) <snip>> diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs > index 8c9af3c59708..81097e83c276 100644 > --- a/drivers/gpu/nova-core/regs.rs > +++ b/drivers/gpu/nova-core/regs.rs > @@ -41,14 +41,24 @@ > }); > > impl NV_PMC_BOOT_0 { > - /// Combines `architecture_0` and `architecture_1` to obtain the architecture of the chip. > - pub(crate) fn architecture(self) -> Result<Architecture> { > - Architecture::try_from( > - self.architecture_0() | (self.architecture_1() << Self::ARCHITECTURE_0_RANGE.len()), > - ) > + pub(crate) fn is_older_than_fermi(self) -> bool { > + // From https://github.com/NVIDIA/open-gpu-doc/tree/master/manuals : > + const NV_PMC_BOOT_0_ARCHITECTURE_GF100: u8 = 0xc; > + > + // Older chips left arch1 zeroed out. That, combined with an arch0 value that is less than > + // GF100, means "older than Fermi". > + self.architecture_1() == 0 && self.architecture_0() < NV_PMC_BOOT_0_ARCHITECTURE_GF100We could also keep `architecture` (making it private) and just test for `self.architecture < NV_PMC_BOOT_0_ARCHITECTURE_GF100`. John, I can do that when applying the series if you think that makes sense. Considering that the series has been extensively reviewed during the previous iterations, I think we can safely apply it for 6.19, so will proceed once I have an answer.
John Hubbard
2025-Nov-13 18:38 UTC
[PATCH v7 4/4] gpu: nova-core: add boot42 support for next-gen GPUs
On 11/13/25 12:03 AM, Alexandre Courbot wrote:> On Wed Nov 12, 2025 at 1:30 PM JST, John Hubbard wrote:...>> impl NV_PMC_BOOT_0 { >> - /// Combines `architecture_0` and `architecture_1` to obtain the architecture of the chip. >> - pub(crate) fn architecture(self) -> Result<Architecture> { >> - Architecture::try_from( >> - self.architecture_0() | (self.architecture_1() << Self::ARCHITECTURE_0_RANGE.len()), >> - ) >> + pub(crate) fn is_older_than_fermi(self) -> bool { >> + // From https://github.com/NVIDIA/open-gpu-doc/tree/master/manuals : >> + const NV_PMC_BOOT_0_ARCHITECTURE_GF100: u8 = 0xc; >> + >> + // Older chips left arch1 zeroed out. That, combined with an arch0 value that is less than >> + // GF100, means "older than Fermi". >> + self.architecture_1() == 0 && self.architecture_0() < NV_PMC_BOOT_0_ARCHITECTURE_GF100 > > We could also keep `architecture` (making it private) and just test for > `self.architecture < NV_PMC_BOOT_0_ARCHITECTURE_GF100`. John, I can do > that when applying the series if you think that makes sense.Yes, I think that's a good change to make, sounds good to me.> > Considering that the series has been extensively reviewed during the > previous iterations, I think we can safely apply it for 6.19, so will > proceed once I have an answer.Great! thanks, -- John Hubbard
John Hubbard
2025-Nov-14 01:54 UTC
[PATCH v7 4/4] gpu: nova-core: add boot42 support for next-gen GPUs
On 11/13/25 12:03 AM, Alexandre Courbot wrote:> On Wed Nov 12, 2025 at 1:30 PM JST, John Hubbard wrote:...>> impl NV_PMC_BOOT_0 { >> - /// Combines `architecture_0` and `architecture_1` to obtain the architecture of the chip. >> - pub(crate) fn architecture(self) -> Result<Architecture> { >> - Architecture::try_from( >> - self.architecture_0() | (self.architecture_1() << Self::ARCHITECTURE_0_RANGE.len()), >> - ) >> + pub(crate) fn is_older_than_fermi(self) -> bool { >> + // From https://github.com/NVIDIA/open-gpu-doc/tree/master/manuals : >> + const NV_PMC_BOOT_0_ARCHITECTURE_GF100: u8 = 0xc; >> + >> + // Older chips left arch1 zeroed out. That, combined with an arch0 value that is less than >> + // GF100, means "older than Fermi". >> + self.architecture_1() == 0 && self.architecture_0() < NV_PMC_BOOT_0_ARCHITECTURE_GF100 > > We could also keep `architecture` (making it private) and just test for > `self.architecture < NV_PMC_BOOT_0_ARCHITECTURE_GF100`. John, I can do > that when applying the series if you think that makes sense. > > Considering that the series has been extensively reviewed during the > previous iterations, I think we can safely apply it for 6.19, so will > proceed once I have an answer.Hi Alex, It turns out that this doesn't work well, because architecture() returns an Architecture, not a u8, and then we have to map it back and the whole things looks a lot worse: complexity on the screen that serves no purpose. After looking at several approaches, I've come full circle back to what this patch has. thanks, -- John Hubbard