summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/adreno/adreno_gpu.h
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2013-09-16 12:52:37 +0200
committerLucas Stach <l.stach@pengutronix.de>2013-09-17 08:45:21 +0200
commit67cc74905799e26d884894d1d29807cdb7a49166 (patch)
tree154d7249154ff3940ff673a231d3fa25ffe4557b /drivers/gpu/drm/msm/adreno/adreno_gpu.h
parent5c5c7a90f086aac3f514f80c34e44f80fc32047f (diff)
downloadlinux-67cc74905799e26d884894d1d29807cdb7a49166.tar.gz
linux-67cc74905799e26d884894d1d29807cdb7a49166.tar.xz
WIP: push down hangcheck into adreno_gpu
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Diffstat (limited to 'drivers/gpu/drm/msm/adreno/adreno_gpu.h')
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
index 8d7f26e7d950..a7fe0e5e0c62 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h
@@ -54,6 +54,7 @@ struct adreno_gpu {
uint32_t revn; /* numeric revision name */
const struct adreno_gpu_funcs *funcs;
struct adreno_gem *gem;
+ struct workqueue_struct *shared_wq;
/* firmware: */
const struct firmware *pm4, *pfp;
@@ -65,10 +66,19 @@ struct adreno_gpu {
struct drm_gem_object *memptrs_bo;
uint32_t memptrs_iova;
+ uint32_t submitted_fence;
+
struct adreno_ringbuffer *rb;
uint32_t rb_iova;
struct adreno_context *lastctx;
+
+ /* Hang Detction: */
+#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;
+ uint32_t hangcheck_fence;
+ struct work_struct recover_work;
};
#define to_adreno_gpu(x) container_of(x, struct adreno_gpu, base)
@@ -115,7 +125,8 @@ void adreno_wait_ring(struct adreno_gpu *gpu, uint32_t ndwords);
int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
struct adreno_gpu *gpu, const struct adreno_gpu_funcs *funcs,
- struct adreno_gem *gem, struct adreno_rev rev);
+ struct adreno_gem *gem, struct workqueue_struct *wq,
+ struct adreno_rev rev);
void adreno_gpu_cleanup(struct adreno_gpu *gpu);
static inline void gpu_write(struct adreno_gpu *gpu, u32 reg, u32 data)