diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gpu.h')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gpu.h | 25 | 
1 files changed, 16 insertions, 9 deletions
| diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index 6c9e1fdc1a76..d7cd02cd2109 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -94,7 +94,10 @@ struct msm_gpu {  	struct msm_ringbuffer *rb[MSM_GPU_MAX_RINGS];  	int nr_rings; -	/* list of GEM active objects: */ +	/* +	 * List of GEM active objects on this gpu.  Protected by +	 * msm_drm_private::mm_lock +	 */  	struct list_head active_list;  	/* does gpu need hw_init? */ @@ -103,9 +106,6 @@ struct msm_gpu {  	/* number of GPU hangs (for all contexts) */  	int global_faults; -	/* worker for handling active-list retiring: */ -	struct work_struct retire_work; -  	void __iomem *mmio;  	int irq; @@ -134,7 +134,15 @@ struct msm_gpu {  #define DRM_MSM_HANGCHECK_PERIOD 500 /* in ms */  #define DRM_MSM_HANGCHECK_JIFFIES msecs_to_jiffies(DRM_MSM_HANGCHECK_PERIOD)  	struct timer_list hangcheck_timer; -	struct work_struct recover_work; + +	/* work for handling GPU recovery: */ +	struct kthread_work recover_work; + +	/* work for handling active-list retiring: */ +	struct kthread_work retire_work; + +	/* worker for retire/recover: */ +	struct kthread_worker *worker;  	struct drm_gem_object *memptrs_bo; @@ -147,6 +155,8 @@ struct msm_gpu {  	struct msm_gpu_state *crashstate;  	/* True if the hardware supports expanded apriv (a650 and newer) */  	bool hw_apriv; + +	struct thermal_cooling_device *cooling;  };  static inline struct msm_gpu *dev_to_gpu(struct device *dev) @@ -246,10 +256,7 @@ static inline u32 gpu_read(struct msm_gpu *gpu, u32 reg)  static inline void gpu_rmw(struct msm_gpu *gpu, u32 reg, u32 mask, u32 or)  { -	uint32_t val = gpu_read(gpu, reg); - -	val &= ~mask; -	gpu_write(gpu, reg, val | or); +	msm_rmw(gpu->mmio + (reg << 2), mask, or);  }  static inline u64 gpu_read64(struct msm_gpu *gpu, u32 lo, u32 hi) | 
