On 11/6/2026 1:59 AM, Rob Clark wrote:
> This series introduces gen8 devcoredump support. Compared to previous
> gens, it:
>
> 1. Switches to generated tables. Compared to hand modifying headers from
> kgsl (which were originally generated, then adjusted a bit by hand before
> adding to kgsl tree. And then copied to drm/msm and lightly modified
> some more in the process).
>
> In the process, we also switch to generated cp_protect tables.
>
> 2. Aligns to the "snapshot" format that kgsl/etc use for hw state capture.
> The non-generation specific bits (SMMU fault info, capturing relevant
> BOs, etc) still works as before. Everything gen8 specific gets encoded
> as "snapshot" sections, ascii85 encoded in the resulting devcoredump
> file (similar to captured BOs).
>
> 3. Try to make it easier to at least compare kgsl snapshot code with
> upstream, for porting fixes/etc. State capture is tedious and mind-
> numbing, and the last thing you want to do when debugging a GPU hang
> is going down the rabbit hole of having to first debug gpu state
> capture.
>
> However, I don't love kgsl_snapshot_add_section(). It does avoid
> duplicating snapshot header stuff everywhere. But the ergonomics
> are not great. So instead I went with "align with what I wish kgsl
> looked like..
>
> The mesa/crashdec side of this is at:
>
> https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/45304
>
> I'd appreciate tested-by's on Hawi, Maili, Milos, and Pakala, since I
I will help with Hawi and Maili.
-Akhil
> don't have these devices at-hand to test myself. To test devcoredump,
> you can use the msm_recovery test in igt.. or just:
>
> cat /sys/kernel/debug/dri/*/gpu > /dev/null
>
> NOTE: I'm still tracking down some descrepancies compared to kgsl. I
> think at least we should be matching on the excluded access-
> protected regs, so hopefully collecting a devcoredump doesn't
> make things go boom. Tested on glymur (windows fw) and on
> kaanapali MTP (android fw).
>
> NOTE: Uses $codename for generated file/table names, rather than continue
> to perpetuate the equally meaningless gen8_x_y naming from kgsl into
> upstream. At least the codenames are familiar upstream and this
> removes an extra level of name translation.
>
> v6:
> - Fix gx_is_on() check
> - Only capture preemption records if preemption is enabled
> - Link to v5:
> https://lore.kernel.org/all/[email protected]/
>
> v5:
> - Fix inverted IS_ERR_OR_NULL() check
> - Drop IFPC fixes (moved to their own series)
> - Link to v4:
> https://lore.kernel.org/all/[email protected]/
>
> v4:
> - Drop RB_GC_GMEM_PROTECT from nonctx list, now that we are computing
> the value directly
> - Add missing 'break' in switch
> - Move RBBM_MISC_STATUS read to after we check GX is on
> - Rename sysprof_setup
> - Add cleanup.h support for disabling IFPC, and use it in debugfs
> snapshot path
> - Collect tags
> - Link to v3:
> https://lore.kernel.org/all/[email protected]/
>
> v3:
> - Drop generated nonctx list for now
> - Exclude access protected registers
> - Shuffle around some debugbus blocks to match kgsl
> - Use CP_PROTECT_PIPE regs to pickup the extra spans if we exceed the
> 64 CP_PROTECT_GLOBAL regs
> - Inhibit IFPC for gpu debugfs dump
> - Fix cx_dbgc capture
> - Misc other small fixes
> - Link to v2:
> https://lore.kernel.org/all/[email protected]/
>
> v2:
> - Fix incorrect protect list for Kaanapali
> - Use __free() for snapshot_sect finalization
> - Fix missing early return error path in gen8_snapshot_mempool()
> - Fix aperture setting in gen8_legacy_snapshot_mvc()
> - Fix first_slice in gen8_snapshot_mempool()
> - Remove GBIF regs in generated nonctx list
> - Link to v1:
> https://lore.kernel.org/all/[email protected]/
>
> Rob Clark (15):
> drm/msm: Import adreno_snapshot.h
> drm/msm/a8xx: Export aperture helpers
> drm/msm/a8xx: Add a8xx_aperture_acquire_raw()
> drm/msm/a8xx: Export slice helper
> drm/msm/a8xx: Add missing a850 ifpc reglist entries
> drm/msm/a8xx: Allow nonctx reglist to include GMU regs
> drm/msm/a8xx: Stop getting GMEM_PROTECT from nonctx list
> drm/msm/adreno: Fix PROTECT span length
> drm/msm/adreno: add temporary __maybe_unused
> drm/msm/a8xx: Import generated headers
> drm/msm/a8xx: devcoredump state capture support
> drm/msm/a8xx: Add all CP_PROTECT_PIPE to pwrup reglist
> drm/msm/a8xx: Use CP_PROTECT_PIPE regs
> drm/msm/a8xx: Switch to generated protect regs
> drm/msm/adreno: Remove temporary __maybe_unused
>
> drivers/gpu/drm/msm/Makefile | 4 +-
> drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 7 +
> drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 14 +-
> drivers/gpu/drm/msm/adreno/a8xx_catalog.c | 404 +--
> drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 65 +-
> drivers/gpu/drm/msm/adreno/a8xx_gpu_state.c | 1403 ++++++++++
> .../gpu/drm/msm/adreno/adreno_gen8_snapshot.h | 576 ++++
> drivers/gpu/drm/msm/adreno/adreno_gpu.h | 2 +
> drivers/gpu/drm/msm/adreno/adreno_snapshot.h | 530 ++++
> .../drm/msm/adreno/catalog/adreno_glymur.h | 2307 ++++++++++++++++
> .../gpu/drm/msm/adreno/catalog/adreno_hawi.h | 2387 +++++++++++++++++
> .../drm/msm/adreno/catalog/adreno_kaanapali.h | 2317 ++++++++++++++++
> .../gpu/drm/msm/adreno/catalog/adreno_maili.h | 1882 +++++++++++++
> .../gpu/drm/msm/adreno/catalog/adreno_milos.h | 1977 ++++++++++++++
> .../drm/msm/adreno/catalog/adreno_pakala.h | 2161 +++++++++++++++
> drivers/gpu/drm/msm/registers/adreno/a6xx.xml | 4 +
> 16 files changed, 15718 insertions(+), 322 deletions(-)
> create mode 100644 drivers/gpu/drm/msm/adreno/a8xx_gpu_state.c
> create mode 100644 drivers/gpu/drm/msm/adreno/adreno_gen8_snapshot.h
> create mode 100644 drivers/gpu/drm/msm/adreno/adreno_snapshot.h
> create mode 100644 drivers/gpu/drm/msm/adreno/catalog/adreno_glymur.h
> create mode 100644 drivers/gpu/drm/msm/adreno/catalog/adreno_hawi.h
> create mode 100644 drivers/gpu/drm/msm/adreno/catalog/adreno_kaanapali.h
> create mode 100644 drivers/gpu/drm/msm/adreno/catalog/adreno_maili.h
> create mode 100644 drivers/gpu/drm/msm/adreno/catalog/adreno_milos.h
> create mode 100644 drivers/gpu/drm/msm/adreno/catalog/adreno_pakala.h
>