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) } }
}

Reply via email to