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
107 lines
3.2 KiB
C
107 lines
3.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
#ifndef __ADRENO_A6XX_RGMU_H
|
|
#define __ADRENO_A6XX_RGMU_H
|
|
|
|
#define RGMU_AO_IRQ_FENCE_ERR BIT(3)
|
|
#define RGMU_AO_IRQ_MASK RGMU_AO_IRQ_FENCE_ERR
|
|
|
|
#define RGMU_OOB_IRQ_ERR_MSG BIT(24)
|
|
#define RGMU_OOB_IRQ_ACK_MASK GENMASK(23, 16)
|
|
#define RGMU_OOB_IRQ_ERR_MSG_MASK GENMASK(31, 24)
|
|
#define RGMU_OOB_IRQ_MASK RGMU_OOB_IRQ_ERR_MSG_MASK
|
|
|
|
#define MAX_RGMU_CLKS 8
|
|
|
|
enum {
|
|
/* @RGMU_PRIV_FIRST_BOOT_DONE: The very first ggpu boot is done */
|
|
RGMU_PRIV_FIRST_BOOT_DONE,
|
|
/* @RGMU_PRIV_GPU_STARTED: GPU has been started */
|
|
RGMU_PRIV_GPU_STARTED,
|
|
/* @RGMU_PRIV_PM_SUSPEND: The rgmu driver is suspended */
|
|
RGMU_PRIV_PM_SUSPEND,
|
|
};
|
|
|
|
/**
|
|
* struct a6xx_rgmu_device - rGMU device structure
|
|
* @ver: RGMU firmware version
|
|
* @rgmu_interrupt_num: RGMU interrupt number
|
|
* @oob_interrupt_num: number of RGMU asserted OOB interrupt
|
|
* @fw_hostptr: Buffer which holds the RGMU firmware
|
|
* @fw_size: Size of RGMU firmware buffer
|
|
* @clks: RGMU clocks including the GPU
|
|
* @gpu_clk: Pointer to GPU core clock
|
|
* @rgmu_clk: Pointer to rgmu clock
|
|
* @flags: RGMU flags
|
|
* @idle_level: Minimal GPU idle power level
|
|
* @fault_count: RGMU fault count
|
|
*/
|
|
struct a6xx_rgmu_device {
|
|
u32 ver;
|
|
struct platform_device *pdev;
|
|
unsigned int rgmu_interrupt_num;
|
|
unsigned int oob_interrupt_num;
|
|
unsigned int *fw_hostptr;
|
|
uint32_t fw_size;
|
|
struct clk_bulk_data *clks;
|
|
/** @num_clks: Number of clocks in @clks */
|
|
int num_clks;
|
|
struct clk *gpu_clk;
|
|
struct clk *rgmu_clk;
|
|
unsigned int idle_level;
|
|
unsigned int fault_count;
|
|
/** @flags: rgmu internal flags */
|
|
unsigned long flags;
|
|
/** @num_oob_perfcntr: Number of active oob_perfcntr requests */
|
|
u32 num_oob_perfcntr;
|
|
};
|
|
|
|
/**
|
|
* a6xx_rgmu_device_probe - Probe a6xx rgmu resources
|
|
* @pdev: Pointer to the platform device
|
|
* @chipid: Chipid of the target
|
|
* @gpucore: Pointer to the gpucore
|
|
*
|
|
* The target specific probe function for rgmu based a6xx targets.
|
|
*/
|
|
int a6xx_rgmu_device_probe(struct platform_device *pdev,
|
|
u32 chipid, const struct adreno_gpu_core *gpucore);
|
|
|
|
/**
|
|
* a6xx_rgmu_reset - Reset and restart the rgmu
|
|
* @adreno_dev: Pointer to the adreno device
|
|
*
|
|
* Return: 0 on success or negative error on failure
|
|
*/
|
|
int a6xx_rgmu_reset(struct adreno_device *adreno_dev);
|
|
|
|
/**
|
|
* a6xx_rgmu_snapshot - Take snapshot for rgmu based targets
|
|
* @adreno_dev: Pointer to the adreno device
|
|
* @snapshot: Pointer to the snapshot
|
|
*
|
|
* This function halts rgmu execution if we hit a rgmu
|
|
* fault. And then, it takes rgmu and gpu snapshot.
|
|
*/
|
|
void a6xx_rgmu_snapshot(struct adreno_device *adreno_dev,
|
|
struct kgsl_snapshot *snapshot);
|
|
|
|
/**
|
|
* a6xx_rgmu_add_to_minidump - Register a6xx_device with va minidump
|
|
* @adreno_dev: Pointer to the adreno device
|
|
*/
|
|
int a6xx_rgmu_add_to_minidump(struct adreno_device *adreno_dev);
|
|
|
|
/**
|
|
* a6xx_rgmu_gx_is_on() - Check if GX is on using pwr status register
|
|
* @adreno_dev: Pointer to the adreno device
|
|
*
|
|
* This check should only be performed if the keepalive bit is set or it
|
|
* can be guaranteed that the power state of the GPU will remain unchanged
|
|
*/
|
|
bool a6xx_rgmu_gx_is_on(struct adreno_device *adreno_dev);
|
|
#endif
|