android_kernel_samsung_sm86.../qcom/opensource/graphics-kernel/adreno_snapshot.h
David Wronek 880d405719 Add 'qcom/opensource/graphics-kernel/' from commit 'b4fdc4c04295ac59109ae19d64747522740c3f14'
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
2024-10-06 16:44:56 +02:00

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 */