1f3ba9122SRob Herring /* SPDX-License-Identifier: GPL-2.0 */ 2f3ba9122SRob Herring /* Copyright 2019 Collabora ltd. */ 3f3ba9122SRob Herring 4f3ba9122SRob Herring #ifndef __PANFROST_JOB_H__ 5f3ba9122SRob Herring #define __PANFROST_JOB_H__ 6f3ba9122SRob Herring 7f3ba9122SRob Herring #include <uapi/drm/panfrost_drm.h> 8f3ba9122SRob Herring #include <drm/gpu_scheduler.h> 9f3ba9122SRob Herring 10f3ba9122SRob Herring struct panfrost_device; 11f3ba9122SRob Herring struct panfrost_gem_object; 12f3ba9122SRob Herring struct panfrost_file_priv; 13f3ba9122SRob Herring 14f3ba9122SRob Herring struct panfrost_job { 15f3ba9122SRob Herring struct drm_sched_job base; 16f3ba9122SRob Herring 17f3ba9122SRob Herring struct kref refcount; 18f3ba9122SRob Herring 19f3ba9122SRob Herring struct panfrost_device *pfdev; 206e516fafSSteven Price struct panfrost_mmu *mmu; 21f3ba9122SRob Herring 22f3ba9122SRob Herring /* Fence to be signaled by IRQ handler when the job is complete. */ 23f3ba9122SRob Herring struct dma_fence *done_fence; 24f3ba9122SRob Herring 25f3ba9122SRob Herring __u64 jc; 26f3ba9122SRob Herring __u32 requirements; 27f3ba9122SRob Herring __u32 flush_id; 28f3ba9122SRob Herring 29bdefca2dSBoris Brezillon struct panfrost_gem_mapping **mappings; 30f3ba9122SRob Herring struct drm_gem_object **bos; 31f3ba9122SRob Herring u32 bo_count; 32f3ba9122SRob Herring 33f3ba9122SRob Herring /* Fence to be signaled by drm-sched once its done with the job */ 34f3ba9122SRob Herring struct dma_fence *render_done_fence; 35f11b0417SAdrián Larumbe 36f11b0417SAdrián Larumbe struct panfrost_engine_usage *engine_usage; 37f11b0417SAdrián Larumbe bool is_profiled; 38f11b0417SAdrián Larumbe ktime_t start_time; 39f11b0417SAdrián Larumbe u64 start_cycles; 40f3ba9122SRob Herring }; 41f3ba9122SRob Herring 42f3ba9122SRob Herring int panfrost_job_init(struct panfrost_device *pfdev); 43f3ba9122SRob Herring void panfrost_job_fini(struct panfrost_device *pfdev); 44f3ba9122SRob Herring int panfrost_job_open(struct panfrost_file_priv *panfrost_priv); 45f3ba9122SRob Herring void panfrost_job_close(struct panfrost_file_priv *panfrost_priv); 4653516280SDaniel Vetter int panfrost_job_get_slot(struct panfrost_job *job); 47f3ba9122SRob Herring int panfrost_job_push(struct panfrost_job *job); 48f3ba9122SRob Herring void panfrost_job_put(struct panfrost_job *job); 49f3ba9122SRob Herring void panfrost_job_enable_interrupts(struct panfrost_device *pfdev); 50*157ad4ccSAngeloGioacchino Del Regno void panfrost_job_suspend_irq(struct panfrost_device *pfdev); 51f3ba9122SRob Herring int panfrost_job_is_idle(struct panfrost_device *pfdev); 52f3ba9122SRob Herring 53f3ba9122SRob Herring #endif 54