summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_sema_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_sema_service.c')
-rw-r--r--kernel/gsp_sema_service.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/kernel/gsp_sema_service.c b/kernel/gsp_sema_service.c
index 5224dad..12a7368 100644
--- a/kernel/gsp_sema_service.c
+++ b/kernel/gsp_sema_service.c
@@ -14662,12 +14662,23 @@ static u64 svc_attr_prelude_ptr[SVC_ATTR_PRELUDE_PTRS];
static u32 svc_attr_prelude_ptr_n;
module_param_named(sema_attr_prelude_cap, svc_attr_prelude_flag, uint, 0644);
MODULE_PARM_DESC(sema_attr_prelude_cap,
- "Capture the client's attr/pipeline method runs (0x1100..0x11fc, 0x2000..0x205c) from trusted beef pushes for the GR launch builder's preplay ahead of the first 3D window (default 1)");
+ "Capture the client's attr/pipeline method runs (0x1100..0x11fc, 0x2000..0x21fc) from trusted beef pushes for the GR launch builder's preplay ahead of the first 3D window (default 1)");
static bool svc_attr_setup_run_addr(u32 addr)
{
+ /*
+ * SESSION 153-CONTINUED-86: the pipeline family extends across ALL
+ * eight pipeline records (SET_PIPELINE_SHADER/BINDING/PROGRAM_ADDRESS
+ * for j=0..7 = 0x2000..0x21fc), not just j=0..1. The r1273 scrape of
+ * the client's own push image proved the guest driver binds stage 2
+ * (TESS_CONTROL, VA 0x4400200) and stage 5 (PIXEL, VA 0x4400000) with
+ * the same pair runs; the old 0x2060 cut-off dropped those binds, the
+ * replay channel's stages 2/5 kept stale/zero program addresses, and
+ * the draw's SPH validation failed for the stages it could not fetch
+ * ("Shader Program Header 9/11/18 Error", DS_HWW_ESR 0xa2040a00).
+ */
return (addr >= 0x1100u && addr < 0x1200u) ||
- (addr >= 0x2000u && addr < 0x2060u);
+ (addr >= 0x2000u && addr < 0x2200u);
}
const u32 *gsp_sema_attr_prelude_get(u32 *n, u32 *gen)
@@ -14745,7 +14756,7 @@ static void svc_attr_prelude_capture(const u8 *buf, u32 len, u64 push_va,
* lower(31:0)]: remember the program VA so its page can join
* the launch page set (see the header comment).
*/
- if (addr >= 0x2014u && addr < 0x2060u &&
+ if (addr >= 0x2014u && addr < 0x2200u &&
(addr & 0x3fu) == 0x14u && span >= 3u) {
u32 v0 = 0, v1 = 0;