summaryrefslogtreecommitdiffstats
path: root/kernel/gsp_phys_booter.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/gsp_phys_booter.c')
-rw-r--r--kernel/gsp_phys_booter.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/kernel/gsp_phys_booter.c b/kernel/gsp_phys_booter.c
index 28bf6f9..19fb67e 100644
--- a/kernel/gsp_phys_booter.c
+++ b/kernel/gsp_phys_booter.c
@@ -16444,6 +16444,37 @@ int gsp_phys_backend_guest_gr_submit(const struct gsp_phys_gr_submit *req,
GSP_PHYS_PAGE_SIZE);
copied++;
}
+ /*
+ * m98: dump the program prologue (qmd_word 48, from
+ * the QMD's in-page entry offset) and the param/const-0
+ * page (qmd_word 32, from page start) so the first
+ * data-access instruction and the guest VA arguments it
+ * fetches can be read from the log.
+ */
+ if (pg->hpa && pg->qmd_word == 48u) {
+ u32 po = (qmd[48] &
+ (GSP_PHYS_PAGE_SIZE - 1)) / 4;
+ const u32 *w = (const u32 *)sh_page + po;
+
+ pr_info("vgsp-gr: program +0x%x: %08x %08x %08x %08x %08x %08x %08x %08x | %08x %08x %08x %08x %08x %08x %08x %08x | %08x %08x %08x %08x %08x %08x %08x %08x | %08x %08x %08x %08x %08x %08x %08x %08x | %08x %08x %08x %08x %08x %08x %08x %08x\n",
+ po * 4,
+ w[0], w[1], w[2], w[3], w[4], w[5],
+ w[6], w[7], w[8], w[9], w[10], w[11],
+ w[12], w[13], w[14], w[15], w[16],
+ w[17], w[18], w[19], w[20], w[21],
+ w[22], w[23], w[24], w[25], w[26],
+ w[27], w[28], w[29], w[30], w[31],
+ w[32], w[33], w[34], w[35], w[36],
+ w[37], w[38], w[39]);
+ }
+ if (pg->hpa && pg->qmd_word == 32u) {
+ const u32 *w = (const u32 *)sh_page;
+
+ pr_info("vgsp-gr: param page: %08x %08x %08x %08x %08x %08x %08x %08x | %08x %08x %08x %08x %08x %08x %08x %08x\n",
+ w[0], w[1], w[2], w[3], w[4], w[5],
+ w[6], w[7], w[8], w[9], w[10], w[11],
+ w[12], w[13], w[14], w[15]);
+ }
for (j = 0; j < req->n_inl; j++) {
const struct gsp_phys_gr_inline *inl =
&req->inl[j];