Skip to contentSkip to conversation

drm/mtk: Remove impossible internal error

PATCH In review Daniel Stone 3 participants 6 messages May 18, 2018 – Jul 2, 2018

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/3 drm/mtk: Remove impossible internal error

We cannot create a framebuffer with no objects, so there's no point testing for it.

v2: Remove the error entirely. (Sean, CK, Thierry)

Cc Sean Paul <[email protected]>
Cc Thierry Reding <[email protected]>
Cc Philipp Zabel <[email protected]>
---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c | 5 -----
 1 file changed, 5 deletions(-)
drivers/gpu/drm/mediatek/mtk_drm_plane.c +0 -5
index 2f4b0ffee598..149fc4372917 100644
@@ -95,11 +95,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
 	if (!fb)
 		return 0;
 
-	if (!mtk_fb_get_gem_obj(fb)) {
-		DRM_DEBUG_KMS("buffer is null\n");
-		return -EFAULT;
-	}
-
 	if (!state->crtc)
 		return 0;
 
Signature · 6 lines
2.17.0

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
#1 lore raw

PATCH v2 2/3 drm/mtk: Move GEM BO to drm_framebuffer

Since drm_framebuffer can now store GEM objects directly, place them there rather than in our own subclass. As this makes the framebuffer create_handle and destroy functions the same as the GEM framebuffer helper, we can reuse those.

---
 drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 38 ++++--------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h    |  1 -
 drivers/gpu/drm/mediatek/mtk_drm_plane.c |  2 +-
 3 files changed, 6 insertions(+), 35 deletions(-)
drivers/gpu/drm/mediatek/mtk_drm_fb.c +5 -33
index 0d8d506695f9..f130e37123b5 100644
@@ -15,6 +15,7 @@
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
 #include <drm/drm_gem.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <linux/dma-buf.h>
 #include <linux/reservation.h>
 
@@ -30,42 +31,13 @@
  */
 struct mtk_drm_fb {
 	struct drm_framebuffer	base;
-	/* For now we only support a single plane */
-	struct drm_gem_object	*gem_obj;
 };
 
 #define to_mtk_fb(x) container_of(x, struct mtk_drm_fb, base)
 
-struct drm_gem_object *mtk_fb_get_gem_obj(struct drm_framebuffer *fb)
-{
-	struct mtk_drm_fb *mtk_fb = to_mtk_fb(fb);
-
-	return mtk_fb->gem_obj;
-}
-
-static int mtk_drm_fb_create_handle(struct drm_framebuffer *fb,
-				    struct drm_file *file_priv,
-				    unsigned int *handle)
-{
-	struct mtk_drm_fb *mtk_fb = to_mtk_fb(fb);
-
-	return drm_gem_handle_create(file_priv, mtk_fb->gem_obj, handle);
-}
-
-static void mtk_drm_fb_destroy(struct drm_framebuffer *fb)
-{
-	struct mtk_drm_fb *mtk_fb = to_mtk_fb(fb);
-
-	drm_framebuffer_cleanup(fb);
-
-	drm_gem_object_put_unlocked(mtk_fb->gem_obj);
-
-	kfree(mtk_fb);
-}
-
 static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
