[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/meta/meta-mediatek/recipes-graphics/libdrm/files/0002-Add-CRTC-ID-to-vblank-event.patch b/meta/meta-mediatek/recipes-graphics/libdrm/files/0002-Add-CRTC-ID-to-vblank-event.patch
new file mode 100644
index 0000000..1519dc2
--- /dev/null
+++ b/meta/meta-mediatek/recipes-graphics/libdrm/files/0002-Add-CRTC-ID-to-vblank-event.patch
@@ -0,0 +1,100 @@
+From 890d43a6a8d091211b82dd432af5e0a38472ffa6 Mon Sep 17 00:00:00 2001
+From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
+Date: Mon, 17 Aug 2015 16:21:24 +0300
+Subject: [PATCH] Add CRTC ID to vblank event
+
+When using the atomic API, one request can span multiple CRTCs, however
+one event is generated per CRTC. As we cannot disambiguate the CRTC with
+user data (since we only have one piece of user data to pass in), newer
+kernels can include the CRTC ID in the page flip event.
+
+Add a new vfunc to dispatch vblank events carrying a CRTC ID to clients
+who negotiate a higher interface version.
+
+[daniels: Rebased, include new cap, call page_flip_handler if it is set
+          but page_flip_handler2 isn't even on newer contexts, write a
+	  commit message.]
+
+v2: Split into separate commit.
+
+Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
+Signed-off-by: Daniel Stone <daniels@collabora.com>
+Reviewed-by: Maarten Lankhorst <maarten.lankhorst@intel.com>
+---
+ xf86drm.h     |  9 ++++++++-
+ xf86drmMode.c | 24 ++++++++++++++++--------
+ 2 files changed, 24 insertions(+), 9 deletions(-)
+
+diff --git a/xf86drm.h b/xf86drm.h
+index 0d92701..d75ca8c 100644
+--- a/xf86drm.h
++++ b/xf86drm.h
+@@ -728,7 +728,7 @@ extern void drmMsg(const char *format, ...) DRM_PRINTFLIKE(1, 2);
+ extern int drmSetMaster(int fd);
+ extern int drmDropMaster(int fd);
+ 
+-#define DRM_EVENT_CONTEXT_VERSION 2
++#define DRM_EVENT_CONTEXT_VERSION 3
+ 
+ typedef struct _drmEventContext {
+ 
+@@ -748,6 +748,13 @@ typedef struct _drmEventContext {
+ 				  unsigned int tv_usec,
+ 				  void *user_data);
+ 
++	void (*page_flip_handler2)(int fd,
++				   unsigned int sequence,
++				   unsigned int tv_sec,
++				   unsigned int tv_usec,
++				   unsigned int crtc_id,
++				   void *user_data);
++
+ } drmEventContext, *drmEventContextPtr;
+ 
+ extern int drmHandleEvent(int fd, drmEventContextPtr evctx);
+diff --git a/xf86drmMode.c b/xf86drmMode.c
+index 0266bc1..d3bc20e 100644
+--- a/xf86drmMode.c
++++ b/xf86drmMode.c
+@@ -889,6 +889,7 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx)
+ 	int len, i;
+ 	struct drm_event *e;
+ 	struct drm_event_vblank *vblank;
++	void *user_data;
+ 
+ 	/* The DRM read semantics guarantees that we always get only
+ 	 * complete events. */
+@@ -915,15 +916,22 @@ int drmHandleEvent(int fd, drmEventContextPtr evctx)
+ 					      U642VOID (vblank->user_data));
+ 			break;
+ 		case DRM_EVENT_FLIP_COMPLETE:
+-			if (evctx->version < 2 ||
+-			    evctx->page_flip_handler == NULL)
+-				break;
+ 			vblank = (struct drm_event_vblank *) e;
+-			evctx->page_flip_handler(fd,
+-						 vblank->sequence,
+-						 vblank->tv_sec,
+-						 vblank->tv_usec,
+-						 U642VOID (vblank->user_data));
++			user_data = U642VOID (vblank->user_data);
++
++			if (evctx->version >= 3 && evctx->page_flip_handler2)
++				evctx->page_flip_handler2(fd,
++							 vblank->sequence,
++							 vblank->tv_sec,
++							 vblank->tv_usec,
++							 vblank->crtc_id,
++							 user_data);
++			else if (evctx->version >= 2 && evctx->page_flip_handler)
++				evctx->page_flip_handler(fd,
++							 vblank->sequence,
++							 vblank->tv_sec,
++							 vblank->tv_usec,
++							 user_data);
+ 			break;
+ 		default:
+ 			break;
+--
+libgit2 0.26.0
+