Merge tag 'drm-next-2019-07-16' of git://anongit.freedesktop.org/drm/drm
[linux-2.6-microblaze.git] / drivers / gpu / drm / vc4 / vc4_drv.h
index 24c45f2..616c011 100644 (file)
@@ -213,6 +213,11 @@ struct vc4_dev {
         * the minor is available (after drm_dev_register()).
         */
        struct list_head debugfs_list;
+
+       /* Mutex for binner bo allocation. */
+       struct mutex bin_bo_lock;
+       /* Reference count for our binner bo. */
+       struct kref bin_bo_kref;
 };
 
 static inline struct vc4_dev *
@@ -581,6 +586,11 @@ struct vc4_exec_info {
         * NULL otherwise.
         */
        struct vc4_perfmon *perfmon;
+
+       /* Whether the exec has taken a reference to the binner BO, which should
+        * happen with a VC4_PACKET_TILE_BINNING_MODE_CONFIG packet.
+        */
+       bool bin_bo_used;
 };
 
 /* Per-open file private data. Any driver-specific resource that has to be
@@ -591,6 +601,8 @@ struct vc4_file {
                struct idr idr;
                struct mutex lock;
        } perfmon;
+
+       bool bin_bo_used;
 };
 
 static inline struct vc4_exec_info *
@@ -830,6 +842,8 @@ void vc4_plane_async_set_fb(struct drm_plane *plane,
 extern struct platform_driver vc4_v3d_driver;
 extern const struct of_device_id vc4_v3d_dt_match[];
 int vc4_v3d_get_bin_slot(struct vc4_dev *vc4);
+int vc4_v3d_bin_bo_get(struct vc4_dev *vc4, bool *used);
+void vc4_v3d_bin_bo_put(struct vc4_dev *vc4);
 int vc4_v3d_pm_get(struct vc4_dev *vc4);
 void vc4_v3d_pm_put(struct vc4_dev *vc4);