880d405719
git-subtree-dir: qcom/opensource/graphics-kernel git-subtree-mainline:992813d9c1
git-subtree-split:b4fdc4c042
Change-Id: repo: https://git.codelinaro.org/clo/la/platform/vendor/qcom/opensource/graphics-kernel tag: GRAPHICS.LA.14.0.r1-07700-lanai.0
135 lines
4.6 KiB
C
135 lines
4.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2013-2015,2020-2021, The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
#ifndef __ADRENO_SNAPSHOT_H
|
|
#define __ADRENO_SNAPSHOT_H
|
|
|
|
#include "kgsl_snapshot.h"
|
|
|
|
#define CP_CRASH_DUMPER_TIMEOUT 500
|
|
|
|
#define DEBUG_SECTION_SZ(_dwords) (((_dwords) * sizeof(unsigned int)) \
|
|
+ sizeof(struct kgsl_snapshot_debug))
|
|
|
|
#define SHADER_SECTION_SZ(_dwords) (((_dwords) * sizeof(unsigned int)) \
|
|
+ sizeof(struct kgsl_snapshot_shader))
|
|
|
|
/* Macro to make it super easy to dump registers */
|
|
#define SNAPSHOT_REGISTERS(_d, _s, _r) \
|
|
adreno_snapshot_registers((_d), (_s), \
|
|
(unsigned int *) _r, ARRAY_SIZE(_r) / 2)
|
|
|
|
#define REG_COUNT(_ptr) ((_ptr[1] - _ptr[0]) + 1)
|
|
|
|
void adreno_snapshot_registers(struct kgsl_device *device,
|
|
struct kgsl_snapshot *snapshot,
|
|
const unsigned int *regs, unsigned int count);
|
|
|
|
/**
|
|
* adreno_snapshot_regs_count - Helper function to calculate register and
|
|
* header size
|
|
* @ptr: Pointer to the register array
|
|
*
|
|
* Return: Number of registers in the array
|
|
*
|
|
* Helper function to count the total number of regsiters
|
|
* in a given array plus the header space needed for each group.
|
|
*/
|
|
int adreno_snapshot_regs_count(const u32 *ptr);
|
|
|
|
/**
|
|
* adreno_snapshot_registers_v2 - Dump a series of registers
|
|
* @device: Pointer to the kgsl device
|
|
* @buf: The snapshot buffer
|
|
* @remain: The size remaining in the snapshot buffer
|
|
* @priv: Pointer to the register array to be dumped
|
|
*
|
|
* Return: Number of bytes written to the snapshot
|
|
*
|
|
* This function dumps the registers in a way that we need to
|
|
* only dump the start address and count for each pair of register
|
|
* in the array. This helps us save some memory in snapshot.
|
|
*/
|
|
size_t adreno_snapshot_registers_v2(struct kgsl_device *device,
|
|
u8 *buf, size_t remain, void *priv);
|
|
|
|
/**
|
|
* adreno_snapshot_registers_v2 - Dump a series of CX_MISC registers
|
|
* @device: Pointer to the kgsl device
|
|
* @buf: The snapshot buffer
|
|
* @remain: The size remaining in the snapshot buffer
|
|
* @priv: Pointer to the CX_MISC register array to be dumped
|
|
*
|
|
* Return: Number of bytes written to the snapshot
|
|
*
|
|
* This function dumps the CX_MISC registers in a way that we need to
|
|
* only dump the start address and count for each pair of register
|
|
* in the array. This helps us save some memory in snapshot.
|
|
*/
|
|
size_t adreno_snapshot_cx_misc_registers(struct kgsl_device *device,
|
|
u8 *buf, size_t remain, void *priv);
|
|
|
|
/**
|
|
* adreno_parse_ib - Parse the given IB
|
|
* @device: Pointer to the kgsl device
|
|
* @snapshot: Pointer to the snapshot structure
|
|
* @process: Process to which this IB belongs
|
|
* @gpuaddr: Gpu address of the IB
|
|
* @dwords: Size in dwords of the IB
|
|
*
|
|
* We want to store the last executed IB1 and IB2 in the static region to ensure
|
|
* that we get at least some information out of the snapshot even if we can't
|
|
* access the dynamic data from the sysfs file. Push all other IBs on the
|
|
* dynamic list
|
|
*/
|
|
void adreno_parse_ib(struct kgsl_device *device,
|
|
struct kgsl_snapshot *snapshot,
|
|
struct kgsl_process_private *process,
|
|
u64 gpuaddr, u64 dwords);
|
|
|
|
/**
|
|
* adreno_parse_ib_lpac - Parse the given LPAC IB
|
|
* @device: Pointer to the kgsl device
|
|
* @snapshot: Pointer to the snapshot structure
|
|
* @process: Process to which this LPAC IB belongs
|
|
* @gpuaddr: Gpu address of the LPAC IB
|
|
* @dwords: Size in dwords of the LPAC IB
|
|
*
|
|
* We want to store the last executed LPAC IB1 and IB2 in the static region to ensure
|
|
* that we get at least some information out of the snapshot even if we can't
|
|
* access the dynamic data from the sysfs file. Push all other IBs on the
|
|
* dynamic list
|
|
*/
|
|
void adreno_parse_ib_lpac(struct kgsl_device *device,
|
|
struct kgsl_snapshot *snapshot,
|
|
struct kgsl_process_private *process,
|
|
u64 gpuaddr, u64 dwords);
|
|
|
|
/**
|
|
* adreno_snapshot_global - Add global buffer to snapshot
|
|
* @device: Pointer to the kgsl device
|
|
* @buf: Where the global buffer section is to be written
|
|
* @remain: Remaining bytes in snapshot buffer
|
|
* @priv: Opaque data
|
|
*
|
|
* Return: Number of bytes written to the snapshot buffer
|
|
*/
|
|
size_t adreno_snapshot_global(struct kgsl_device *device, u8 *buf,
|
|
size_t remain, void *priv);
|
|
|
|
/**
|
|
* adreno_snapshot_dump_all_ibs - To dump all ibs from ringbuffer
|
|
* @device: Pointer to the kgsl device
|
|
* @rbptr: Ringbuffer host pointer
|
|
* @snapshot: Pointer to the snapshot structure
|
|
*
|
|
* Parse all IBs from the ringbuffer and add to IB dump list.
|
|
*/
|
|
void adreno_snapshot_dump_all_ibs(struct kgsl_device *device,
|
|
unsigned int *rbptr,
|
|
struct kgsl_snapshot *snapshot);
|
|
|
|
#endif /*__ADRENO_SNAPSHOT_H */
|