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 /* 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; 35f3ba9122SRob Herring }; 36f3ba9122SRob Herring 37f3ba9122SRob Herring int panfrost_job_init(struct panfrost_device *pfdev); 38f3ba9122SRob Herring void panfrost_job_fini(struct panfrost_device *pfdev); 39f3ba9122SRob Herring int panfrost_job_open(struct panfrost_file_priv *panfrost_priv); 40f3ba9122SRob Herring void panfrost_job_close(struct panfrost_file_priv *panfrost_priv); 41*53516280SDaniel Vetter int panfrost_job_get_slot(struct panfrost_job *job); 42f3ba9122SRob Herring int panfrost_job_push(struct panfrost_job *job); 43f3ba9122SRob Herring void panfrost_job_put(struct panfrost_job *job); 44f3ba9122SRob Herring void panfrost_job_enable_interrupts(struct panfrost_device *pfdev); 45f3ba9122SRob Herring int panfrost_job_is_idle(struct panfrost_device *pfdev); 46f3ba9122SRob Herring 47f3ba9122SRob Herring #endif 48