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