aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2016-11-05 09:04:31 -0400
committerRob Clark <robdclark@gmail.com>2016-11-27 11:32:35 -0500
commite8406b6132a0ca513df3c2b837fb3ec708260641 (patch)
treecd7aac87849e433708ccac1977972e3a489b1daa
parentbc5289eed4817604d0fb709bd53b2e3bf1dcb73a (diff)
drm/msm/mdp5: dump smp state on errors too
If the dumpstate modparam is enabled, for debugging error irq's, also dump SMP state. Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c2
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c6
2 files changed, 6 insertions, 2 deletions
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c
index 5c5940db898e..3ce8b9dec9c1 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_irq.c
@@ -41,6 +41,8 @@ static void mdp5_irq_error_handler(struct mdp_irq *irq, uint32_t irqstatus)
41 if (dumpstate && __ratelimit(&rs)) { 41 if (dumpstate && __ratelimit(&rs)) {
42 struct drm_printer p = drm_info_printer(mdp5_kms->dev->dev); 42 struct drm_printer p = drm_info_printer(mdp5_kms->dev->dev);
43 drm_state_dump(mdp5_kms->dev, &p); 43 drm_state_dump(mdp5_kms->dev, &p);
44 if (mdp5_kms->smp)
45 mdp5_smp_dump(mdp5_kms->smp, &p);
44 } 46 }
45} 47}
46 48
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c
index 4398f8dc5cec..58f712d37e7f 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c
@@ -302,7 +302,8 @@ void mdp5_smp_dump(struct mdp5_smp *smp, struct drm_printer *p)
302 drm_printf(p, "name\tinuse\tplane\n"); 302 drm_printf(p, "name\tinuse\tplane\n");
303 drm_printf(p, "----\t-----\t-----\n"); 303 drm_printf(p, "----\t-----\t-----\n");
304 304
305 drm_modeset_lock(&mdp5_kms->state_lock, NULL); 305 if (drm_can_sleep())
306 drm_modeset_lock(&mdp5_kms->state_lock, NULL);
306 307
307 /* grab these *after* we hold the state_lock */ 308 /* grab these *after* we hold the state_lock */
308 hwpstate = &mdp5_kms->state->hwpipe; 309 hwpstate = &mdp5_kms->state->hwpipe;
@@ -329,7 +330,8 @@ void mdp5_smp_dump(struct mdp5_smp *smp, struct drm_printer *p)
329 drm_printf(p, "AVAIL:\t%d\n", smp->blk_cnt - 330 drm_printf(p, "AVAIL:\t%d\n", smp->blk_cnt -
330 bitmap_weight(state->state, smp->blk_cnt)); 331 bitmap_weight(state->state, smp->blk_cnt));
331 332
332 drm_modeset_unlock(&mdp5_kms->state_lock); 333 if (drm_can_sleep())
334 drm_modeset_unlock(&mdp5_kms->state_lock);
333} 335}
334 336
335void mdp5_smp_destroy(struct mdp5_smp *smp) 337void mdp5_smp_destroy(struct mdp5_smp *smp)