summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-06 08:08:33 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-10-06 08:08:33 -0400
commitb732be32aab408804c7759e0d08471c48b2763a5 (patch)
tree2f3f158328d4131ea9733a7ef71c710e76974cb6 /kernel/gsp_phys_booter.c
parent4612968b4429c90e2df057f3d92d849e82d6342e (diff)
downloadopen-iov-b732be32aab408804c7759e0d08471c48b2763a5.tar.gz
open-iov-b732be32aab408804c7759e0d08471c48b2763a5.zip
vgsp: size the fwclient non-MAIN promote entries from the golden FBMEM aux buffers
Diffstat (limited to 'kernel/gsp_phys_booter.c')
-rw-r--r--kernel/gsp_phys_booter.c65
1 files changed, 48 insertions, 17 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index 913f1c8..040428c 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -10501,6 +10501,8 @@ static int gsp_phys_rmcall_gr_ctx_promote(void __iomem *bar0)
u32 attr = GSP_PHYS_RMCALL_GR_CTX_PHYS_ATTR;
u64 bk = GSP_PHYS_RMCALL_VA_GR_CTX + 0x400000ULL;
u32 mask = gsp_phys_rmcall_fwclient_mask_value();
+ u32 fattr = boot_stage.rmcall_golden_fb_aux ?
+ GSP_PHYS_RMCALL_GR_CTX_PHYS_ATTR_FB : attr;
u32 n = 0;
pr_info("vgsp-boot: rm-call: PROMOTE_CTX fwclient: entry mask=0x%x (bit0 MAIN, bit1 PM, bit2 PATCH, bit3 FECS_EVENT, bit4 PRIV_ACCESS_MAP, bit5 UNRESTRICTED_PRIV_ACCESS_MAP, bit6 MAIN VA-only UVM shape, bit7 INITIALIZE_CTX first)\n",
@@ -10652,52 +10654,81 @@ static int gsp_phys_rmcall_gr_ctx_promote(void __iomem *bar0)
pr_warn("vgsp-boot: rm-call: PROMOTE_CTX fwclient: PM omitted (no queried buffer; the reference external-VAS client pre-allocates it)\n");
}
- /* Entry 2: PATCH - combined, booking-only VA. */
+ /* Entry 2: PATCH - combined, mapped PDB VA. */
if (mask & BIT(2)) {
gsp_phys_rmcall_promote_entry_fill(p, n,
GSP_PHYS_RMCALL_GR_CTX_BUFFER_ID_PATCH,
boot_stage.rmcall_patch_pa,
GSP_PHYS_RMCALL_VA_GR_PATCH,
- boot_stage.rmcall_patch_size, attr, 1, 0);
+ boot_stage.rmcall_patch_size, fattr, 1, 0);
gsp_phys_rmcall_gr_promote_log_entry(n, &p->entry[n],
- "combined (booking-only VA, not PDB-mapped)");
+ "combined (PDB-mapped VA)");
n++;
}
- /* Entry 3: FECS_EVENT - combined, booking-only VA. */
+ /* Entry 3: FECS_EVENT - combined; sized FBMEM aux when prepared. */
if ((mask & BIT(3)) && boot_stage.rmcall_fecs_pa) {
gsp_phys_rmcall_promote_entry_fill(p, n,
GSP_PHYS_RMCALL_GR_CTX_BUFFER_ID_FECS_EVENT,
- boot_stage.rmcall_fecs_pa, bk + 0x6000ULL,
- 0x1000u, attr, 1, 0);
+ boot_stage.rmcall_fecs_pa,
+ boot_stage.rmcall_fecs_size ?
+ GSP_PHYS_RMCALL_VA_GOLDEN9_FECS :
+ bk + 0x6000ULL,
+ boot_stage.rmcall_fecs_size ?
+ boot_stage.rmcall_fecs_size : 0x1000u,
+ boot_stage.rmcall_fecs_size ? fattr : attr,
+ 1, 0);
gsp_phys_rmcall_gr_promote_log_entry(n, &p->entry[n],
- "combined (booking-only VA, not PDB-mapped)");
+ boot_stage.rmcall_fecs_size ?
+ "combined (sized FBMEM aux, PDB-mapped VA)" :
+ "combined (booking-only VA, not PDB-mapped)");
n++;
} else if (mask & BIT(3)) {
pr_warn("vgsp-boot: rm-call: PROMOTE_CTX fwclient: FECS_EVENT omitted (allocation unavailable)\n");
}
- /* Entry 4: PRIV_ACCESS_MAP - init-only, captured stock shape. */
+ /* Entry 4: PRIV_ACCESS_MAP - sized FBMEM aux when prepared. */
if ((mask & BIT(4)) && boot_stage.rmcall_priv_pa) {
- gsp_phys_rmcall_promote_entry_fill(p, n,
- GSP_PHYS_RMCALL_GR_CTX_BUFFER_ID_PRIV_MAP,
- boot_stage.rmcall_priv_pa, 0, 0x1000u, attr,
- 1, 1);
- gsp_phys_rmcall_gr_promote_log_entry(n, &p->entry[n],
- "init-only (captured stock shape; sysmem attr 0x6, reference FB uncached 0x4)");
+ if (boot_stage.rmcall_priv_size) {
+ gsp_phys_rmcall_promote_entry_fill(p, n,
+ GSP_PHYS_RMCALL_GR_CTX_BUFFER_ID_PRIV_MAP,
+ boot_stage.rmcall_priv_pa,
+ GSP_PHYS_RMCALL_VA_GOLDEN9_PRIV,
+ boot_stage.rmcall_priv_size,
+ fattr, 1, 0);
+ gsp_phys_rmcall_gr_promote_log_entry(n,
+ &p->entry[n],
+ "combined (sized FBMEM aux, PDB-mapped VA)");
+ } else {
+ gsp_phys_rmcall_promote_entry_fill(p, n,
+ GSP_PHYS_RMCALL_GR_CTX_BUFFER_ID_PRIV_MAP,
+ boot_stage.rmcall_priv_pa, 0, 0x1000u,
+ attr, 1, 1);
+ gsp_phys_rmcall_gr_promote_log_entry(n,
+ &p->entry[n],
+ "init-only (captured stock shape; sysmem attr 0x6, reference FB uncached 0x4)");
+ }
n++;
} else if (mask & BIT(4)) {
pr_warn("vgsp-boot: rm-call: PROMOTE_CTX fwclient: PRIV_ACCESS_MAP omitted (allocation unavailable)\n");
}
- /* Entry 5: UNRESTRICTED_PRIV_ACCESS_MAP - combined. */
+ /* Entry 5: UNRESTRICTED_PRIV_ACCESS_MAP - sized FBMEM aux. */
if ((mask & BIT(5)) && boot_stage.rmcall_unrestricted_pa) {
gsp_phys_rmcall_promote_entry_fill(p, n,
GSP_PHYS_RMCALL_GR_CTX_BUFFER_ID_UNR_PRIV_MAP,
boot_stage.rmcall_unrestricted_pa,
- bk + 0x7000ULL, 0x1000u, attr, 1, 0);
+ boot_stage.rmcall_unr_size ?
+ GSP_PHYS_RMCALL_VA_GOLDEN9_UNR :
+ bk + 0x7000ULL,
+ boot_stage.rmcall_unr_size ?
+ boot_stage.rmcall_unr_size : 0x1000u,
+ boot_stage.rmcall_unr_size ? fattr : attr,
+ 1, 0);
gsp_phys_rmcall_gr_promote_log_entry(n, &p->entry[n],
- "combined (booking-only VA, not PDB-mapped)");
+ boot_stage.rmcall_unr_size ?
+ "combined (sized FBMEM aux, PDB-mapped VA)" :
+ "combined (booking-only VA, not PDB-mapped)");
n++;
} else if (mask & BIT(5)) {
pr_warn("vgsp-boot: rm-call: PROMOTE_CTX fwclient: UNRESTRICTED_PRIV_ACCESS_MAP omitted (allocation unavailable)\n");