From 9fefe8d533acdb0e73e66de29166d99ab4f5e4bd Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Tue, 6 Oct 2026 16:19:53 -0400 Subject: vgsp: mode 31 sibling A free ChID index (m29 decode: fixed index 3 collided with D) --- kernel/gsp_phys_booter.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'kernel/gsp_phys_booter.c') diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c index 98b85e8..6c415ec 100644 --- a/kernel/gsp_phys_booter.c +++ b/kernel/gsp_phys_booter.c @@ -1086,6 +1086,19 @@ bool gsp_phys_boot_requested(void) (u32)(GSP_PHYS_RMCALL_CHANNEL_FLAG_PRIVILEGED | (3u << 8) | \ (1u << 21)) +/* + * Mode-31 sibling A flags (m29 decode): the identical captured golden shape + * with USERD_INDEX_VALUE=4 instead of 3. The index field is what the server + * turns into the fixed ChID request (kfifoChidMgrAllocChid: ChID64 = + * ownerGranularity + index), so a second golden-shape channel on the same + * client would collide with D's fixed chid 3 and fail NV_ERR_NO_MEMORY (0x51) + * plus the kchannelConstruct/kfifoChidMgr asserts. A is a pure TSG commit + * carrier, so its ChID is functionally irrelevant; index 4 is a free slot. + */ +#define GSP_PHYS_RMCALL_CHANNEL_FLAG_GOLDEN9_SIBLING_A \ + (u32)(GSP_PHYS_RMCALL_CHANNEL_FLAG_PRIVILEGED | (4u << 8) | \ + (1u << 21)) + /* * Mode-28 alternative golden flags (unused after the m3b first run kept the * captured word): the captured golden word with the USERD placement bits @@ -9962,7 +9975,7 @@ static int gsp_phys_rmcall_golden_sibling_alloc(void __iomem *bar0) ch.gp_fifo_entries = cpu_to_le32(GSP_PHYS_RMCALL_GOLDEN_GPFIFO_ENTRIES); ch.engine_type = cpu_to_le32(GSP_PHYS_RMCALL_ENGINE_GR0); - ch.flags = cpu_to_le32(GSP_PHYS_RMCALL_CHANNEL_FLAG_GOLDEN9); + ch.flags = cpu_to_le32(GSP_PHYS_RMCALL_CHANNEL_FLAG_GOLDEN9_SIBLING_A); ch.internal_flags = cpu_to_le32( GSP_PHYS_RMCALL_CHANNEL_INTERNALFLAGS_PRIV_KERNEL); ret = gsp_phys_rmcall_alloc_fb_mem(bar0, -- cgit v1.2.3