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