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 2273164..17fdcee 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -13635,14 +13635,34 @@ static int gsp_phys_rmcall_stage3(void __iomem *bar0)
ret);
return ret;
}
+ /*
+ * m74 ordering (gsp_phys_rmcall_gr_r1_first; default 0 =
+ * legacy R1-after-F2): F2's mapped-MAIN promote runs the
+ * one-shot context-image initializer (0x52a94f8, sets
+ * pEngCtx+0x135) which consumes the per-VAS vaLists at
+ * that moment. With R1 after F2 the image's PATCH/PM/
+ * priv-map/global pointers are zero and the engine
+ * context restore fails silently (FECS unloads at QMD
+ * activation). Sending R1's VA bookings first makes the
+ * image carry them; the construct still finds the lists
+ * populated and stays green.
+ */
+ if (gsp_phys_rmcall_gr_r1_first_value()) {
+ ret = gsp_phys_rmcall_user_lane_va_promote(bar0);
+ if (ret)
+ pr_err("vgsp-boot: rm-call: mode 35 VA-only booking promote (R1, first) failed (%d); continuing best-effort (the construct result shows whether the per-VAS ctx-buffer maps were the gate)\n",
+ ret);
+ }
ret = gsp_phys_rmcall_user_lane_main_promote(bar0);
if (ret)
pr_err("vgsp-boot: rm-call: mode 35 MAIN mapped promote (F2) failed (%d); continuing best-effort (the construct result shows whether the initialized flag was set)\n",
ret);
- ret = gsp_phys_rmcall_user_lane_va_promote(bar0);
- if (ret)
- pr_err("vgsp-boot: rm-call: mode 35 VA-only booking promote (R1) failed (%d); continuing best-effort (the construct result shows whether the per-VAS ctx-buffer maps were the gate)\n",
- ret);
+ if (!gsp_phys_rmcall_gr_r1_first_value()) {
+ ret = gsp_phys_rmcall_user_lane_va_promote(bar0);
+ if (ret)
+ pr_err("vgsp-boot: rm-call: mode 35 VA-only booking promote (R1) failed (%d); continuing best-effort (the construct result shows whether the per-VAS ctx-buffer maps were the gate)\n",
+ ret);
+ }
gsp_phys_rmcall_ctx_diag_decode("mode35 V7 post-promotes (m62 readback)");
ret = gsp_phys_rmcall_alloc_gr_object_class(bar0,
GSP_PHYS_RMCALL_CLASS_COMPUTE,
@@ -16625,7 +16645,7 @@ gr_page_unmapped:
ioread32(bar0 + 0x0040a508u),
ioread32(bar0 + 0x0040a50cu));
if (bar0)
- pr_info("vgsp-gr: SKED readback: HWW_ESR=0x%08x HWW_EN=0x%08x INFO1=0x%08x INFO2=0x%08x INFO3=0x%08x CWD_T0=0x%08x CWD_T1=0x%08x CWD_T2=0x%08x ACT=0x%08x FECS_CTX=0x%08x\n",
+ pr_info("vgsp-gr: SKED readback: HWW_ESR=0x%08x HWW_EN=0x%08x INFO1=0x%08x INFO2=0x%08x INFO3=0x%08x CWD_T0=0x%08x CWD_T1=0x%08x CWD_T2=0x%08x ACT=0x%08x FECS_CTX=0x%08x CWD_FS=0x%08x\n",
ioread32(bar0 + 0x00407020u),
ioread32(bar0 + 0x00407024u),
ioread32(bar0 + 0x00407028u),
@@ -16635,7 +16655,8 @@ gr_page_unmapped:
ioread32(bar0 + 0x00407064u),
ioread32(bar0 + 0x00407068u),
ioread32(bar0 + 0x00407054u),
- ioread32(bar0 + 0x00409b00u));
+ ioread32(bar0 + 0x00409b00u),
+ ioread32(bar0 + 0x00405b00u));
if (bar0)
pr_info("vgsp-gr: SKED watermark[0..15]=0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
ioread32(bar0 + 0x004070a0u),