diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-01 10:13:04 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-01 10:13:04 -0400 |
| commit | c21f7099a8544b35628a7e104f02c5335a08d79d (patch) | |
| tree | c840bbb360f2c09b1d58609b9b327bd37cf36d89 /kernel/gsp_phys_gpu.c | |
| parent | d018cc38014f96dfe947d9064010fd43977b10f7 (diff) | |
| download | open-iov-c21f7099a8544b35628a7e104f02c5335a08d79d.tar.gz open-iov-c21f7099a8544b35628a7e104f02c5335a08d79d.zip | |
gsp-phys: command-queue TX and the GSP-RM unload RPC for clean teardown
Adds a minimal msgq producer on the command queue (element layout, checksum, sequence, dma_wmb before writePtr, doorbell) and submits the UNLOADING_GUEST_DRIVER RPC so GSP-RM shuts down and sets the scratch14 handoff bit the Booter Unload gate needs. Release attempts the RPC once before quiescing when a boot ran; on-demand testing is available through the debugfs file gsp-phys-unload-rpc while the module owns the GPU. GSP-RM processor suspend is polled on the GSP mailbox.
Diffstat (limited to 'kernel/gsp_phys_gpu.c')
| -rw-r--r-- | kernel/gsp_phys_gpu.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/gsp_phys_gpu.c b/kernel/gsp_phys_gpu.c index 79c79bf..88d13f2 100644 --- a/kernel/gsp_phys_gpu.c +++ b/kernel/gsp_phys_gpu.c @@ -898,6 +898,15 @@ void gsp_phys_gpu_release(void) wpr2_ret = -EIO; gsp_phys_boot_staging_free(phys.pdev); } else { + /* + * Clean GSP-RM shutdown: after a stage-3d boot, send + * UNLOADING_GUEST_DRIVER once (no-op otherwise) so + * GSP-RM suspends and sets the scratch14 handoff bits + * the Booter Unload gate needs; then quiesce the GSP + * falcon and run the existing FWSEC teardown. A failed + * RPC leaves the existing fail-safe in charge. + */ + gsp_phys_boot_rm_unload(phys.bar0); gsp_phys_boot_quiesce(phys.bar0); wpr2_ret = gsp_phys_fwsec_release(&phys.boot, phys.pdev, |
