sde: framebuffer: dump layer info when ATOMIC ioctl fails
Dump mdp layer info when ATOMIC ioctl fails to help debugging.
Change-Id: If3e32ff74ce2ed4d88c90a4897076a051597da3e
diff --git a/displayengine/libs/core/hw_framebuffer.cpp b/displayengine/libs/core/hw_framebuffer.cpp
index 69d1efa..03bd067 100644
--- a/displayengine/libs/core/hw_framebuffer.cpp
+++ b/displayengine/libs/core/hw_framebuffer.cpp
@@ -764,12 +764,34 @@
mdp_commit.flags |= MDP_VALIDATE_LAYER;
if (ioctl_(hw_context->device_fd, MSMFB_ATOMIC_COMMIT, &hw_display->mdp_disp_commit) < 0) {
IOCTL_LOGE(MSMFB_ATOMIC_COMMIT, hw_context->type);
+ DumpLayerCommit(hw_display->mdp_disp_commit);
return kErrorHardware;
}
return kErrorNone;
}
+void HWFrameBuffer::DumpLayerCommit(mdp_layer_commit &layer_commit) {
+ mdp_layer_commit_v1 &mdp_commit = layer_commit.commit_v1;
+ mdp_input_layer *mdp_layers = mdp_commit.input_layers;
+
+ DLOGE("mdp_commt: flags = %x, release fence = %x", mdp_commit.flags, mdp_commit.release_fence);
+ DLOGE("left_roi: x = %d, y = %d, w = %d, h = %d", mdp_commit.left_roi.x, mdp_commit.left_roi.y,
+ mdp_commit.left_roi.w, mdp_commit.left_roi.h);
+ DLOGE("right_roi: x = %d, y = %d, w = %d, h = %d", mdp_commit.right_roi.x,
+ mdp_commit.right_roi.y, mdp_commit.right_roi.w, mdp_commit.right_roi.h);
+ for (uint32_t i = 0; i < mdp_commit.input_layer_cnt; i++) {
+ DLOGE("mdp_commt: layer_cnt = %d, pipe_ndx = %x, zorder = %d, flags = %x",
+ i, mdp_layers[i].pipe_ndx, mdp_layers[i].z_order, mdp_layers[i].flags);
+ mdp_rect &src_rect = mdp_layers[i].src_rect;
+ DLOGE("src rect: x = %d, y = %d, w = %d, h = %d",
+ src_rect.x, src_rect.y, src_rect.w, src_rect.h);
+ mdp_rect &dst_rect = mdp_layers[i].dst_rect;
+ DLOGE("dst rect: x = %d, y = %d, w = %d, h = %d",
+ dst_rect.x, dst_rect.y, dst_rect.w, dst_rect.h);
+ }
+}
+
DisplayError HWFrameBuffer::DisplayCommit(HWContext *hw_context, HWLayers *hw_layers) {
DTRACE_SCOPED();
@@ -857,6 +879,7 @@
mdp_commit.flags &= ~MDP_VALIDATE_LAYER;
if (ioctl_(hw_context->device_fd, MSMFB_ATOMIC_COMMIT, &hw_display->mdp_disp_commit) < 0) {
IOCTL_LOGE(MSMFB_ATOMIC_COMMIT, hw_context->type);
+ DumpLayerCommit(hw_display->mdp_disp_commit);
return kErrorHardware;
}
@@ -1090,6 +1113,7 @@
mdp_commit.flags &= ~MDP_VALIDATE_LAYER;
if (ioctl_(hw_context->device_fd, MSMFB_ATOMIC_COMMIT, &hw_display->mdp_disp_commit) < 0) {
IOCTL_LOGE(MSMFB_ATOMIC_COMMIT, hw_context->type);
+ DumpLayerCommit(hw_display->mdp_disp_commit);
return kErrorHardware;
}
}
diff --git a/displayengine/libs/core/hw_framebuffer.h b/displayengine/libs/core/hw_framebuffer.h
index 68a0674..2e52aca 100644
--- a/displayengine/libs/core/hw_framebuffer.h
+++ b/displayengine/libs/core/hw_framebuffer.h
@@ -198,7 +198,7 @@
DisplayError RotatorValidate(HWContext *device_ctx, HWLayers *hw_layers);
DisplayError RotatorCommit(HWContext *device_ctx, HWLayers *hw_layers);
-
+ void DumpLayerCommit(mdp_layer_commit &layer_commit);
inline DisplayError SetFormat(const LayerBufferFormat &source, uint32_t *target);
inline DisplayError SetStride(HWDeviceType device_type, LayerBufferFormat format,
uint32_t width, uint32_t *target);