diff options
| author | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-06 23:17:31 -0400 |
|---|---|---|
| committer | Arthur Hanson Rasmusson <arthur@vgpu.io> | 2026-10-06 23:17:31 -0400 |
| commit | 4e55a8fab5e274aec72c10c6ca2967d631f934af (patch) | |
| tree | cb835860c19207c3f90bfc49e27e9a32025a3ab6 /kernel/gsp_phys_booter.c | |
| parent | 292919c88d12234fd12348bc2a4852326a4491e9 (diff) | |
| download | open-iov-4e55a8fab5e274aec72c10c6ca2967d631f934af.tar.gz open-iov-4e55a8fab5e274aec72c10c6ca2967d631f934af.zip | |
vgsp: m66 - host-readable TSG fault buffers + post-mortem dump
m65 proved the scheduled QMD never writes its release anywhere (module sem
stays 0, guest page stays 5) - the engine dies or is cancelled before
completion. The TSG fault-method buffers (0xa06c010a) are the hardware's
record of why; force them to host sysmem (the captured aperture, param
gsp_phys_rmcall_faultbuf_sys=1) and dump both buffers' first 8 words in the
post-mortem so an engine fault entry (faulting address/engine) is visible.
Diffstat (limited to 'kernel/gsp_phys_booter.c')
| -rw-r--r-- | kernel/gsp_phys_booter.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c index 5aac73c..8d865c3 100644 --- a/kernel/gsp_phys_booter.c +++ b/kernel/gsp_phys_booter.c @@ -12561,7 +12561,8 @@ static int gsp_phys_rmcall_tsg_fault_buffers(void __iomem *bar0) for (i = 0; i < 2; i++) { u64 fb = 0; - ret = gsp_phys_rmcall_alloc_fb_mem(bar0, fb_handles[i], + ret = gsp_phys_rmcall_faultbuf_sys_value() ? -EOPNOTSUPP : + gsp_phys_rmcall_alloc_fb_mem(bar0, fb_handles[i], GSP_PHYS_RMCALL_TSG_FAULT_BUF_SIZE, &fb, "TSG fault buffer"); if (!ret) { @@ -16305,6 +16306,25 @@ gr_page_unmapped: get_unaligned_le32((u8 *)__va(req->rel_hpa) + req->rel_off), get_unaligned_le32((u8 *)__va(req->rel_hpa)), get_unaligned_le32((u8 *)__va(req->rel_hpa) + 4)); + { + struct gsp_phys_boot_chunk *f0 = + &boot_stage.rmcall_user_lane_fault[0]; + struct gsp_phys_boot_chunk *f1 = + &boot_stage.rmcall_user_lane_fault[1]; + const u32 *p0 = f0->pages ? + gsp_phys_chunk_page_va(f0, 0) : NULL; + const u32 *p1 = f1->pages ? + gsp_phys_chunk_page_va(f1, 0) : NULL; + + if (p0) + pr_info("vgsp-gr: post-mortem faultbuf0 (sysmem) w0..7 = %08x %08x %08x %08x %08x %08x %08x %08x\n", + p0[0], p0[1], p0[2], p0[3], + p0[4], p0[5], p0[6], p0[7]); + if (p1) + pr_info("vgsp-gr: post-mortem faultbuf1 (sysmem) w0..7 = %08x %08x %08x %08x %08x %08x %08x %08x\n", + p1[0], p1[1], p1[2], p1[3], + p1[4], p1[5], p1[6], p1[7]); + } if (bar0) pr_info("vgsp-gr: FE readback raw 0x40a500..0x40a50c = %08x %08x %08x %08x (subctx-1 control at 0x40a504)\n", ioread32(bar0 + 0x0040a500u), |
