From c295a1b785efd01547f7d86dc30270360edf817a Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Thu, 1 Oct 2026 10:07:14 -0400 Subject: gsp-phys: real GSP boot stages 3d/3e and the GSP-RM run-sequencer event Stage 3d stages the GSP-RM boot from host sysmem (FMC, radix3 over the GSP-RM ELF, signature, message queues, libos LOGINIT/LOGRM/RMARGS and GSP arguments) and runs Booter Load on SEC2: GSP RISC-V reset, libos mailbox, IMEM/DMEM direct load, BOOTVEC=0, M0==0, FALCON_OS, RISC-V active. Stage 3e links the status queue and polls for GSP-RM events; it now also executes the inline run-sequencer command buffer (event 0x1002) against BAR0 (REG_WRITE/MODIFY/POLL, DELAY, STORE, CORE_* including CORE_RESUME) and then waits for GSP_INIT_DONE 0x1001. Gated by gsp_phys_boot / gsp_phys_boot_dryrun (default off; the normal load path writes nothing). gsp_phys_fwsec=1 without gsp_phys_boot=1 is refused: a FWSEC-only carve cannot pass the booter-unload handoff gate. Release quiesces the GSP, runs the existing FWSEC-SB/booter-unload teardown and frees all staging. tools/gen_gsp_bindata.py decodes the public generated archives into the Booter Load image (prod signature patched at 0x8700) and the GSP-RM boot (FMC) image; both are self-checked at build time. --- kernel/gsp_phys_boot.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'kernel/gsp_phys_boot.h') diff --git a/kernel/gsp_phys_boot.h b/kernel/gsp_phys_boot.h index 3f6ad6e..c305e0a 100644 --- a/kernel/gsp_phys_boot.h +++ b/kernel/gsp_phys_boot.h @@ -52,4 +52,17 @@ int gsp_phys_boot_layout_init(struct gsp_phys_boot *boot, struct pci_dev *pdev, resource_size_t bar1_len); void gsp_phys_boot_layout_fini(struct gsp_phys_boot *boot, struct pci_dev *pdev); +/* + * Record the host-DMA sysmem addresses of the staged boot images in the WPR + * metadata page (stage 3d staging). The layout already set the sizes and + * offsets; this fills the addresses the Booter Load ucode DMAs from. The + * crash-report queue is left at 0 (Turing programs no queue). No device + * access. Returns nonzero when the metadata page is unavailable or a sysmem + * address is zero (the readback proves the store). + */ +int gsp_phys_boot_meta_set_sysmem(struct gsp_phys_boot *boot, + u64 radix3_dma, u64 radix3_size, + u64 fmc_dma, u64 fmc_size, + u64 sig_dma, u64 sig_size); + #endif /* GSP_PHYS_BOOT_H */ -- cgit v1.2.3