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; 20f3ba9122SRob Herring struct panfrost_file_priv *file_priv; 21f3ba9122SRob Herring 22f3ba9122SRob Herring /* Optional fences userspace can pass in for the job to depend on. */ 23f3ba9122SRob Herring struct dma_fence **in_fences; 24f3ba9122SRob Herring u32 in_fence_count; 25f3ba9122SRob Herring 26f3ba9122SRob Herring /* Fence to be signaled by IRQ handler when the job is complete. */ 27f3ba9122SRob Herring struct dma_fence *done_fence; 28f3ba9122SRob Herring 29f3ba9122SRob Herring __u64 jc; 30f3ba9122SRob Herring __u32 requirements; 31f3ba9122SRob Herring __u32 flush_id; 32f3ba9122SRob Herring 33f3ba9122SRob Herring /* Exclusive fences we have taken from the BOs to wait for */ 34f3ba9122SRob Herring struct dma_fence **implicit_fences; 35bdefca2dSBoris Brezillon struct panfrost_gem_mapping **mappings; 36f3ba9122SRob Herring struct drm_gem_object **bos; 37f3ba9122SRob Herring u32 bo_count; 38f3ba9122SRob Herring 39f3ba9122SRob Herring /* Fence to be signaled by drm-sched once its done with the job */ 40f3ba9122SRob Herring struct dma_fence *render_done_fence; 41f3ba9122SRob Herring }; 42f3ba9122SRob Herring 43f3ba9122SRob Herring int panfrost_job_init(struct panfrost_device *pfdev); 44f3ba9122SRob Herring void panfrost_job_fini(struct panfrost_device *pfdev); 45f3ba9122SRob Herring int panfrost_job_open(struct panfrost_file_priv *panfrost_priv); 46f3ba9122SRob Herring void panfrost_job_close(struct panfrost_file_priv *panfrost_priv); 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); 50f3ba9122SRob Herring int panfrost_job_is_idle(struct panfrost_device *pfdev); 51f3ba9122SRob Herring 52f3ba9122SRob Herring #endif 53