All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt()
@ 2015-09-01  7:22 Joonyoung Shim
  2015-09-01  7:22 ` [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c Joonyoung Shim
                   ` (8 more replies)
  0 siblings, 9 replies; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

The exynos_drm_fb_set_buf_cnt() is used to set buffer count only in
exynos_drm_fbdev_update(). This patch sets directly buffer count in
exynos_drm_framebuffer_init() without using exynos_drm_fb_set_buf_cnt(),
so there is no any reason to keep exynos_drm_fb_set_buf_cnt().

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c    | 13 +++----------
 drivers/gpu/drm/exynos/exynos_drm_fb.h    |  4 ----
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c |  3 ---
 3 files changed, 3 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 9738f4e..effeb64 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -122,16 +122,6 @@ static struct drm_framebuffer_funcs exynos_drm_fb_funcs = {
 	.dirty		= exynos_drm_fb_dirty,
 };
 
-void exynos_drm_fb_set_buf_cnt(struct drm_framebuffer *fb,
-						unsigned int cnt)
-{
-	struct exynos_drm_fb *exynos_fb;
-
-	exynos_fb = to_exynos_fb(fb);
-
-	exynos_fb->buf_cnt = cnt;
-}
-
 unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb)
 {
 	struct exynos_drm_fb *exynos_fb;
@@ -163,6 +153,9 @@ exynos_drm_framebuffer_init(struct drm_device *dev,
 	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
 	exynos_fb->exynos_gem_obj[0] = exynos_gem_obj;
 
+	/* buffer count to framebuffer always is 1 at booting time. */
+	exynos_fb->buf_cnt = 1;
+
 	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
 	if (ret) {
 		kfree(exynos_fb);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h
index 1c9e27c..897d2cf 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
@@ -25,10 +25,6 @@ struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb,
 
 void exynos_drm_mode_config_init(struct drm_device *dev);
 
-/* set a buffer count to drm framebuffer. */
-void exynos_drm_fb_set_buf_cnt(struct drm_framebuffer *fb,
-						unsigned int cnt);
-
 /* get a buffer count to drm framebuffer. */
 unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb);
 
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 624595a..8188b1f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -103,9 +103,6 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
 		return -EIO;
 	}
 
-	/* buffer count to framebuffer always is 1 at booting time. */
-	exynos_drm_fb_set_buf_cnt(fb, 1);
-
 	offset = fbi->var.xoffset * (fb->bits_per_pixel >> 3);
 	offset += fbi->var.yoffset * fb->pitches[0];
 
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 16:42   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 3/9] drm/exynos: cleanup exynos_drm_fbdev_update() Joonyoung Shim
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