-	.create_handle = mtk_drm_fb_create_handle,
-	.destroy = mtk_drm_fb_destroy,
+	.create_handle = drm_gem_fb_create_handle,
+	.destroy = drm_gem_fb_destroy,
 };
 
 static struct mtk_drm_fb *mtk_drm_framebuffer_init(struct drm_device *dev,
@@ -84,7 +56,7 @@ static struct mtk_drm_fb *mtk_drm_framebuffer_init(struct drm_device *dev,
 
 	drm_helper_mode_fill_fb_struct(dev, &mtk_fb->base, mode);
 
-	mtk_fb->gem_obj = obj;
+	mtk_fb->base.obj[0] = obj;
 
 	ret = drm_framebuffer_init(dev, &mtk_fb->base, &mtk_drm_fb_funcs);
 	if (ret) {
@@ -110,7 +82,7 @@ int mtk_fb_wait(struct drm_framebuffer *fb)
 	if (!fb)
 		return 0;
 
-	gem = mtk_fb_get_gem_obj(fb);
+	gem = fb->obj[0];
 	if (!gem || !gem->dma_buf || !gem->dma_buf->resv)
 		return 0;
 
drivers/gpu/drm/mediatek/mtk_drm_fb.h +0 -1
index 9b2ae345a4e9..7f976b196a15 100644
@@ -14,7 +14,6 @@
 #ifndef MTK_DRM_FB_H
 #define MTK_DRM_FB_H
 
-struct drm_gem_object *mtk_fb_get_gem_obj(struct drm_framebuffer *fb);
 int mtk_fb_wait(struct drm_framebuffer *fb);
 struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
 					       struct drm_file *file,
drivers/gpu/drm/mediatek/mtk_drm_plane.c +1 -1
index 149fc4372917..f7e6aa1b5b7d 100644
@@ -122,7 +122,7 @@ static void mtk_plane_atomic_update(struct drm_plane *plane,
 	if (!crtc || WARN_ON(!fb))
 		return;
 
-	gem = mtk_fb_get_gem_obj(fb);
+	gem = fb->obj[0];
 	mtk_gem = to_mtk_gem_obj(gem);
 	addr = mtk_gem->dma_addr;
 	pitch = fb->pitches[0];
Signature · 6 lines
2.17.0

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
#2 lore raw

PATCH v2 3/3 drm/mtk: mtk_drm_fb -> drm_framebuffer

In reply to Daniel Stone

Now that mtk_drm_fb is an empty wrapper around drm_framebuffer, we can just delete it.

---
 drivers/gpu/drm/mediatek/mtk_drm_fb.c | 40 ++++++++++-----------------
 1 file changed, 14 insertions(+), 26 deletions(-)
drivers/gpu/drm/mediatek/mtk_drm_fb.c +14 -26
index f130e37123b5..be5f6f1daf55 100644
@@ -23,49 +23,37 @@
 #include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 
-/*
- * mtk specific framebuffer structure.
- *
- * @fb: drm framebuffer object.
- * @gem_obj: array of gem objects.
- */
-struct mtk_drm_fb {
-	struct drm_framebuffer	base;
-};
-
-#define to_mtk_fb(x) container_of(x, struct mtk_drm_fb, base)
-
 static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
 	.create_handle = drm_gem_fb_create_handle,
 	.destroy = drm_gem_fb_destroy,
 };
 
-static struct mtk_drm_fb *mtk_drm_framebuffer_init(struct drm_device *dev,
+static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
 					const struct drm_mode_fb_cmd2 *mode,
 					struct drm_gem_object *obj)
 {
-	struct mtk_drm_fb *mtk_fb;
+	struct drm_framebuffer *fb;
 	int ret;
 
 	if (drm_format_num_planes(mode->pixel_format) != 1)
 		return ERR_PTR(-EINVAL);
 
-	mtk_fb = kzalloc(sizeof(*mtk_fb), GFP_KERNEL);
-	if (!mtk_fb)
+	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	if (!fb)
 		return ERR_PTR(-ENOMEM);
 
-	drm_helper_mode_fill_fb_struct(dev, &mtk_fb->base, mode);
+	drm_helper_mode_fill_fb_struct(dev, fb, mode);
 
-	mtk_fb->base.obj[0] = obj;
+	fb->obj[0] = obj;
 
-	ret = drm_framebuffer_init(dev, &mtk_fb->base, &mtk_drm_fb_funcs);
+	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
 	if (ret) {
 		DRM_ERROR("failed to initialize framebuffer\n");
-		kfree(mtk_fb);
+		kfree(fb);
 		return ERR_PTR(ret);
 	}
 
-	return mtk_fb;
+	return fb;
 }
 
 /*
@@ -100,7 +88,7 @@ struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
 					       struct drm_file *file,
 					       const struct drm_mode_fb_cmd2 *cmd)
 {
-	struct mtk_drm_fb *mtk_fb;
+	struct drm_framebuffer *fb;
 	struct drm_gem_object *gem;
 	unsigned int width = cmd->width;
 	unsigned int height = cmd->height;
@@ -123,13 +111,13 @@ struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
 		goto unreference;
 	}
 
-	mtk_fb = mtk_drm_framebuffer_init(dev, cmd, gem);
-	if (IS_ERR(mtk_fb)) {
-		ret = PTR_ERR(mtk_fb);
+	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
+	if (IS_ERR(fb)) {
+		ret = PTR_ERR(fb);
 		goto unreference;
 	}
 
-	return &mtk_fb->base;
+	return fb;
 
 unreference:
 	drm_gem_object_put_unlocked(gem);
Signature · 6 lines
2.17.0

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Acked-by on v2 1/3
#3 lore raw
In reply to Daniel Stone
Quoted 5 lines · Daniel Stone

We cannot create a framebuffer with no objects, so there's no point testing for it.

v2: Remove the error entirely. (Sean, CK, Thierry)

Quoted 8 lines
Cc Sean Paul <[email protected]>
Cc Thierry Reding <[email protected]>
Cc Philipp Zabel <[email protected]>
---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c | 5 -----
 1 file changed, 5 deletions(-)

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reviewed-by on v2 1/3
#4 lore raw
In reply to Daniel Stone
Quoted 5 lines · Daniel Stone

We cannot create a framebuffer with no objects, so there's no point testing for it.

v2: Remove the error entirely. (Sean, CK, Thierry)

Quoted 15 lines
Cc Sean Paul <[email protected]>
Cc Thierry Reding <[email protected]>
Cc Philipp Zabel <[email protected]>
---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c | 5 -----
 1 file changed, 5 deletions(-)
drivers/gpu/drm/mediatek/mtk_drm_plane.c +0 -0
index 2f4b0ffee598..149fc4372917 100644
@@ -95,11 +95,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
 	if (!fb)

drivers/gpu/drm/mediatek/mtk_drm_plane.c static int mtk_plane_atomic_check(struct drm_plane *plane, · line 100

Quoted 10 lines
drivers/gpu/drm/mediatek/mtk_drm_plane.c +0 -5
 		return 0;
 
-	if (!mtk_fb_get_gem_obj(fb)) {
-		DRM_DEBUG_KMS("buffer is null\n");
-		return -EFAULT;
-	}
-
 	if (!state->crtc)
 		return 0;
 

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

#5 lore raw
In reply to Daniel Stone

Hi, Daniel:

For the series, applied to mediatek-drm-next-4.19 [1].

[1]
https://github.com/ckhu-mediatek/linux.git-tags/commits/mediatek-drm-next-4.19

Regards,
CK

Quoted 20 lines · Daniel Stone

We cannot create a framebuffer with no objects, so there's no point testing for it.

v2: Remove the error entirely. (Sean, CK, Thierry)

Cc Sean Paul <[email protected]>
Cc Thierry Reding <[email protected]>
Cc Philipp Zabel <[email protected]>
---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c | 5 -----
 1 file changed, 5 deletions(-)
drivers/gpu/drm/mediatek/mtk_drm_plane.c +0 -0
index 2f4b0ffee598..149fc4372917 100644
@@ -95,11 +95,6 @@ static int mtk_plane_atomic_check(struct drm_plane *plane,
 	if (!fb)

drivers/gpu/drm/mediatek/mtk_drm_plane.c static int mtk_plane_atomic_check(struct drm_plane *plane, · line 100

Quoted 10 lines
drivers/gpu/drm/mediatek/mtk_drm_plane.c +0 -5
 		return 0;
 
-	if (!mtk_fb_get_gem_obj(fb)) {
-		DRM_DEBUG_KMS("buffer is null\n");
-		return -EFAULT;
-	}
-
 	if (!state->crtc)
 		return 0;
 

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel