drivers/gpu/nova-core/firmware/fwsec/bootloader.rs
Source file repositories/reference/linux-study-clean/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/nova-core/firmware/fwsec/bootloader.rs- Extension
.rs- Size
- 12304 bytes
- Lines
- 351
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
struct BootloaderDescstruct BootloaderDmemDescV2
Annotated Snippet
struct BootloaderDesc {
/// Starting tag of bootloader.
start_tag: u32,
/// DMEM load offset - unused here as we always load at offset `0`.
_dmem_load_off: u32,
/// Offset of code section in the image. Unused as there is only one section in the bootloader
/// binary.
_code_off: u32,
/// Size of code section in the image.
code_size: u32,
/// Offset of data section in the image. Unused as we build the data section ourselves.
_data_off: u32,
/// Size of data section in the image. Unused as we build the data section ourselves.
_data_size: u32,
}
// SAFETY: any byte sequence is valid for this struct.
unsafe impl FromBytes for BootloaderDesc {}
/// Structure used by the boot-loader to load the rest of the code.
///
/// This has to be filled by the GPU driver and copied into DMEM at offset
/// [`BootloaderDesc.dmem_load_off`].
#[repr(C, packed)]
#[derive(Debug, Clone)]
struct BootloaderDmemDescV2 {
/// Reserved, should always be first element.
reserved: [u32; 4],
/// 16B signature for secure code, 0s if no secure code.
signature: [u32; 4],
/// DMA context used by the bootloader while loading code/data.
ctx_dma: u32,
/// 256B-aligned physical FB address where code is located.
code_dma_base: u64,
/// Offset from `code_dma_base` where the non-secure code is located.
///
/// Also used as destination IMEM offset of non-secure code as the DMA firmware object is
/// expected to be a mirror image of its loaded state.
///
/// Must be multiple of 256.
non_sec_code_off: u32,
/// Size of the non-secure code part.
non_sec_code_size: u32,
/// Offset from `code_dma_base` where the secure code is located (must be multiple of 256).
///
/// Also used as destination IMEM offset of secure code as the DMA firmware object is expected
/// to be a mirror image of its loaded state.
///
/// Must be multiple of 256.
sec_code_off: u32,
/// Size of the secure code part.
sec_code_size: u32,
/// Code entry point invoked by the bootloader after code is loaded.
code_entry_point: u32,
/// 256B-aligned physical FB address where data is located.
data_dma_base: u64,
/// Size of data block (should be multiple of 256B).
data_size: u32,
/// Number of arguments to be passed to the target firmware being loaded.
argc: u32,
/// Arguments to be passed to the target firmware being loaded.
argv: u32,
}
// SAFETY: This struct doesn't contain uninitialized bytes and doesn't have interior mutability.
unsafe impl AsBytes for BootloaderDmemDescV2 {}
/// Wrapper for [`FwsecFirmware`] that includes the bootloader performing the actual load
/// operation.
pub(crate) struct FwsecFirmwareWithBl {
/// DMA object the bootloader will copy the firmware from.
_firmware_dma: Coherent<[u8]>,
/// Code of the bootloader to be loaded into non-secure IMEM.
ucode: KVec<u8>,
/// Descriptor to be loaded into DMEM for the bootloader to read.
dmem_desc: BootloaderDmemDescV2,
/// Range-validated start offset of the firmware code in IMEM.
imem_dst_start: u16,
/// BROM parameters of the loaded firmware.
brom_params: FalconBromParams,
/// Range-validated `desc.start_tag`.
start_tag: u16,
}
impl FwsecFirmwareWithBl {
/// Loads the bootloader firmware for `dev` and `chipset`, and wrap `firmware` so it can be
/// loaded using it.
pub(crate) fn new(
firmware: FwsecFirmware,
dev: &Device<device::Bound>,
chipset: Chipset,
) -> Result<Self> {
Annotation
- Detected declarations: `struct BootloaderDesc`, `struct BootloaderDmemDescV2`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.