drm/radeon: remove some unneeded structure members
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / radeon / radeon.h
index 85dac33e3cce3c0eeca90ae3d57d066b4c771a24..9d6c1de93591d4bb4d125ba621c454fedf133424 100644 (file)
@@ -113,7 +113,6 @@ extern int radeon_lockup_timeout;
 
 /* fence seq are set to this number when signaled */
 #define RADEON_FENCE_SIGNALED_SEQ              0LL
-#define RADEON_FENCE_NOTEMITED_SEQ             (~0LL)
 
 /* internal ring indices */
 /* r1xx+ has gfx CP ring */
@@ -258,8 +257,8 @@ struct radeon_fence_driver {
        uint32_t                        scratch_reg;
        uint64_t                        gpu_addr;
        volatile uint32_t               *cpu_addr;
-       /* seq is protected by ring emission lock */
-       uint64_t                        seq;
+       /* sync_seq is protected by ring emission lock */
+       uint64_t                        sync_seq[RADEON_NUM_RINGS];
        atomic64_t                      last_seq;
        unsigned long                   last_activity;
        bool                            initialized;
@@ -277,8 +276,7 @@ struct radeon_fence {
 int radeon_fence_driver_start_ring(struct radeon_device *rdev, int ring);
 int radeon_fence_driver_init(struct radeon_device *rdev);
 void radeon_fence_driver_fini(struct radeon_device *rdev);
-int radeon_fence_create(struct radeon_device *rdev, struct radeon_fence **fence, int ring);
-int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence);
+int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence **fence, int ring);
 void radeon_fence_process(struct radeon_device *rdev, int ring);
 bool radeon_fence_signaled(struct radeon_fence *fence);
 int radeon_fence_wait(struct radeon_fence *fence, bool interruptible);
@@ -290,6 +288,27 @@ int radeon_fence_wait_any(struct radeon_device *rdev,
 struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence);
 void radeon_fence_unref(struct radeon_fence **fence);
 unsigned radeon_fence_count_emitted(struct radeon_device *rdev, int ring);
+bool radeon_fence_need_sync(struct radeon_fence *fence, int ring);
+void radeon_fence_note_sync(struct radeon_fence *fence, int ring);
+static inline struct radeon_fence *radeon_fence_later(struct radeon_fence *a,
+                                                     struct radeon_fence *b)
+{
+       if (!a) {
+               return b;
+       }
+
+       if (!b) {
+               return a;
+       }
+
+       BUG_ON(a->ring != b->ring);
+
+       if (a->seq > b->seq) {
+               return a;
+       } else {
+               return b;
+       }
+}
 
 /*
  * Tiling registers
@@ -451,10 +470,9 @@ void radeon_semaphore_emit_wait(struct radeon_device *rdev, int ring,
                                struct radeon_semaphore *semaphore);
 int radeon_semaphore_sync_rings(struct radeon_device *rdev,
                                struct radeon_semaphore *semaphore,
-                               bool sync_to[RADEON_NUM_RINGS],
-                               int dst_ring);
+                               int signaler, int waiter);
 void radeon_semaphore_free(struct radeon_device *rdev,
-                          struct radeon_semaphore *semaphore,
+                          struct radeon_semaphore **semaphore,
                           struct radeon_fence *fence);
 
 /*
@@ -630,9 +648,11 @@ struct radeon_ib {
        uint32_t                        length_dw;
        uint64_t                        gpu_addr;
        uint32_t                        *ptr;
+       int                             ring;
        struct radeon_fence             *fence;
        unsigned                        vm_id;
        bool                            is_const_ib;
+       struct radeon_fence             *sync_to[RADEON_NUM_RINGS];
        struct radeon_semaphore         *semaphore;
 };
 
@@ -718,9 +738,7 @@ struct r600_ih {
        struct radeon_bo        *ring_obj;
        volatile uint32_t       *ring;
        unsigned                rptr;
-       unsigned                rptr_offs;
        unsigned                wptr;
-       unsigned                wptr_old;
        unsigned                ring_size;
        uint64_t                gpu_addr;
        uint32_t                ptr_mask;
@@ -1039,6 +1057,8 @@ struct radeon_power_state {
 
 struct radeon_pm {
        struct mutex            mutex;
+       /* write locked while reprogramming mclk */
+       struct rw_semaphore     mclk_lock;
        u32                     active_crtcs;
        int                     active_crtc_count;
        int                     req_vblank;
@@ -1192,20 +1212,20 @@ struct radeon_asic {
                            uint64_t src_offset,
                            uint64_t dst_offset,
                            unsigned num_gpu_pages,
-                           struct radeon_fence *fence);
+                           struct radeon_fence **fence);
                u32 blit_ring_index;
                int (*dma)(struct radeon_device *rdev,
                           uint64_t src_offset,
                           uint64_t dst_offset,
                           unsigned num_gpu_pages,
-                          struct radeon_fence *fence);
+                          struct radeon_fence **fence);
                u32 dma_ring_index;
                /* method used for bo copy */
                int (*copy)(struct radeon_device *rdev,
                            uint64_t src_offset,
                            uint64_t dst_offset,
                            unsigned num_gpu_pages,
-                           struct radeon_fence *fence);
+                           struct radeon_fence **fence);
                /* ring used for bo copies */
                u32 copy_ring_index;
        } copy;
@@ -1374,9 +1394,9 @@ struct cayman_asic {
 
 struct si_asic {
        unsigned max_shader_engines;
-       unsigned max_pipes_per_simd;
        unsigned max_tile_pipes;
-       unsigned max_simds_per_se;
+       unsigned max_cu_per_sh;
+       unsigned max_sh_per_se;
        unsigned max_backends_per_se;
        unsigned max_texture_channel_caches;
        unsigned max_gprs;
@@ -1387,7 +1407,6 @@ struct si_asic {
        unsigned sc_hiz_tile_fifo_size;
        unsigned sc_earlyz_tile_fifo_size;
 
-       unsigned num_shader_engines;
        unsigned num_tile_pipes;
        unsigned num_backends_per_se;
        unsigned backend_disable_mask_per_asic;
@@ -1535,7 +1554,6 @@ struct radeon_device {
        struct work_struct audio_work;
        int num_crtc; /* number of crtcs */
        struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */
-       struct mutex vram_mutex;
        bool audio_enabled;
        struct r600_audio audio_status; /* audio stuff */
        struct notifier_block acpi_nb;