summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_gpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_gpu.c')
-rw-r--r--kernel/gsp_phys_gpu.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/gsp_phys_gpu.c b/kernel/gsp_phys_gpu.c
index cfa3d4e..227246b 100644
--- a/kernel/gsp_phys_gpu.c
+++ b/kernel/gsp_phys_gpu.c
@@ -316,6 +316,32 @@ bool gsp_phys_fault_inject_enabled(void)
EXPORT_SYMBOL_GPL(gsp_phys_fault_inject_enabled);
/*
+ * H1 rm-call ladder engine selector (default 0). 0 keeps the existing
+ * COPY0/CE ladder byte-identical: TSG/channel engineType COPY0, the V5
+ * variant walk, BIND engineType 0x9 and the CE copy method block. 1 selects
+ * GR0 (NV2080_ENGINE_TYPE_GRAPHICS): the stage-3 snapshot builds the
+ * TSG/channel with engineType 1, makes one (no-retry) V5 channel attempt,
+ * allocates the TURING_COMPUTE_A (0xc5c0) engine object on the ladder
+ * channel, BIND uses engineType 1 and stage 4 pushes a GR
+ * SET_REPORT_SEMAPHORE release instead of a CE copy. The value is snapshotted
+ * when stage 3 starts; a later sysfs change is logged once and ignored, so a
+ * session can never mix a GR0 channel with a COPY0 BIND. Every CE forwarding
+ * path (P5/P6a selftest/P6b/P6c) refuses cleanly on a GR ladder. One-line
+ * rollback: gsp_phys_rmcall_engine=0.
+ */
+static int gsp_phys_rmcall_engine_param;
+module_param_named(gsp_phys_rmcall_engine, gsp_phys_rmcall_engine_param, int,
+ 0644);
+MODULE_PARM_DESC(gsp_phys_rmcall_engine,
+ "RM-client ladder engine: 0 = COPY0 (default, existing CE copy ladder), 1 = GR0 (TURING_COMPUTE_A engine object and a GR semaphore release)");
+
+int gsp_phys_rmcall_engine_value(void)
+{
+ return gsp_phys_rmcall_engine_param;
+}
+EXPORT_SYMBOL_GPL(gsp_phys_rmcall_engine_value);
+
+/*
* One-way power latch (default). Re-enabling runtime PM and D3cold after a
* claim lets the board power-gate and the host hard-freeze on resume
* (observed 2026-10-01); keep the pre-claim D0 policy instead and require