android_kernel_samsung_sm86.../adreno_coresight.h
Mohammed Mirza Mandayappurath Manzoor 920890fe9b msm: kgsl: Add support to enable gfx funnel device
Since coresight driver cannot wake GPU up to program the gfx funnel,
add a wrapper function to wake up gpu.

Change-Id: I2b8d511ac5d2dd9dd42e5f40a9a055ec1cddf272
Signed-off-by: Mohammed Mirza Mandayappurath Manzoor <quic_mmandaya@quicinc.com>
2022-06-08 02:56:07 -07:00

165 lines
5.0 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _ADRENO_CORESIGHT_H_
#define _ADRENO_CORESIGHT_H_
#include <linux/device.h>
#include <linux/coresight.h>
struct adreno_device;
/**
* struct adreno_coresight_register - Definition for a coresight (tracebus)
* debug register
*/
struct adreno_coresight_register {
/** @offset: Offset of the debug register in the KGSL register space */
unsigned int offset;
/** @initial: Default value to write when coresight is enabled */
unsigned int initial;
/**
* @value: Current shadow value of the register (to be reprogrammed
* after power collapse)
*/
unsigned int value;
};
/**
* struct adreno_coresight_attr - Local attribute struct for coresight sysfs
*
* files
*/
struct adreno_coresight_attr {
/** @attr: Base device attribute */
struct device_attribute attr;
/**
* @reg: Pointer to the &struct adreno_coresight_register definition
* for this register
*/
struct adreno_coresight_register *reg;
};
/**
* adreno_coresight_show_register - Callback function for sysfs show
* @device: Pointer to a device handle
* @attr: Pointer to the device attribute
* @buf: Contains the output buffer for sysfs
*
* Callback function to write the value of the register into the sysfs node.
* Return: The size of the data written to the buffer or negative on error.
*/
ssize_t adreno_coresight_show_register(struct device *device,
struct device_attribute *attr, char *buf);
/**
* adreno_coresight_show_register - Callback function for sysfs store
* @device: Pointer to a device handle
* @attr: Pointer to the device attribute
* @buf: Contains the input buffer for sysfs
* @size: Size of the data stored in buf
*
* Callback function to read the value of a register from a sysfs node.
* Return: The size of the data consumed or negative on error.
*/
ssize_t adreno_coresight_store_register(struct device *dev,
struct device_attribute *attr, const char *buf, size_t size);
#define ADRENO_CORESIGHT_ATTR(_attrname, _reg) \
struct adreno_coresight_attr coresight_attr_##_attrname = { \
__ATTR(_attrname, 0644, \
adreno_coresight_show_register, \
adreno_coresight_store_register), \
(_reg), }
/**
* struct adreno_coresight - GPU specific coresight definition
*/
struct adreno_coresight {
/**
* @registers: Array of GPU specific registers to configure trace
* bus output
*/
struct adreno_coresight_register *registers;
/** @count: Number of registers in the array */
unsigned int count;
/** @groups: Pointer to an attribute list of control files */
const struct attribute_group **groups;
};
/**
* struct adreno_coresight_device - Container for a coresight instance
*/
struct adreno_coresight_device {
/** @dev: Pointer to the corsight device */
struct coresight_device *dev;
/** @coresight: Point to the GPU specific coresight definition */
const struct adreno_coresight *coresight;
/** @device: Pointer to a GPU device handle */
struct kgsl_device *device;
/** @enabled: True if the coresight instance is enabled */
bool enabled;
/** @atid: The unique ATID value of the coresight device */
unsigned int atid;
};
/**
* struct adreno_funnel_device - Container for a coresight gfx funnel
*/
struct adreno_funnel_device {
/** @funnel_dev: Pointer to the gfx funnel device */
struct device *funnel_dev;
/** @funnel_csdev: Point to the gfx funnel coresight definition */
struct coresight_device *funnel_csdev;
/** @funnel_ops: Function pointers to enable/disable the coresight funnel */
const struct coresight_ops *funnel_ops;
};
#ifdef CONFIG_QCOM_KGSL_CORESIGHT
void adreno_coresight_add_device(struct adreno_device *adreno_dev,
const char *name,
const struct adreno_coresight *coresight,
struct adreno_coresight_device *adreno_csdev);
/**
* adreno_coresight_start - Reprogram coresight registers after power collapse
* @adreno_dev: An Adreno GPU device handle
*
* Reprogram the cached values to the coresight registers on power up.
*/
void adreno_coresight_start(struct adreno_device *adreno_dev);
/**
* adreno_coresight_stop - Reprogram coresight registers after power collapse
* @adreno_dev: An Adreno GPU device handle
*
* Cache the current coresight register values so they can be restored after
* power collapse.
*/
void adreno_coresight_stop(struct adreno_device *adreno_dev);
/**
* adreno_coresight_remove - Destroy active coresight devices
* @adreno_dev: An Adreno GPU device handle
*
* Destroy any active coresight devices.
*/
void adreno_coresight_remove(struct adreno_device *adreno_dev);
#else
static inline void adreno_coresight_add_device(struct kgsl_device *device,
const char *name,
const struct adreno_coresight *coresight,
struct adreno_coresight_device *adreno_csdev)
{
}
static inline void adreno_coresight_start(struct adreno_device *adreno_dev) { }
static inline void adreno_coresight_stop(struct adreno_device *adreno_dev) { }
static inline void adreno_coresight_remove(struct adreno_device *adreno_dev) { }
#endif
#endif