summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-07 09:45:56 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-07 09:45:56 -0400
commit7b0ca94a7bccf4bdcb00614b91c13bcb99d57c17 (patch)
tree84ad979f5345a3bc523f4c84262607672a65709c /kernel/gsp_phys_booter.c
parentd02b027e5293ad0213c8f9d0b31b93c47310bfa4 (diff)
downloadopen-iov-7b0ca94a7bccf4bdcb00614b91c13bcb99d57c17.tar.gz
open-iov-7b0ca94a7bccf4bdcb00614b91c13bcb99d57c17.zip
vgsp: m74 - R1 booking before F2 image init (context-image aux pointers) + CWD_FS readback
The one-shot GR context-image initializer (0x52a94f8, pEngCtx+0x135) runs in F2's mapped-MAIN promote and consumes the per-VAS vaLists at that moment. With R1 after F2 the image carries zero PATCH/PM/priv-map/global pointers; the m72/m73 sampler signature (QMD ACTIVE then freed, FECS unloads exactly at dispatch, no fault) is consistent with the engine context restore failing on the empty image. gsp_phys_rmcall_gr_r1_first=1 sends R1 before F2 (default 0 = legacy order). Post-mortem now also reads CWD_FS (0x405b00).
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),