From c21f7099a8544b35628a7e104f02c5335a08d79d Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Thu, 1 Oct 2026 10:13:04 -0400 Subject: 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. --- kernel/gsp_phys_gpu.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'kernel/gsp_phys_gpu.c') 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, -- cgit v1.2.3