Changes in v9: 1) Simplified the Revision updates, so that Revision's member fields can remain private (thanks to Alex Courbot).
2) Restore a missing documentation comment line for chipset(). 3) Removed the patch that changed from ENODEV to ENOTSUPP, and used ENODEV to mean "GPU is not supported", because the driver core expects that specific error code. 4) Rebased onto drm-rust-next, which already has patch 1/1 from v8, so that one no longer appears in v9. Changes in v8: 1) Added two new patches: convert the remaining ENODEV cases to ENOTSUPP, and add dev_err!() report for some (most) cases of unsupported GPUs. 2) Corrected some comments. 3) Added Joel's Reviewed-by, but not yet to the two new patches. Changes in v7: 1) Added a TODO to eventually remove the Default trait from Architecture. 2) Further refined the logic and comments for reading boot0, then boot42. Changes in v6: 1) Split out a separate patch for implementing Display for Spec. 2) Moved Spec implementation code to its proper location. 3) Significantly changed the use_boot42_instead() logic, and updated the comments accordingly. 4) Fixed the boot42 register and field values, which were wrong (and had not been exercised before). 5) Imported Revision, to save a few ::'s. 6) Rebased to the very latest drm-rust-next, which now includes the new "one 'use' item per line" updates. Changes in v5: Two fixes, both from Timur's review feedback (thanks!): 1) Updated both the cover letter, and patch 3 commit description, with the correct description of the future contents of NV_PMC_BOOT_0. 2) Removed a trailing "boot42" typo from a comment in the code. Changes in v4: 1) Simplified and improved the decision logic: reads both arch_0 and arch_1 fields in boot0, and skips the unnecessary is_nv04() logic as well. Thanks to Timur Tabi and Danilo for noticing these issues. 2) Added a patch to represent Architecture as a u8. This simplifies a few things. (Thanks to Alex Courbot. I added your Suggested-by to that patch.) 3) Enhanced the Revision type to do more, which simplifies the callers. (Thanks to Danilo.) Changes in v3: 1) Restored the Revision type as recommended by Danilo, but decoupled it from boot0. 2) Applied Alex Courbot's suggestion to use TryFrom<NV_PMC_BOOT_0/42> for Spec. 3) Reflowed the new comment documentation to 100 cols, to avoid wasting a few vertical lines. Changes in v2: 1) Restored the Spec type, and used that to encapsulate the subsequent boot42 enhancements. Thanks to Danilo Krummrich's feedback for that improvement. v1 cover letter (with typos fixed) 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. Also, remove the Revision type, because Revision is no longer valuable as a stand-alone type, because we only ever want the full information that Spec provides. This is based on today's drm-rust-next, which in turn is based on Linux 6.18-rc2. John Hubbard (4): gpu: nova-core: prepare Spec and Revision types for boot0/boot42 gpu: nova-core: make Architecture behave as a u8 type gpu: nova-core: add boot42 support for next-gen GPUs gpu: nova-core: provide a clear error report for unsupported GPUs drivers/gpu/nova-core/gpu.rs | 72 ++++++++++++++++++++++++++++++----- drivers/gpu/nova-core/regs.rs | 39 ++++++++++++++++--- 2 files changed, 97 insertions(+), 14 deletions(-) base-commit: 38b7cc448a5b6772cad2b853a011f507ad95306a -- 2.51.2
