summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-06 16:19:53 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-06 16:19:53 -0400
commit9fefe8d533acdb0e73e66de29166d99ab4f5e4bd (patch)
treeac39697d9b9e276e677c645ed0363a46b3e1ab5b /kernel/gsp_phys_booter.c
parent5b8dcda83558edec4657f79c3de621f74661cdde (diff)
downloadopen-iov-9fefe8d533acdb0e73e66de29166d99ab4f5e4bd.tar.gz
open-iov-9fefe8d533acdb0e73e66de29166d99ab4f5e4bd.zip
vgsp: mode 31 sibling A free ChID index (m29 decode: fixed index 3 collided with D)
Diffstat (limited to 'kernel/gsp_phys_booter.c')
-rw-r--r--kernel/gsp_phys_booter.c15
1 files changed, 14 insertions, 1 deletions
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
@@ -1087,6 +1087,19 @@ bool gsp_phys_boot_requested(void)
(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
* clear, for experiments where the hardware control block must sit at
@@ -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,