From 4612968b4429c90e2df057f3d92d849e82d6342e Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Tue, 6 Oct 2026 08:01:32 -0400 Subject: vgsp: mode 27 - golden9 context promote on the V6 execution channel only --- kernel/gsp_phys_booter.c | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'kernel/gsp_phys_booter.c') diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c index badf14f..913f1c8 100644 --- a/kernel/gsp_phys_booter.c +++ b/kernel/gsp_phys_booter.c @@ -607,6 +607,16 @@ bool gsp_phys_boot_requested(void) * committed context is incomplete (PATCH/FECS/PRIV/UNR absent). */ #define GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6 26u +/* + * Mode 27 (2026-10-06, experiment): mode 25's golden construct (buffers + * prepared, golden channel allocated) but WITHOUT the golden channel's own + * 9-entry promote; the single atomic 9-entry promote targets the V6 + * execution channel instead. Mode 26's assert (0x52a8674) may have been the + * double binding of the same context buffers to two channels; with the + * golden channel promote skipped, the entries are bound to V6 for the first + * time. + */ +#define GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY 27u /* * Existing fwclient mask bit 8: mode-25 gate for the captured VAS * COPY_SERVER_RESERVED_PDES control. The captured control copies three @@ -634,7 +644,7 @@ bool gsp_phys_boot_requested(void) */ #define GSP_PHYS_RMCALL_GOLDEN9_MASK_SIZED_BUFFERS (1u << 10) #define GSP_PHYS_RMCALL_GR_PROMOTE_MAX \ - (GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6) + (GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY) /* * Work-submit token notifier slot. The default index is @@ -7463,6 +7473,10 @@ static const char *gsp_phys_rmcall_gr_promote_name(void) return "reference FWCLIENT non-3D set (MAIN/PM/PATCH/FECS_EVENT/PRIV_ACCESS_MAP/UNRESTRICTED_PRIV_ACCESS_MAP) on V6"; case GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9: return "real golden-client construct on the golden handles (captured channel 0x00200320 + single atomic 9-entry PROMOTE_CTX) then the V6 FWCLIENT follow-on promote"; + case GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6: + return "mode 26: golden9 9-entry promote on the V6 execution channel (plus the golden-channel promote)"; + case GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY: + return "mode 27: golden9 9-entry promote on the V6 execution channel only (no golden-channel promote)"; default: return "off (PROMOTE_CTX never sent)"; } @@ -8091,7 +8105,9 @@ static int gsp_phys_rmcall_golden_replay(void __iomem *bar0) if ((boot_stage.rmcall_gr_promote == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9 || boot_stage.rmcall_gr_promote == - GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6) && + GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6 || + boot_stage.rmcall_gr_promote == + GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY) && gsp_phys_rmcall_engine_is_gr()) { if (gsp_phys_rmcall_fwclient_mask_value() & GSP_PHYS_RMCALL_GOLDEN9_MASK_LADDER_VAS) { @@ -8193,7 +8209,9 @@ static int gsp_phys_rmcall_golden_replay(void __iomem *bar0) if ((boot_stage.rmcall_gr_promote == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9 || boot_stage.rmcall_gr_promote == - GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6) && + GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6 || + boot_stage.rmcall_gr_promote == + GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY) && gsp_phys_rmcall_engine_is_gr()) { ch.flags = cpu_to_le32(GSP_PHYS_RMCALL_CHANNEL_FLAG_GOLDEN9); ch.internal_flags = cpu_to_le32( @@ -9750,9 +9768,11 @@ static int gsp_phys_rmcall_gr_ctx_promote(void __iomem *bar0) * ran, so the follow-on FWCLIENT promote would have no golden-initialized * GR-instance state to consume. Abort instead of sending it blind. */ - if (mode == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9 && + if ((mode == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9 || + mode == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY) && (!gsp_phys_rmcall_golden_enabled() || !gsp_phys_gpu_enabled())) { - pr_err("vgsp-boot: rm-call: mode 25 requires gsp_phys_rmcall_golden=1 and gsp_phys_gpu=1 (the golden replay did not run); no PROMOTE_CTX is sent and the ladder aborts with no retry\n"); + pr_err("vgsp-boot: rm-call: mode %u requires gsp_phys_rmcall_golden=1 and gsp_phys_gpu=1 (the golden replay did not run); no PROMOTE_CTX is sent and the ladder aborts with no retry\n", + mode); return -EINVAL; } /* @@ -10548,7 +10568,8 @@ static int gsp_phys_rmcall_gr_ctx_promote(void __iomem *bar0) } if (mask & BIT(0) && - mode == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6) { + (mode == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6 || + mode == GSP_PHYS_RMCALL_GR_PROMOTE_GOLDEN9_V6_ONLY)) { /* * Mode 26: the full golden9 set on the execution * channel (V6) - the hypothesis test for the engine -- cgit v1.2.3