Commit 81d15271 authored by Dongseong Hwang's avatar Dongseong Hwang Committed by Commit Bot

cros, gbm: gfx::OVERLAY_TRANSFORM_NONE is DRM_ROTATE_0, not 0.

This CL fixes chrome UI hang with --enable-drm-atomic on IA. When hang, the
following error message is reported.
[17889:17901:0619/140657.974833:ERROR:hardware_display_plane_manager_atomic.cc(78)] Failed to commit properties: Invalid argument

It's because drmModeAtomicAddProperty() expects one of DRM_ROTATE_XXX as plane
rotation value. ARM and Rockchip generously accept the invaild variable 0, but
Intel doesn't.

In addition, correct the local definition of DRM_ROTATE_XXX to match to the
upstream kernel.
https://chromium.googlesource.com/chromiumos/third_party/kernel/+/intel-graphics/syncfence_ams_npf_mst_607_r2/include/drm/drm_blend.h#37

TEST=run chromeos reef image using cros kernel intel-graphics/syncfence_ams_npf_mst_607_r2 branch
BUG=b/36752417

Change-Id: I8abab16450cf79769692bd40de03a6005f5a024a
Reviewed-on: https://chromium-review.googlesource.com/540656Reviewed-by: default avatarDongseong Hwang <dongseong.hwang@intel.com>
Reviewed-by: default avatarDaniele Castagna <dcastagna@chromium.org>
Reviewed-by: default avatarDaniel Nicoara <dnicoara@chromium.org>
Commit-Queue: Dongseong Hwang <dongseong.hwang@intel.com>
Cr-Commit-Position: refs/heads/master@{#480969}
parent f52c295d
...@@ -23,29 +23,30 @@ const char* kRotationPropName = "rotation"; ...@@ -23,29 +23,30 @@ const char* kRotationPropName = "rotation";
// TODO(dcastagna): Remove the following defines once they're in libdrm headers. // TODO(dcastagna): Remove the following defines once they're in libdrm headers.
#if !defined(DRM_ROTATE_0) #if !defined(DRM_ROTATE_0)
#define DRM_ROTATE_0 0 #define BIT(n) (1 << (n))
#define DRM_ROTATE_90 1 #define DRM_ROTATE_0 BIT(0)
#define DRM_ROTATE_180 2 #define DRM_ROTATE_90 BIT(1)
#define DRM_ROTATE_270 3 #define DRM_ROTATE_180 BIT(2)
#define DRM_REFLECT_X 4 #define DRM_ROTATE_270 BIT(3)
#define DRM_REFLECT_Y 5 #define DRM_REFLECT_X BIT(4)
#define DRM_REFLECT_Y BIT(5)
#endif #endif
uint32_t OverlayTransformToDrmRotationPropertyValue( uint32_t OverlayTransformToDrmRotationPropertyValue(
gfx::OverlayTransform transform) { gfx::OverlayTransform transform) {
switch (transform) { switch (transform) {
case gfx::OVERLAY_TRANSFORM_NONE: case gfx::OVERLAY_TRANSFORM_NONE:
return 0; return DRM_ROTATE_0;
case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL: case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL:
return 1 << DRM_REFLECT_X; return DRM_REFLECT_X;
case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL: case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL:
return 1 << DRM_REFLECT_Y; return DRM_REFLECT_Y;
case gfx::OVERLAY_TRANSFORM_ROTATE_90: case gfx::OVERLAY_TRANSFORM_ROTATE_90:
return 1 << DRM_ROTATE_90; return DRM_ROTATE_90;
case gfx::OVERLAY_TRANSFORM_ROTATE_180: case gfx::OVERLAY_TRANSFORM_ROTATE_180:
return 1 << DRM_ROTATE_180; return DRM_ROTATE_180;
case gfx::OVERLAY_TRANSFORM_ROTATE_270: case gfx::OVERLAY_TRANSFORM_ROTATE_270:
return 1 << DRM_ROTATE_270; return DRM_ROTATE_270;
default: default:
NOTREACHED(); NOTREACHED();
} }
......
...@@ -75,7 +75,8 @@ bool HardwareDisplayPlaneManagerAtomic::Commit( ...@@ -75,7 +75,8 @@ bool HardwareDisplayPlaneManagerAtomic::Commit(
if (!drm_->CommitProperties(plane_list->atomic_property_set.get(), flags, if (!drm_->CommitProperties(plane_list->atomic_property_set.get(), flags,
crtcs.size(), crtcs.size(),
base::Bind(&AtomicPageFlipCallback, crtcs))) { base::Bind(&AtomicPageFlipCallback, crtcs))) {
PLOG(ERROR) << "Failed to commit properties"; PLOG(ERROR) << "Failed to commit properties. test_only:" << std::boolalpha
<< test_only << " error";
ResetCurrentPlaneList(plane_list); ResetCurrentPlaneList(plane_list);
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment