summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_booter.c')
-rw-r--r--kernel/gsp_phys_booter.c33
1 files changed, 27 insertions, 6 deletions
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
@@ -608,6 +608,16 @@ bool gsp_phys_boot_requested(void)
*/
#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
* server-RM-internal page-table levels the ladder cannot source safely, so
@@ -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