The variable name "exynos_gem_obj" is too long, so some lines exceed 80
characters. It's simple to use "obj" instead of "exynos_gem_obj".

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 8188b1f..25170e2 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -32,7 +32,7 @@
 
 struct exynos_drm_fbdev {
 	struct drm_fb_helper		drm_fb_helper;
-	struct exynos_drm_gem_obj	*exynos_gem_obj;
+	struct exynos_drm_gem_obj	*obj;
 };
 
 static int exynos_drm_fb_mmap(struct fb_info *info,
@@ -40,7 +40,7 @@ static int exynos_drm_fb_mmap(struct fb_info *info,
 {
 	struct drm_fb_helper *helper = info->par;
 	struct exynos_drm_fbdev *exynos_fbd = to_exynos_fbdev(helper);
-	struct exynos_drm_gem_obj *obj = exynos_fbd->exynos_gem_obj;
+	struct exynos_drm_gem_obj *obj = exynos_fbd->obj;
 	unsigned long vm_size;
 	int ret;
 
@@ -117,7 +117,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 				    struct drm_fb_helper_surface_size *sizes)
 {
 	struct exynos_drm_fbdev *exynos_fbdev = to_exynos_fbdev(helper);
-	struct exynos_drm_gem_obj *exynos_gem_obj;
+	struct exynos_drm_gem_obj *obj;
 	struct drm_device *dev = helper->dev;
 	struct fb_info *fbi;
 	struct drm_mode_fb_cmd2 mode_cmd = { 0 };
@@ -146,27 +146,25 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 
 	size = mode_cmd.pitches[0] * mode_cmd.height;
 
-	exynos_gem_obj = exynos_drm_gem_create(dev, EXYNOS_BO_CONTIG, size);
+	obj = exynos_drm_gem_create(dev, EXYNOS_BO_CONTIG, size);
 	/*
 	 * If physically contiguous memory allocation fails and if IOMMU is
 	 * supported then try to get buffer from non physically contiguous
 	 * memory area.
 	 */
-	if (IS_ERR(exynos_gem_obj) && is_drm_iommu_supported(dev)) {
+	if (IS_ERR(obj) && is_drm_iommu_supported(dev)) {
 		dev_warn(&pdev->dev, "contiguous FB allocation failed, falling back to non-contiguous\n");
-		exynos_gem_obj = exynos_drm_gem_create(dev, EXYNOS_BO_NONCONTIG,
-							size);
+		obj = exynos_drm_gem_create(dev, EXYNOS_BO_NONCONTIG, size);
 	}
 
-	if (IS_ERR(exynos_gem_obj)) {
-		ret = PTR_ERR(exynos_gem_obj);
+	if (IS_ERR(obj)) {
+		ret = PTR_ERR(obj);
 		goto err_release_fbi;
 	}
 
-	exynos_fbdev->exynos_gem_obj = exynos_gem_obj;
+	exynos_fbdev->obj = obj;
 
-	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd,
-			&exynos_gem_obj->base);
+	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj->base);
 	if (IS_ERR(helper->fb)) {
 		DRM_ERROR("failed to create drm framebuffer.\n");
 		ret = PTR_ERR(helper->fb);
@@ -187,7 +185,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 err_destroy_framebuffer:
 	drm_framebuffer_cleanup(helper->fb);
 err_destroy_gem:
-	exynos_drm_gem_destroy(exynos_gem_obj);
+	exynos_drm_gem_destroy(obj);
 err_release_fbi:
 	drm_fb_helper_release_fbi(helper);
 
@@ -282,11 +280,11 @@ static void exynos_drm_fbdev_destroy(struct drm_device *dev,
 				      struct drm_fb_helper *fb_helper)
 {
 	struct exynos_drm_fbdev *exynos_fbd = to_exynos_fbdev(fb_helper);
-	struct exynos_drm_gem_obj *exynos_gem_obj = exynos_fbd->exynos_gem_obj;
+	struct exynos_drm_gem_obj *obj = exynos_fbd->obj;
 	struct drm_framebuffer *fb;
 
-	if (exynos_gem_obj->kvaddr)
-		vunmap(exynos_gem_obj->kvaddr);
+	if (obj->kvaddr)
+		vunmap(obj->kvaddr);
 
 	/* release drm framebuffer and real buffer */
 	if (fb_helper->fb && fb_helper->fb->funcs) {
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 3/9] drm/exynos: cleanup exynos_drm_fbdev_update()
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
  2015-09-01  7:22 ` [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 16:43   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 4/9] drm/exynos: update fb_info via only one function Joonyoung Shim
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

It can get exynos_gem object via function argument, so no need to call
exynos_drm_fb_gem_obj() in exynos_drm_fbdev_update.

It also can get struct drm_framebuffer *fb via helper->fb, so can remove
a function argument for it.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 25170e2..4ef8739 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -75,11 +75,11 @@ static struct fb_ops exynos_drm_fb_ops = {
 };
 
 static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
-				     struct drm_fb_helper_surface_size *sizes,
-				     struct drm_framebuffer *fb)
+				   struct drm_fb_helper_surface_size *sizes,
+				   struct exynos_drm_gem_obj *obj)
 {
 	struct fb_info *fbi = helper->fbdev;
-	struct exynos_drm_gem_obj *obj;
+	struct drm_framebuffer *fb = helper->fb;
 	unsigned int size = fb->width * fb->height * (fb->bits_per_pixel >> 3);
 	unsigned int nr_pages;
 	unsigned long offset;
@@ -87,13 +87,6 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
 	drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->depth);
 	drm_fb_helper_fill_var(fbi, helper, sizes->fb_width, sizes->fb_height);
 
-	/* RGB formats use only one buffer */
-	obj = exynos_drm_fb_gem_obj(fb, 0);
-	if (!obj) {
-		DRM_DEBUG_KMS("gem object is null.\n");
-		return -EFAULT;
-	}
-
 	nr_pages = obj->size >> PAGE_SHIFT;
 
 	obj->kvaddr = (void __iomem *) vmap(obj->pages, nr_pages, VM_MAP,
@@ -175,7 +168,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 	fbi->flags = FBINFO_FLAG_DEFAULT;
 	fbi->fbops = &exynos_drm_fb_ops;
 
-	ret = exynos_drm_fbdev_update(helper, sizes, helper->fb);
+	ret = exynos_drm_fbdev_update(helper, sizes, obj);
 	if (ret < 0)
 		goto err_destroy_framebuffer;
 
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 4/9] drm/exynos: update fb_info via only one function
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
  2015-09-01  7:22 ` [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c Joonyoung Shim
  2015-09-01  7:22 ` [PATCH 3/9] drm/exynos: cleanup exynos_drm_fbdev_update() Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 20:30   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 5/9] drm/exynos: cleanup to get gem object for fb Joonyoung Shim
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

This patch moves codes to update fb_info into exynos_drm_fbdev_update(),
so fb_info is updated via only one function.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 4ef8739..133cf5f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -78,12 +78,22 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
 				   struct drm_fb_helper_surface_size *sizes,
 				   struct exynos_drm_gem_obj *obj)
 {
-	struct fb_info *fbi = helper->fbdev;
+	struct fb_info *fbi;
 	struct drm_framebuffer *fb = helper->fb;
 	unsigned int size = fb->width * fb->height * (fb->bits_per_pixel >> 3);
 	unsigned int nr_pages;
 	unsigned long offset;
 
+	fbi = drm_fb_helper_alloc_fbi(helper);
+	if (IS_ERR(fbi)) {
+		DRM_ERROR("failed to allocate fb info.\n");
+		return PTR_ERR(fbi);
+	}
+
+	fbi->par = helper;
+	fbi->flags = FBINFO_FLAG_DEFAULT;
+	fbi->fbops = &exynos_drm_fb_ops;
+
 	drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->depth);
 	drm_fb_helper_fill_var(fbi, helper, sizes->fb_width, sizes->fb_height);
 
@@ -93,6 +103,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
 			pgprot_writecombine(PAGE_KERNEL));
 	if (!obj->kvaddr) {
 		DRM_ERROR("failed to map pages to kernel space.\n");
+		drm_fb_helper_release_fbi(helper);
 		return -EIO;
 	}
 
@@ -112,7 +123,6 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 	struct exynos_drm_fbdev *exynos_fbdev = to_exynos_fbdev(helper);
 	struct exynos_drm_gem_obj *obj;
 	struct drm_device *dev = helper->dev;
-	struct fb_info *fbi;
 	struct drm_mode_fb_cmd2 mode_cmd = { 0 };
 	struct platform_device *pdev = dev->platformdev;
 	unsigned long size;
@@ -130,13 +140,6 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 
 	mutex_lock(&dev->struct_mutex);
 
-	fbi = drm_fb_helper_alloc_fbi(helper);
-	if (IS_ERR(fbi)) {
-		DRM_ERROR("failed to allocate fb info.\n");
-		ret = PTR_ERR(fbi);
-		goto out;
-	}
-
 	size = mode_cmd.pitches[0] * mode_cmd.height;
 
 	obj = exynos_drm_gem_create(dev, EXYNOS_BO_CONTIG, size);
@@ -152,7 +155,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 
 	if (IS_ERR(obj)) {
 		ret = PTR_ERR(obj);
-		goto err_release_fbi;
+		goto out;
 	}
 
 	exynos_fbdev->obj = obj;
@@ -164,10 +167,6 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 		goto err_destroy_gem;
 	}
 
-	fbi->par = helper;
-	fbi->flags = FBINFO_FLAG_DEFAULT;
-	fbi->fbops = &exynos_drm_fb_ops;
-
 	ret = exynos_drm_fbdev_update(helper, sizes, obj);
 	if (ret < 0)
 		goto err_destroy_framebuffer;
@@ -179,8 +178,6 @@ err_destroy_framebuffer:
 	drm_framebuffer_cleanup(helper->fb);
 err_destroy_gem:
 	exynos_drm_gem_destroy(obj);
-err_release_fbi:
-	drm_fb_helper_release_fbi(helper);
 
 /*
  * if failed, all resources allocated above would be released by
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 5/9] drm/exynos: cleanup to get gem object for fb
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
                   ` (2 preceding siblings ...)
  2015-09-01  7:22 ` [PATCH 4/9] drm/exynos: update fb_info via only one function Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 20:31   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers Joonyoung Shim
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

Current codes get first gem object and then again get remain gem
objects. They can be unified to one routine.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index effeb64..5cee148 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -179,27 +179,18 @@ exynos_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
 	if (!exynos_fb)
 		return ERR_PTR(-ENOMEM);
 
-	obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]);
-	if (!obj) {
-		DRM_ERROR("failed to lookup gem object\n");
-		ret = -ENOENT;
-		goto err_free;
-	}
-
-	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
-	exynos_fb->exynos_gem_obj[0] = to_exynos_gem_obj(obj);
 	exynos_fb->buf_cnt = drm_format_num_planes(mode_cmd->pixel_format);
 
 	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
 
-	for (i = 1; i < exynos_fb->buf_cnt; i++) {
+	for (i = 0; i < exynos_fb->buf_cnt; i++) {
 		obj = drm_gem_object_lookup(dev, file_priv,
 				mode_cmd->handles[i]);
 		if (!obj) {
 			DRM_ERROR("failed to lookup gem object\n");
 			ret = -ENOENT;
 			exynos_fb->buf_cnt = i;
-			goto err_unreference;
+			goto err;
 		}
 
 		exynos_gem_obj = to_exynos_gem_obj(obj);
@@ -207,18 +198,20 @@ exynos_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
 
 		ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
 		if (ret < 0)
-			goto err_unreference;
+			goto err;
 	}
 
+	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
+
 	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
 	if (ret) {
 		DRM_ERROR("failed to init framebuffer.\n");
-		goto err_unreference;
+		goto err;
 	}
 
 	return &exynos_fb->fb;
 
-err_unreference:
+err:
 	for (i = 0; i < exynos_fb->buf_cnt; i++) {
 		struct drm_gem_object *obj;
 
@@ -226,7 +219,7 @@ err_unreference:
 		if (obj)
 			drm_gem_object_unreference_unlocked(obj);
 	}
-err_free:
+
 	kfree(exynos_fb);
 	return ERR_PTR(ret);
 }
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
                   ` (3 preceding siblings ...)
  2015-09-01  7:22 ` [PATCH 5/9] drm/exynos: cleanup to get gem object for fb Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 20:35   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create() Joonyoung Shim
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

This modifies exynos_drm_framebuffer_init() to be possible to support
multiple buffers. Then it can be used by exynos_user_fb_create().

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c    | 36 +++++++++++++++++--------------
 drivers/gpu/drm/exynos/exynos_drm_fb.h    |  5 ++++-
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c |  3 +--
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 5cee148..8e5d3eb 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -23,7 +23,6 @@
 #include "exynos_drm_drv.h"
 #include "exynos_drm_fb.h"
 #include "exynos_drm_fbdev.h"
-#include "exynos_drm_gem.h"
 #include "exynos_drm_iommu.h"
 #include "exynos_drm_crtc.h"
 
@@ -134,36 +133,41 @@ unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb)
 struct drm_framebuffer *
 exynos_drm_framebuffer_init(struct drm_device *dev,
 			    struct drm_mode_fb_cmd2 *mode_cmd,
-			    struct drm_gem_object *obj)
+			    struct exynos_drm_gem_obj **gem_obj,
+			    int count)
 {
 	struct exynos_drm_fb *exynos_fb;
-	struct exynos_drm_gem_obj *exynos_gem_obj;
+	int i;
 	int ret;
 
-	exynos_gem_obj = to_exynos_gem_obj(obj);
-
-	ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
-	if (ret < 0)
-		return ERR_PTR(ret);
-
 	exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL);
 	if (!exynos_fb)
 		return ERR_PTR(-ENOMEM);
 
-	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
-	exynos_fb->exynos_gem_obj[0] = exynos_gem_obj;
+	exynos_fb->buf_cnt = count;
+	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
 
-	/* buffer count to framebuffer always is 1 at booting time. */
-	exynos_fb->buf_cnt = 1;
+	for (i = 0; i < count; i++) {
+		ret = check_fb_gem_memory_type(dev, gem_obj[i]);
+		if (ret < 0)
+			goto err;
+
+		exynos_fb->exynos_gem_obj[i] = gem_obj[i];
+	}
+
+	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
 
 	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
-	if (ret) {
-		kfree(exynos_fb);
+	if (ret < 0) {
 		DRM_ERROR("failed to initialize framebuffer\n");
-		return ERR_PTR(ret);
+		goto err;
 	}
 
 	return &exynos_fb->fb;
+
+err:
+	kfree(exynos_fb);
+	return ERR_PTR(ret);
 }
 
 static struct drm_framebuffer *
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h
index 897d2cf..8900f6b 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
@@ -14,10 +14,13 @@
 #ifndef _EXYNOS_DRM_FB_H_
 #define _EXYNOS_DRM_FB_H
 
+#include "exynos_drm_gem.h"
+
 struct drm_framebuffer *
 exynos_drm_framebuffer_init(struct drm_device *dev,
 			    struct drm_mode_fb_cmd2 *mode_cmd,
-			    struct drm_gem_object *obj);
+			    struct exynos_drm_gem_obj **gem_obj,
+			    int count);
 
 /* get gem object of a drm framebuffer */
 struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 133cf5f..a221f75 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -21,7 +21,6 @@
 #include "exynos_drm_drv.h"
 #include "exynos_drm_fb.h"
 #include "exynos_drm_fbdev.h"
-#include "exynos_drm_gem.h"
 #include "exynos_drm_iommu.h"
 
 #define MAX_CONNECTOR		4
@@ -160,7 +159,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
 
 	exynos_fbdev->obj = obj;
 
-	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj->base);
+	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj, 1);
 	if (IS_ERR(helper->fb)) {
 		DRM_ERROR("failed to create drm framebuffer.\n");
 		ret = PTR_ERR(helper->fb);
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create()
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
                   ` (4 preceding siblings ...)
  2015-09-01  7:22 ` [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 20:53   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 8/9] drm/exynos: remove exynos_drm_fb_get_buf_cnt() Joonyoung Shim
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

Using exynos_drm_framebuffer_init(), redundant codes can be removed.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c | 47 ++++++++++------------------------
 1 file changed, 13 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 8e5d3eb..9accc0d 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -174,57 +174,36 @@ static struct drm_framebuffer *
 exynos_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
 		      struct drm_mode_fb_cmd2 *mode_cmd)
 {
+	struct exynos_drm_gem_obj *gem_objs[MAX_FB_BUFFER];
 	struct drm_gem_object *obj;
-	struct exynos_drm_gem_obj *exynos_gem_obj;
-	struct exynos_drm_fb *exynos_fb;
-	int i, ret;
-
-	exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL);
-	if (!exynos_fb)
-		return ERR_PTR(-ENOMEM);
-
-	exynos_fb->buf_cnt = drm_format_num_planes(mode_cmd->pixel_format);
-
-	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
+	struct drm_framebuffer *fb;
+	int i;
+	int ret;
 
-	for (i = 0; i < exynos_fb->buf_cnt; i++) {
+	for (i = 0; i < drm_format_num_planes(mode_cmd->pixel_format); i++) {
 		obj = drm_gem_object_lookup(dev, file_priv,
-				mode_cmd->handles[i]);
+					    mode_cmd->handles[i]);
 		if (!obj) {
 			DRM_ERROR("failed to lookup gem object\n");
 			ret = -ENOENT;
-			exynos_fb->buf_cnt = i;
 			goto err;
 		}
 
-		exynos_gem_obj = to_exynos_gem_obj(obj);
-		exynos_fb->exynos_gem_obj[i] = exynos_gem_obj;
-
-		ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
-		if (ret < 0)
-			goto err;
+		gem_objs[i] = to_exynos_gem_obj(obj);
 	}
 
-	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
-
-	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
-	if (ret) {
-		DRM_ERROR("failed to init framebuffer.\n");
+	fb = exynos_drm_framebuffer_init(dev, mode_cmd, gem_objs, i);
+	if (IS_ERR(fb)) {
+		ret = PTR_ERR(fb);
 		goto err;
 	}
 
-	return &exynos_fb->fb;
+	return fb;
 
 err:
-	for (i = 0; i < exynos_fb->buf_cnt; i++) {
-		struct drm_gem_object *obj;
+	while (i--)
+		drm_gem_object_unreference_unlocked(&gem_objs[i]->base);
 
-		obj = &exynos_fb->exynos_gem_obj[i]->base;
-		if (obj)
-			drm_gem_object_unreference_unlocked(obj);
-	}
-
-	kfree(exynos_fb);
 	return ERR_PTR(ret);
 }
 
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 8/9] drm/exynos: remove exynos_drm_fb_get_buf_cnt()
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
                   ` (5 preceding siblings ...)
  2015-09-01  7:22 ` [PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create() Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 20:54   ` Gustavo Padovan
  2015-09-01  7:22 ` [PATCH 9/9] drm/exynos: remove buf_cnt from struct exynos_drm_fb Joonyoung Shim
  2015-09-01 16:41 ` [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Gustavo Padovan
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

We can get buffer count of framebuffer using drm_format_num_planes(), so
keeping exynos_drm_fb_get_buf_cnt() is unnecessary.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c    | 9 ---------
 drivers/gpu/drm/exynos/exynos_drm_fb.h    | 3 ---
 drivers/gpu/drm/exynos/exynos_drm_plane.c | 2 +-
 3 files changed, 1 insertion(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index 9accc0d..d2e746e 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -121,15 +121,6 @@ static struct drm_framebuffer_funcs exynos_drm_fb_funcs = {
 	.dirty		= exynos_drm_fb_dirty,
 };
 
-unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb)
-{
-	struct exynos_drm_fb *exynos_fb;
-
-	exynos_fb = to_exynos_fb(fb);
-
-	return exynos_fb->buf_cnt;
-}
-
 struct drm_framebuffer *
 exynos_drm_framebuffer_init(struct drm_device *dev,
 			    struct drm_mode_fb_cmd2 *mode_cmd,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h
index 8900f6b..85e4445 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
@@ -28,7 +28,4 @@ struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb,
 
 void exynos_drm_mode_config_init(struct drm_device *dev);
 
-/* get a buffer count to drm framebuffer. */
-unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb);
-
 #endif
diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/exynos/exynos_drm_plane.c
index d9a68fd..36c9911 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_plane.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c
@@ -132,7 +132,7 @@ static int exynos_plane_atomic_check(struct drm_plane *plane,
 	if (!state->fb)
 		return 0;
 
-	nr = exynos_drm_fb_get_buf_cnt(state->fb);
+	nr = drm_format_num_planes(state->fb->pixel_format);
 	for (i = 0; i < nr; i++) {
 		struct exynos_drm_gem_obj *obj =
 					exynos_drm_fb_gem_obj(state->fb, i);
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 9/9] drm/exynos: remove buf_cnt from struct exynos_drm_fb
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
                   ` (6 preceding siblings ...)
  2015-09-01  7:22 ` [PATCH 8/9] drm/exynos: remove exynos_drm_fb_get_buf_cnt() Joonyoung Shim
@ 2015-09-01  7:22 ` Joonyoung Shim
  2015-09-01 20:55   ` Gustavo Padovan
  2015-09-01 16:41 ` [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Gustavo Padovan
  8 siblings, 1 reply; 20+ messages in thread
From: Joonyoung Shim @ 2015-09-01  7:22 UTC (permalink / raw)
  To: dri-devel; +Cc: sw0312.kim

Looking other drm drivers, there is no the restriction that framebuffer
has only one buffer in .create_handle() callback. They use just first
buffer.

If this limitation is removed, there is no reason keeping buffer count
for framebuffer, so we can remove buf_cnt from struct exynos_drm_fb.

Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_fb.c | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
index d2e746e..6d1b70e 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
@@ -32,12 +32,10 @@
  * exynos specific framebuffer structure.
  *
  * @fb: drm framebuffer obejct.
- * @buf_cnt: a buffer count to drm framebuffer.
  * @exynos_gem_obj: array of exynos specific gem object containing a gem object.
  */
 struct exynos_drm_fb {
 	struct drm_framebuffer		fb;
-	unsigned int			buf_cnt;
 	struct exynos_drm_gem_obj	*exynos_gem_obj[MAX_FB_BUFFER];
 };
 
@@ -97,10 +95,6 @@ static int exynos_drm_fb_create_handle(struct drm_framebuffer *fb,
 {
 	struct exynos_drm_fb *exynos_fb = to_exynos_fb(fb);
 
-	/* This fb should have only one gem object. */
-	if (WARN_ON(exynos_fb->buf_cnt != 1))
-		return -EINVAL;
-
 	return drm_gem_handle_create(file_priv,
 			&exynos_fb->exynos_gem_obj[0]->base, handle);
 }
@@ -135,9 +129,6 @@ exynos_drm_framebuffer_init(struct drm_device *dev,
 	if (!exynos_fb)
 		return ERR_PTR(-ENOMEM);
 
-	exynos_fb->buf_cnt = count;
-	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
-
 	for (i = 0; i < count; i++) {
 		ret = check_fb_gem_memory_type(dev, gem_obj[i]);
 		if (ret < 0)
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt()
  2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
                   ` (7 preceding siblings ...)
  2015-09-01  7:22 ` [PATCH 9/9] drm/exynos: remove buf_cnt from struct exynos_drm_fb Joonyoung Shim
@ 2015-09-01 16:41 ` Gustavo Padovan
  8 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 16:41 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> The exynos_drm_fb_set_buf_cnt() is used to set buffer count only in
> exynos_drm_fbdev_update(). This patch sets directly buffer count in
> exynos_drm_framebuffer_init() without using exynos_drm_fb_set_buf_cnt(),
> so there is no any reason to keep exynos_drm_fb_set_buf_cnt().
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c    | 13 +++----------
>  drivers/gpu/drm/exynos/exynos_drm_fb.h    |  4 ----
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |  3 ---
>  3 files changed, 3 insertions(+), 17 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c
  2015-09-01  7:22 ` [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c Joonyoung Shim
@ 2015-09-01 16:42   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 16:42 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> The variable name "exynos_gem_obj" is too long, so some lines exceed 80
> characters. It's simple to use "obj" instead of "exynos_gem_obj".
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 30 ++++++++++++++----------------
>  1 file changed, 14 insertions(+), 16 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 3/9] drm/exynos: cleanup exynos_drm_fbdev_update()
  2015-09-01  7:22 ` [PATCH 3/9] drm/exynos: cleanup exynos_drm_fbdev_update() Joonyoung Shim
@ 2015-09-01 16:43   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 16:43 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> It can get exynos_gem object via function argument, so no need to call
> exynos_drm_fb_gem_obj() in exynos_drm_fbdev_update.
> 
> It also can get struct drm_framebuffer *fb via helper->fb, so can remove
> a function argument for it.
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 15 ++++-----------
>  1 file changed, 4 insertions(+), 11 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 4/9] drm/exynos: update fb_info via only one function
  2015-09-01  7:22 ` [PATCH 4/9] drm/exynos: update fb_info via only one function Joonyoung Shim
@ 2015-09-01 20:30   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:30 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> This patch moves codes to update fb_info into exynos_drm_fbdev_update(),
> so fb_info is updated via only one function.
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 29 +++++++++++++----------------
>  1 file changed, 13 insertions(+), 16 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 5/9] drm/exynos: cleanup to get gem object for fb
  2015-09-01  7:22 ` [PATCH 5/9] drm/exynos: cleanup to get gem object for fb Joonyoung Shim
@ 2015-09-01 20:31   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:31 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> Current codes get first gem object and then again get remain gem
> objects. They can be unified to one routine.
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c | 23 ++++++++---------------
>  1 file changed, 8 insertions(+), 15 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers
  2015-09-01  7:22 ` [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers Joonyoung Shim
@ 2015-09-01 20:35   ` Gustavo Padovan
  2015-09-01 20:39     ` Gustavo Padovan
  2015-09-02 10:32     ` Inki Dae
  0 siblings, 2 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:35 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> This modifies exynos_drm_framebuffer_init() to be possible to support
> multiple buffers. Then it can be used by exynos_user_fb_create().
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c    | 36 +++++++++++++++++--------------
>  drivers/gpu/drm/exynos/exynos_drm_fb.h    |  5 ++++-
>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |  3 +--
>  3 files changed, 25 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> index 5cee148..8e5d3eb 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> @@ -23,7 +23,6 @@
>  #include "exynos_drm_drv.h"
>  #include "exynos_drm_fb.h"
>  #include "exynos_drm_fbdev.h"
> -#include "exynos_drm_gem.h"
>  #include "exynos_drm_iommu.h"
>  #include "exynos_drm_crtc.h"
>  
> @@ -134,36 +133,41 @@ unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb)
>  struct drm_framebuffer *
>  exynos_drm_framebuffer_init(struct drm_device *dev,
>  			    struct drm_mode_fb_cmd2 *mode_cmd,
> -			    struct drm_gem_object *obj)
> +			    struct exynos_drm_gem_obj **gem_obj,
> +			    int count)
>  {
>  	struct exynos_drm_fb *exynos_fb;
> -	struct exynos_drm_gem_obj *exynos_gem_obj;
> +	int i;
>  	int ret;
>  
> -	exynos_gem_obj = to_exynos_gem_obj(obj);
> -
> -	ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
> -	if (ret < 0)
> -		return ERR_PTR(ret);
> -
>  	exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL);
>  	if (!exynos_fb)
>  		return ERR_PTR(-ENOMEM);
>  
> -	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
> -	exynos_fb->exynos_gem_obj[0] = exynos_gem_obj;
> +	exynos_fb->buf_cnt = count;
> +	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
>  
> -	/* buffer count to framebuffer always is 1 at booting time. */
> -	exynos_fb->buf_cnt = 1;
> +	for (i = 0; i < count; i++) {
> +		ret = check_fb_gem_memory_type(dev, gem_obj[i]);
> +		if (ret < 0)
> +			goto err;
> +
> +		exynos_fb->exynos_gem_obj[i] = gem_obj[i];
> +	}
> +
> +	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
>  
>  	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
> -	if (ret) {
> -		kfree(exynos_fb);
> +	if (ret < 0) {
>  		DRM_ERROR("failed to initialize framebuffer\n");
> -		return ERR_PTR(ret);
> +		goto err;
>  	}
>  
>  	return &exynos_fb->fb;
> +
> +err:
> +	kfree(exynos_fb);
> +	return ERR_PTR(ret);
>  }
>  
>  static struct drm_framebuffer *
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h
> index 897d2cf..8900f6b 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
> @@ -14,10 +14,13 @@
>  #ifndef _EXYNOS_DRM_FB_H_
>  #define _EXYNOS_DRM_FB_H
>  
> +#include "exynos_drm_gem.h"
> +
>  struct drm_framebuffer *
>  exynos_drm_framebuffer_init(struct drm_device *dev,
>  			    struct drm_mode_fb_cmd2 *mode_cmd,
> -			    struct drm_gem_object *obj);
> +			    struct exynos_drm_gem_obj **gem_obj,
> +			    int count);
>  
>  /* get gem object of a drm framebuffer */
>  struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb,
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> index 133cf5f..a221f75 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -21,7 +21,6 @@
>  #include "exynos_drm_drv.h"
>  #include "exynos_drm_fb.h"
>  #include "exynos_drm_fbdev.h"
> -#include "exynos_drm_gem.h"
>  #include "exynos_drm_iommu.h"
>  
>  #define MAX_CONNECTOR		4
> @@ -160,7 +159,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
>  
>  	exynos_fbdev->obj = obj;
>  
> -	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj->base);
> +	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj, 1);

Do you have any use for this for multiple buffers? I don't see any patch
in this series for multiple buffers. I think we should wait for a user
of multiple buffers to apply this patch.

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers
  2015-09-01 20:35   ` Gustavo Padovan
@ 2015-09-01 20:39     ` Gustavo Padovan
  2015-09-02 10:32     ` Inki Dae
  1 sibling, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:39 UTC (permalink / raw)
  To: Joonyoung Shim, dri-devel, sw0312.kim

2015-09-01 Gustavo Padovan <gustavo@padovan.org>:

> 2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:
> 
> > This modifies exynos_drm_framebuffer_init() to be possible to support
> > multiple buffers. Then it can be used by exynos_user_fb_create().
> > 
> > Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> > ---
> >  drivers/gpu/drm/exynos/exynos_drm_fb.c    | 36 +++++++++++++++++--------------
> >  drivers/gpu/drm/exynos/exynos_drm_fb.h    |  5 ++++-
> >  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |  3 +--
> >  3 files changed, 25 insertions(+), 19 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > index 5cee148..8e5d3eb 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
> > @@ -23,7 +23,6 @@
> >  #include "exynos_drm_drv.h"
> >  #include "exynos_drm_fb.h"
> >  #include "exynos_drm_fbdev.h"
> > -#include "exynos_drm_gem.h"
> >  #include "exynos_drm_iommu.h"
> >  #include "exynos_drm_crtc.h"
> >  
> > @@ -134,36 +133,41 @@ unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb)
> >  struct drm_framebuffer *
> >  exynos_drm_framebuffer_init(struct drm_device *dev,
> >  			    struct drm_mode_fb_cmd2 *mode_cmd,
> > -			    struct drm_gem_object *obj)
> > +			    struct exynos_drm_gem_obj **gem_obj,
> > +			    int count)
> >  {
> >  	struct exynos_drm_fb *exynos_fb;
> > -	struct exynos_drm_gem_obj *exynos_gem_obj;
> > +	int i;
> >  	int ret;
> >  
> > -	exynos_gem_obj = to_exynos_gem_obj(obj);
> > -
> > -	ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
> > -	if (ret < 0)
> > -		return ERR_PTR(ret);
> > -
> >  	exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL);
> >  	if (!exynos_fb)
> >  		return ERR_PTR(-ENOMEM);
> >  
> > -	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
> > -	exynos_fb->exynos_gem_obj[0] = exynos_gem_obj;
> > +	exynos_fb->buf_cnt = count;
> > +	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
> >  
> > -	/* buffer count to framebuffer always is 1 at booting time. */
> > -	exynos_fb->buf_cnt = 1;
> > +	for (i = 0; i < count; i++) {
> > +		ret = check_fb_gem_memory_type(dev, gem_obj[i]);
> > +		if (ret < 0)
> > +			goto err;
> > +
> > +		exynos_fb->exynos_gem_obj[i] = gem_obj[i];
> > +	}
> > +
> > +	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
> >  
> >  	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
> > -	if (ret) {
> > -		kfree(exynos_fb);
> > +	if (ret < 0) {
> >  		DRM_ERROR("failed to initialize framebuffer\n");
> > -		return ERR_PTR(ret);
> > +		goto err;
> >  	}
> >  
> >  	return &exynos_fb->fb;
> > +
> > +err:
> > +	kfree(exynos_fb);
> > +	return ERR_PTR(ret);
> >  }
> >  
> >  static struct drm_framebuffer *
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h
> > index 897d2cf..8900f6b 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
> > @@ -14,10 +14,13 @@
> >  #ifndef _EXYNOS_DRM_FB_H_
> >  #define _EXYNOS_DRM_FB_H
> >  
> > +#include "exynos_drm_gem.h"
> > +
> >  struct drm_framebuffer *
> >  exynos_drm_framebuffer_init(struct drm_device *dev,
> >  			    struct drm_mode_fb_cmd2 *mode_cmd,
> > -			    struct drm_gem_object *obj);
> > +			    struct exynos_drm_gem_obj **gem_obj,
> > +			    int count);
> >  
> >  /* get gem object of a drm framebuffer */
> >  struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb,
> > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > index 133cf5f..a221f75 100644
> > --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> > @@ -21,7 +21,6 @@
> >  #include "exynos_drm_drv.h"
> >  #include "exynos_drm_fb.h"
> >  #include "exynos_drm_fbdev.h"
> > -#include "exynos_drm_gem.h"
> >  #include "exynos_drm_iommu.h"
> >  
> >  #define MAX_CONNECTOR		4
> > @@ -160,7 +159,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
> >  
> >  	exynos_fbdev->obj = obj;
> >  
> > -	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj->base);
> > +	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj, 1);
> 
> Do you have any use for this for multiple buffers? I don't see any patch
> in this series for multiple buffers. I think we should wait for a user
> of multiple buffers to apply this patch.

Ah, just saw it.

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create()
  2015-09-01  7:22 ` [PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create() Joonyoung Shim
@ 2015-09-01 20:53   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:53 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> Using exynos_drm_framebuffer_init(), redundant codes can be removed.
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c | 47 ++++++++++------------------------
>  1 file changed, 13 insertions(+), 34 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 8/9] drm/exynos: remove exynos_drm_fb_get_buf_cnt()
  2015-09-01  7:22 ` [PATCH 8/9] drm/exynos: remove exynos_drm_fb_get_buf_cnt() Joonyoung Shim
@ 2015-09-01 20:54   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:54 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> We can get buffer count of framebuffer using drm_format_num_planes(), so
> keeping exynos_drm_fb_get_buf_cnt() is unnecessary.
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c    | 9 ---------
>  drivers/gpu/drm/exynos/exynos_drm_fb.h    | 3 ---
>  drivers/gpu/drm/exynos/exynos_drm_plane.c | 2 +-
>  3 files changed, 1 insertion(+), 13 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 9/9] drm/exynos: remove buf_cnt from struct exynos_drm_fb
  2015-09-01  7:22 ` [PATCH 9/9] drm/exynos: remove buf_cnt from struct exynos_drm_fb Joonyoung Shim
@ 2015-09-01 20:55   ` Gustavo Padovan
  0 siblings, 0 replies; 20+ messages in thread
From: Gustavo Padovan @ 2015-09-01 20:55 UTC (permalink / raw)
  To: Joonyoung Shim; +Cc: sw0312.kim, dri-devel

Hi Joonyoung,

2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:

> Looking other drm drivers, there is no the restriction that framebuffer
> has only one buffer in .create_handle() callback. They use just first
> buffer.
> 
> If this limitation is removed, there is no reason keeping buffer count
> for framebuffer, so we can remove buf_cnt from struct exynos_drm_fb.
> 
> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_fb.c | 9 ---------
>  1 file changed, 9 deletions(-)

Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

	Gustavo
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers
  2015-09-01 20:35   ` Gustavo Padovan
  2015-09-01 20:39     ` Gustavo Padovan
@ 2015-09-02 10:32     ` Inki Dae
  1 sibling, 0 replies; 20+ messages in thread
From: Inki Dae @ 2015-09-02 10:32 UTC (permalink / raw)
  To: Gustavo Padovan, Joonyoung Shim, dri-devel, sw0312.kim

On 2015년 09월 02일 05:35, Gustavo Padovan wrote:
> 2015-09-01 Joonyoung Shim <jy0922.shim@samsung.com>:
> 
>> This modifies exynos_drm_framebuffer_init() to be possible to support
>> multiple buffers. Then it can be used by exynos_user_fb_create().
>>
>> Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com>
>> ---
>>  drivers/gpu/drm/exynos/exynos_drm_fb.c    | 36 +++++++++++++++++--------------
>>  drivers/gpu/drm/exynos/exynos_drm_fb.h    |  5 ++++-
>>  drivers/gpu/drm/exynos/exynos_drm_fbdev.c |  3 +--
>>  3 files changed, 25 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c
>> index 5cee148..8e5d3eb 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c
>> @@ -23,7 +23,6 @@
>>  #include "exynos_drm_drv.h"
>>  #include "exynos_drm_fb.h"
>>  #include "exynos_drm_fbdev.h"
>> -#include "exynos_drm_gem.h"
>>  #include "exynos_drm_iommu.h"
>>  #include "exynos_drm_crtc.h"
>>  
>> @@ -134,36 +133,41 @@ unsigned int exynos_drm_fb_get_buf_cnt(struct drm_framebuffer *fb)
>>  struct drm_framebuffer *
>>  exynos_drm_framebuffer_init(struct drm_device *dev,
>>  			    struct drm_mode_fb_cmd2 *mode_cmd,
>> -			    struct drm_gem_object *obj)
>> +			    struct exynos_drm_gem_obj **gem_obj,
>> +			    int count)
>>  {
>>  	struct exynos_drm_fb *exynos_fb;
>> -	struct exynos_drm_gem_obj *exynos_gem_obj;
>> +	int i;
>>  	int ret;
>>  
>> -	exynos_gem_obj = to_exynos_gem_obj(obj);
>> -
>> -	ret = check_fb_gem_memory_type(dev, exynos_gem_obj);
>> -	if (ret < 0)
>> -		return ERR_PTR(ret);
>> -
>>  	exynos_fb = kzalloc(sizeof(*exynos_fb), GFP_KERNEL);
>>  	if (!exynos_fb)
>>  		return ERR_PTR(-ENOMEM);
>>  
>> -	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
>> -	exynos_fb->exynos_gem_obj[0] = exynos_gem_obj;
>> +	exynos_fb->buf_cnt = count;
>> +	DRM_DEBUG_KMS("buf_cnt = %d\n", exynos_fb->buf_cnt);
>>  
>> -	/* buffer count to framebuffer always is 1 at booting time. */
>> -	exynos_fb->buf_cnt = 1;
>> +	for (i = 0; i < count; i++) {
>> +		ret = check_fb_gem_memory_type(dev, gem_obj[i]);
>> +		if (ret < 0)
>> +			goto err;
>> +
>> +		exynos_fb->exynos_gem_obj[i] = gem_obj[i];
>> +	}
>> +
>> +	drm_helper_mode_fill_fb_struct(&exynos_fb->fb, mode_cmd);
>>  
>>  	ret = drm_framebuffer_init(dev, &exynos_fb->fb, &exynos_drm_fb_funcs);
>> -	if (ret) {
>> -		kfree(exynos_fb);
>> +	if (ret < 0) {
>>  		DRM_ERROR("failed to initialize framebuffer\n");
>> -		return ERR_PTR(ret);
>> +		goto err;
>>  	}
>>  
>>  	return &exynos_fb->fb;
>> +
>> +err:
>> +	kfree(exynos_fb);
>> +	return ERR_PTR(ret);
>>  }
>>  
>>  static struct drm_framebuffer *
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.h b/drivers/gpu/drm/exynos/exynos_drm_fb.h
>> index 897d2cf..8900f6b 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fb.h
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.h
>> @@ -14,10 +14,13 @@
>>  #ifndef _EXYNOS_DRM_FB_H_
>>  #define _EXYNOS_DRM_FB_H
>>  
>> +#include "exynos_drm_gem.h"
>> +
>>  struct drm_framebuffer *
>>  exynos_drm_framebuffer_init(struct drm_device *dev,
>>  			    struct drm_mode_fb_cmd2 *mode_cmd,
>> -			    struct drm_gem_object *obj);
>> +			    struct exynos_drm_gem_obj **gem_obj,
>> +			    int count);
>>  
>>  /* get gem object of a drm framebuffer */
>>  struct exynos_drm_gem_obj *exynos_drm_fb_gem_obj(struct drm_framebuffer *fb,
>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
>> index 133cf5f..a221f75 100644
>> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
>> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
>> @@ -21,7 +21,6 @@
>>  #include "exynos_drm_drv.h"
>>  #include "exynos_drm_fb.h"
>>  #include "exynos_drm_fbdev.h"
>> -#include "exynos_drm_gem.h"
>>  #include "exynos_drm_iommu.h"
>>  
>>  #define MAX_CONNECTOR		4
>> @@ -160,7 +159,7 @@ static int exynos_drm_fbdev_create(struct drm_fb_helper *helper,
>>  
>>  	exynos_fbdev->obj = obj;
>>  
>> -	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj->base);
>> +	helper->fb = exynos_drm_framebuffer_init(dev, &mode_cmd, &obj, 1);
> 
> Do you have any use for this for multiple buffers? I don't see any patch
> in this series for multiple buffers. I think we should wait for a user
> of multiple buffers to apply this patch.

Exynos4412 SoC has a video processor which can handle YCbCr - NV12 and
NV21 - image, and the image is transferred to Digital TV through HDMI
controller. NV12 and NV21 have 2 plane buffers and the video processor
is controlled by Exynos drm driver. So reasonable and looks good to me.

Thanks,
Inki Dae

> 
> 	Gustavo
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2015-09-02 10:32 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-01  7:22 [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Joonyoung Shim
2015-09-01  7:22 ` [PATCH 2/9] drm/exynos: s/exynos_gem_obj/obj in exynos_drm_fbdev.c Joonyoung Shim
2015-09-01 16:42   ` Gustavo Padovan
2015-09-01  7:22 ` [PATCH 3/9] drm/exynos: cleanup exynos_drm_fbdev_update() Joonyoung Shim
2015-09-01 16:43   ` Gustavo Padovan
2015-09-01  7:22 ` [PATCH 4/9] drm/exynos: update fb_info via only one function Joonyoung Shim
2015-09-01 20:30   ` Gustavo Padovan
2015-09-01  7:22 ` [PATCH 5/9] drm/exynos: cleanup to get gem object for fb Joonyoung Shim
2015-09-01 20:31   ` Gustavo Padovan
2015-09-01  7:22 ` [PATCH 6/9] drm/exynos: update exynos_drm_framebuffer_init() for multiple buffers Joonyoung Shim
2015-09-01 20:35   ` Gustavo Padovan
2015-09-01 20:39     ` Gustavo Padovan
2015-09-02 10:32     ` Inki Dae
2015-09-01  7:22 ` [PATCH 7/9] drm/exynos: cleanup exynos_user_fb_create() Joonyoung Shim
2015-09-01 20:53   ` Gustavo Padovan
2015-09-01  7:22 ` [PATCH 8/9] drm/exynos: remove exynos_drm_fb_get_buf_cnt() Joonyoung Shim
2015-09-01 20:54   ` Gustavo Padovan
2015-09-01  7:22 ` [PATCH 9/9] drm/exynos: remove buf_cnt from struct exynos_drm_fb Joonyoung Shim
2015-09-01 20:55   ` Gustavo Padovan
2015-09-01 16:41 ` [PATCH 1/9] drm/exynos: remove exynos_drm_fb_set_buf_cnt() Gustavo Padovan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.