From b732be32aab408804c7759e0d08471c48b2763a5 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Rasmusson Date: Tue, 6 Oct 2026 08:08:33 -0400 Subject: vgsp: size the fwclient non-MAIN promote entries from the golden FBMEM aux buffers --- kernel/gsp_phys_booter.c | 65 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 17 deletions(-) (limited to 'kernel/gsp_phys_booter.c') 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"); -- cgit v1.2.3