Re: [PATCH v3 2/2] gpu: nova-core: add boot42 support for next-gen GPUs

From: John Hubbard

Date: Wed Oct 29 2025 - 21:14:06 EST


On 10/29/25 6:07 PM, John Hubbard wrote:
On 10/29/25 6:01 PM, Timur Tabi wrote:
On Wed, 2025-10-29 at 17:35 -0700, John Hubbard wrote:
         // "Future" GPUs (some time after Rubin) will set `architecture_0`
         // to 0, and `architecture_1` to 1, and put the architecture details in
         // boot42 instead.

I don't want to kick a dead horse here, but aren't the architecture details already in boot42
for Turing?  I thought the whole point was that we don't need boot0 any more, and only Nouveau
has to worry about boot0 vs boot42.

Yes, but someone can still plug in a pre-Turing GPU and try to
boot up with nova-core.ko on the system.

So it's important to avoid getting into trouble in that case.

In fact, here's what I have staged for the next posting:

impl Spec {
fn new(bar: &Bar0) -> Result<Spec> {
// Some brief notes about boot0 and boot42, in chronological order:
//
// NV04 through Volta:
//
// Not supported by Nova. boot0 is necessary and sufficient to identify these GPUs.
// boot42 may not even exist on some of these GPUs.boot42
//
// Turing through Blackwell:
//
// Supported by both Nouveau and Nova. boot0 is still necessary and sufficient to
// identify these GPUs. boot42 exists on these GPUs but we don't need to use it.
//
// Rubin:
//
// Only supported by Nova. Need to use boot42 to fully identify these GPUs.
//
// "Future" (after Rubin) GPUs:
//
// Only supported by Nova. NV_PMC_BOOT's ARCH_0 (bits 28:24) will be zeroed out, and
// ARCH_1 (bit 8:8) will be set to 1, which will mean, "refer to NV_PMC_BOOT_42".

let boot0 = regs::NV_PMC_BOOT_0::read(bar);

if boot0.use_boot42_instead() {
Spec::try_from(regs::NV_PMC_BOOT_42::read(bar))
} else {
Spec::try_from(boot0)
}
}
}