diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-07 09:45:56 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-07 09:45:56 -0400 |
| commit | 7b0ca94a7bccf4bdcb00614b91c13bcb99d57c17 (patch) | |
| tree | 84ad979f5345a3bc523f4c84262607672a65709c /kernel/gsp_phys_booter.c | |
| parent | d02b027e5293ad0213c8f9d0b31b93c47310bfa4 (diff) | |
| download | open-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.c | 33 |
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), |
