From 55ffe494a749cf0ebf10b3146b8c59a4ab81aa5f Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Mon, 21 Sep 2026 21:08:06 -0400 Subject: kernel: TLB invalidate auto-complete (MMU_INVALIDATE trigger) + fn-10 queue logging - NV_VIRTUAL_FUNCTION_PRIV_MMU_INVALIDATE (BAR0+0x30B0, TRIGGER=bit31): driver sets TRIGGER then spins in kgmmuCheckPendingInvalidates_TU102 polling for it to clear. Our shadow held TRIGGER forever -> nv_open_q hard-wedged in RmInitAdapter (TLB invalidate during dmaAllocMapping). Auto-clear the trigger bit in gsp_emu_poll_boot (instant completion). - fn-10/47 handler logs hObjectOld + cmd_read/stat_write/drv_rp/stat_seq. Confirmed: drv_rp tracks stat_write 1:1 (driver drains cleanly, no lapping); frees complete; stat_seq increments per record. - Health-check/crashcat loop (kgspHealthCheck -> crashcatEngineGetNext CrashReport never returns NULL) is a SECONDARY symptom triggered by an RPC failure during RmInitAdapter - under investigation. --- kernel/gsp_emulation.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'kernel/gsp_emulation.c') diff --git a/kernel/gsp_emulation.c b/kernel/gsp_emulation.c index bca8a52..7b3b261 100644 --- a/kernel/gsp_emulation.c +++ b/kernel/gsp_emulation.c @@ -178,6 +178,17 @@ static void gsp_emu_poll_boot(struct gsp_emu_context *ctx) u32 gsp_cpuctl = gsp_emu_shadow_read32(ctx, GSP_EMU_REG_GSP_CPUCTL); u32 sec2_cpuctl = gsp_emu_shadow_read32(ctx, GSP_EMU_REG_SEC2_CPUCTL); u32 engine = gsp_emu_shadow_read32(ctx, GSP_EMU_REG_GSP_ENGINE); + u32 mmu_inv = gsp_emu_shadow_read32(ctx, GSP_EMU_REG_MMU_INVALIDATE); + + /* TLB invalidate auto-complete: the driver sets TRIGGER then spins + * polling for it to clear (kgmmuCheckPendingInvalidates). Report + * instant completion or the driver wedges the open/init path. */ + if (mmu_inv & GSP_EMU_MMU_INVALIDATE_TRIGGER) { + gsp_emu_shadow_write32(ctx, GSP_EMU_REG_MMU_INVALIDATE, + mmu_inv & ~GSP_EMU_MMU_INVALIDATE_TRIGGER); + pr_info_ratelimited("GSP-BOOT: MMU_INVALIDATE trigger auto-cleared (val=0x%x)\n", + mmu_inv); + } /* GSP ENGINE reset asserted -> falcon rebooted, restart stage tracking */ if ((engine & 0x1) && ctx->boot_stage != GSP_BOOT_STAGE_IDLE) { -- cgit v1.2.3